Ellinikonblue.net Devlosxom

ここはまだ壮大な夢の途中…

Posted on Jul 18, 2007 at 23:09

gin プラグイン:エイリアス消失対策

 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 15, 2007 at 00:46

asin_complex プラグインアップデート

 一ヶ月くらい前の話になるのですが、 asin_complex plug-inAmazon.co.jp の 商品画像へのリンクを作成する際、失敗することが目立って多くなっていることが 気になり始めました。

 これまでも商品画像が落ちることはあって、それなりに対策は打っていたのですが、 どうもこれまでとは違う「新商品でかつ商品画像が登録されていない 製品のものに限って落ちる」という規則性があることに気づきました。
 よくよく調べてみると、これまでは商品画像がまだ登録されていない新商品には、 ダミーの商品画像への URL が XSLT の問い合わせで返ってきたのですが、 新製品に関しては全く画像への URL を返さないようになっていました。 いつから仕様が変わったのかわかりませんが、 直近で登録されている商品については、 商品画像が登録されるまでは商品画像への URL は何も返さないようです。
 これに対しての対策と、商品画像があってもうまく判別できないことがあったので、 以下の対策を施しました。
  1. 問い合わせの結果で商品画像の URL を返さないときの処理を追加
  2. 商品画像の確認は 5 秒おきに 5 回までリトライを行って、成功した時点で 商品画像への URL を確定する
 半月くらい試した結果、安定性も向上したように思いますので、 Ellinikonblue.com PukiWiki でも 公開することにしました。 もしご使用の方がいらっしゃいましたら、アップデートをご検討ください。