blosxom に
おけるエントリのメタ情報を JSON 形式で出力する
gin
プラグイン を
Ellinikonblue.com Weblog の方で
最終的なテストしていたのですが、重大な一つ問題が見つかりました。
実は Ellinikonblue.net Photolog で
実験していたときに一度だけ発現した問題で、
gin
プラグイン はエントリのメタ情報の一つとして、
カテゴリ情報を一つの JSON ファイルとして出力します。
各カテゴリへのエイリアス(別名)は、このファイルに直接記述することで実現しますが、
この JSON ファイルに記述したエイリアスが消失すると言う問題です。
Ellinikonblue.net Photolog で
発現した際もそのときは原因がわからず放置していたのですが、
うちの blosxom で
動作しているサイト群で、最大の PV を誇る
Ellinikonblue.com Weblogで
三ヶ月テストして、たった一回と言う発生頻度も非常に少ない問題でした。
ただやはりエイリアス情報とは言え、消失するということは大問題です。
ソースコードとにらめっこした結果、
この消失問題が発生する条件は、ごく短いタイムスライスの間に
gin
プラグイン が多重起動した場合(通常、更新タイミングでない限り機能(起動)しない)、
entries_kache
プラグイン と同期して、メタ情報を更新する際の JSON ファイル出力最中に、
同ファイルのオープンを要求することしか考えられません。
この条件を満たしてしまうと書き換え中の JSON ファイルの内容を
読み込まずに処理を先に進めるアルゴリズムになっています。
上記の条件を熟考して、最初はロック機構を実装しようと思ったのですが、
gin
プラグイン が機能しているのは、ごく短い時間で、
かつ機能する頻度も通常は1時間に一度なので、
万が一このタイミングでカテゴリ情報ファイルを開き損なった場合、
5 秒間スリープして、再度オープンを試みるか、それでもだめなら
機能を中断すると言う処理を入れ込みました。
これでクリティカルなタイムスライスに多重起動しても、
リトライするか、最悪、エイリアス情報消失につながる書き込みをしません(そのはず…)。
この対処を施した gin
プラグイン でまた少々テストです。
ここ の
公開がまた延びたな…これで orz
Posted on Jul 18, 2007 at 23:09