nDiki : 2004年06月05日

2004年6月5日 (土)

過去の今ごろ

過去の6月5日より。

スポンサード リンク

[ WiKicker ] キャッシュまわりにバグ

Memcached まわりをいじったので、キャッシュ具合をテストしていたら変な現象が。 WikiPage が表示されるべきところに、検索結果が表示されている。 あれ?

ページの内容が表示されるところに検索結果が

WiKicker では WikiPage のレンダリング結果も検索結果もキャッシュしているが、それぞれ別のキャッシュキーになるようにしている (WiKickerのバージョンを $V とすると、'$V:h:ページ名' と '$V:s:検索語')ので混ざるはずがないんだけれどな。 キャッシュしているデータの形式も違うし。

最初は Memcached まわりのアップデートで不具合がでたのかと思ったが、戻しても変わらない。ということは、ずっと以前からこの問題が発生していたのか。 やば。 設定でニックネームを設定している(cookie に保存している)と、その Web ブラウザに対してはキャッシュ機能が働かないようになっているので発見が遅れてしまった。

で結局コードをチェックしてみたら「WikiPage 表示と検索結果表示の View クラスを同じにしていたため、検索結果のレンダリングが WikiPage レンダリング結果と同じ領域にキャッシュされる」という風になってしまっていた。 ということで誰かがページ名で検索するとそれがキャッシュされてしまい、ページを読もうとしてもキャッシュ破棄されるまで検索結果が表示されてしまうというひどい状況になっていたと。

修正。

キャッシュキーのバグ

Memcached の出力をチェックしていたら、たまにエラーが起きていることを確認。 Memcachedプロトコルをチェックしたら、キーには制御文字と空白は使えないとある。 Cache::Memcached を見たらキーはそのまま through するだけ。 ということでページ名に空白が含まれている場合などの時には、まずい事になっていたようだ。 こちらは、キーを自前でエンコーディング(ページデータベースファイル名の作成に使っている base64 の亜種)するように修正。

パッチ作り

[ diff / patch ]

そういえばパッチなんて滅多に作らないな。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

家庭教師の旦那は一級建築士

の学生時代の家庭教師だった方が最近リフォーム・引越しをし、そのリフォームの話がテレビ東京18:30からの番組「辰巳琢郎の夢リフォーム」で紹介されるというので視聴。

30分まるまるそのお宅の話だった。先生の顔こんなだったかなぁ。

リフォームは、さすが旦那自身の設計とあって夫婦の希望通りという感じ。 「大改造!!劇的ビフォーアフター」のように、デザイナーのひとりよがり(と私は感じる)一工夫が入っていなく無駄がなくていいな。 最初からリフォームを念頭に中古マンションを購入とのこと。

遠いかすかなツテではあるが、なにかの機会があったら頼みたいかも。 しかし「リフォーム代約800万円 (設計費除く)」ってそんな金ないない。

Cache::Memcached 1.13 の Perl 5.005_03 対応

WiKicker で使用しているキャッシュシステム Memcached 用の Perl API Cache::Memcached が新しくなっていたので、入れ換え。

1月に入れた時と同様、Perl 5.005_03 ではそのまま動かないので一部を修正。 前回はCVSスナップショット(Memcached.pm revision 1.8)に対する修正だったので手元で修正しただけだったが、今回はパッチも作っておく。

修正点は

  • our を使わないようにする。
  • fields::new を代替コードに。
  • IO::Handl::blocking を代替コードに。
  • use bytes を使わないようにする。

といったところ(WiKicker で使っているところのみ修正)。

以前は Use of uninitialized value がかなり出ていたのだが、 Cache::Memcached のコード自体が綺麗になったのかこれらも出なくなっていい感じ。

Memcached 1.1.11

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
[ 6月5日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.045659s / load averages: 0.30, 0.36, 0.42
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker