WiKicker で使用しているキャッシュシステム Memcached 用の Perl API Cache::Memcached が新しくなっていたので、入れ換え。
1月に入れた時と同様、Perl 5.005_03 ではそのまま動かないので一部を修正。 前回はCVSスナップショット(Memcached.pm revision 1.8)に対する修正だったので手元で修正しただけだったが、今回はパッチも作っておく。
修正点は
といったところ(WiKicker で使っているところのみ修正)。
以前は Use of uninitialized value がかなり出ていたのだが、 Cache::Memcached のコード自体が綺麗になったのかこれらも出なくなっていい感じ。
そういえばパッチなんて滅多に作らないな。Cache::Memcached のパッチを作った時の手順をメモしておく。 公開する場合のパッチの作り方はこんな感じでOK?
--- 作成 tar zxvf Cache-Memcached-1.13.tar.gz cp -a Cache-Memcached-1.13 Cache-Memcached-1.13.orig emacs Cache-Memcached-1.13/Memcached.pm diff -ur Cache-Memcached-1.13.orig Cache-Memcached-1.13 > Cache-Memcached-1.13-5.005_03-20040605.diff --- patch する時 tar zxvf Cache-Memcached-1.13.tar.gz patch -p0 < /tmp/Cache-Memcached-1.13-5.005_03-20040605.diff
Memcached まわりをいじったので、キャッシュ具合をテストしていたら変な現象が。 WikiPage が表示されるべきところに、検索結果が表示されている。 あれ?
WiKicker では WikiPage のレンダリング結果も検索結果もキャッシュしているが、それぞれ別のキャッシュキーになるようにしている (WiKickerのバージョンを $V とすると、'$V:h:ページ名' と '$V:s:検索語')ので混ざるはずがないんだけれどな。 キャッシュしているデータの形式も違うし。
最初は Memcached まわりのアップデートで不具合がでたのかと思ったが、戻しても変わらない。ということは、ずっと以前からこの問題が発生していたのか。 やば。 設定でニックネームを設定している(cookie に保存している)と、その Web ブラウザに対してはキャッシュ機能が働かないようになっているので発見が遅れてしまった。
で結局コードをチェックしてみたら「WikiPage 表示と検索結果表示の View クラスを同じにしていたため、検索結果のレンダリングが WikiPage レンダリング結果と同じ領域にキャッシュされる」という風になってしまっていた。 ということで誰かがページ名で検索するとそれがキャッシュされてしまい、ページを読もうとしてもキャッシュ破棄されるまで検索結果が表示されてしまうというひどい状況になっていたと。
修正。
Memcached の出力をチェックしていたら、たまにエラーが起きていることを確認。 Memcached のプロトコルをチェックしたら、キーには制御文字と空白は使えないとある。 Cache::Memcached を見たらキーはそのまま through するだけ。 ということでページ名に空白が含まれている場合などの時には、まずい事になっていたようだ。 こちらは、キーを自前でエンコーディング(ページデータベースファイル名の作成に使っている base64 の亜種)するように修正。
妹の学生時代の家庭教師だった方が最近リフォーム・引越しをし、そのリフォームの話がテレビ東京18:30からの番組「辰巳琢郎の夢リフォーム」で紹介されるというので視聴。
30分まるまるそのお宅の話だった。先生の顔こんなだったかなぁ。
リフォームは、さすが旦那自身の設計とあって夫婦の希望通りという感じ。 「大改造!!劇的ビフォーアフター」のように、デザイナーのひとりよがり(と私は感じる)一工夫が入っていなく無駄がなくていいな。 最初からリフォームを念頭に中古マンションを購入とのこと。
遠いかすかなツテではあるが、なにかの機会があったら頼みたいかも。 しかし「リフォーム代約800万円 (設計費除く)」ってそんな金ないない。
Perl API (Cache::Memcached)のアップデートのついでに、Memcached 自体もアップデート。
cd /tmp wget http://www.monkey.org/~provos/libevent-0.8.tar.gz tar zxvf libevent-0.8.tar.gz cd libevent-0.8 ./configure make cd .. wget http://www.danga.com/memcached/dist/memcached-1.1.11.tar.gz tar zxvf memcached-1.1.11.tar.gz cd memcached-1.1.11 CFLAGS='-L../libevent-0.8 -I../libevent-0.8' ./configure --prefix=$HOME/local/memcached-1.1.11 make make install
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。