プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

入力データを全面的に信用してはならない

いや、確かに秒が60になるなんて想定はしないし、テストしきれなくてもムリないよ、これは。

7月1日のsyslogに以下のようなログが記録されているかどうかをご確認ください。

Jul 1 08:59:59 sbridge kernel: Clock: inserting leap second 23:59:60 UTC

MySQLの場合、MySQL 5.5においてsrv_lock_timeout_threadとsrv_error_monitor_threadというバックグラウンドスレッドがこの不具合により暴走します。MySQL 5.1についてはこれらのバックグラウンドスレッドがfutex(2)を利用していないため、CPU使用率の高騰は発生しませんでした。

うるう秒のあとにMySQLなどのCPU使用率が高騰する件について - SH2の日記

他にもうるう秒関連の障害がいくつかあったみたいね。2000年問題を思い出したよ。

この問題の教訓は「入力データを全面的に信用してはならない」ということかな。「秒は0から59まで」なんてのは思い込みに過ぎないわけだ。「こんなデータがくるはずはない」「ここは上位モジュールでチェックされるはず」なんて言わず「入力データは疑え」っていう基本的な原則を忘れちゃいけないんだな。

「人の振り見て我が振り直せ」と :)