Oliverの日記: からっぽ 1
コメントの本文が表示されない事件があった。朝、家を出た時には問題なかったのが、20分後にメールをチェックするとsf.jpにバグレポート。急いで/.-Jをロードしてみると、たしかに一部のコメントが歯抜けに。リロードすると、別のコメントが抜けている。そして、表示されないコメントは時間と共に増えていった。
最初に思ったこと:「俺じゃないーーーーよな? まだなにもしてない!」 ここ数日、テストサーバでテンプレートをイヂっていたので、まさかその一部がなんらかの理由で反映されたか、と青くなったが、考えてみればコメントとは全然関係ない部分だ。
症状だけみるとDBの一部がおかしくなって、Slashdotの本体であるApache+mod_perlの各プロセスがもつメモリキャッシュに残ってるコメントだけが表示。キャッシュ落ちになったものから、順次、空コメントに。複数台のウェブサーバにそれぞれ複数の、生まれてからの経過時間が違う多数のApche child processがあるので、キャッシュ回りは判定が難しい。
日本はもう夜で運営担当が会社への国際電話でも捕まらず、プライベートの番号が手元になかったので、自力で調査することに。結果、comments_txtテーブルがなんらかの原因で破損していて、MySQLが
RROR 1016: Can't open file: 'comment_text.MYD'. (errno: 145)
とエラーを吐いていた。例外を投げないPerlで書かれたSlashcode。読みだしqueryがエラーを出しているにもかかわらず、元気に""を返事だと思っていたようだ。書き込みに関しても、エラーをチェックしていなかったので、無事に書き込めたと思っていたようだ。トランザクション処理のないMySQL/MyISAMを前提に書かれたコードなだけに、滅多にないエラーのチェックが弱い。半面、トランザクションを使っていたならば、コメントのタイトルすら残らなかったんだろうな。
39個ものコメントを闇に葬ることになってしまい、申し訳ない。そもそもなにが原因で破損が発生したかは要調査なのだが、この手の問題の常として明確にピンポイントできない可能性が高そうだ。
追記:本文が失われたコメントにはかわりに「DBのトラブルにより本文消失」みたいな文章を普通のユーザが使えないタグでマークアップして、報告記事へのリンクと共につけるべきだろうか。
からっぽ More ログイン