先日のapr_memcacheの問題だが、修正を入れてしばらく動かしたが目立った問題は出ていない。サービスに本番投入してもいけているので、パッチを公開することにする。

 apr_memcache 0.7.0リリースにはそもそも不具合があるので、Subversionレポジトリから最新のtrunk(執筆時はRevision 28)を取ってくる。足りないm4マクロファイルがいくつかあるので、0.7.0から引っ張ってくる。そこにこのパッチを当ててビルドすればOK。

 このバグ報告とほぼ同じで、パッチの趣旨も同じなのだが、なぜかそこに添付のパッチでは直らなかった。

 とりあえず、大きなデータでchokeしなくなって一安心。実のところサーバ側にもバグがある気がしているが、最近のmemcachedは動きが激しいので、落ち着いてから再検証しようと思っている。

 それにしても、Apacheモジュールプログラミングは楽なようでいろいろハマるね。特に、世に出ているApacheモジュールやapr_なんちゃらにもエラーチェックをまじめにしていないものが非常に多い。これはドキュメントが割と不親切なことに起因している気がする。各関数がどんなエラーを返すかの情報が足りないので、結局ソースを見るしかない。それを怠ると、OKかどうかしか見ずに元々のエラーコードをちゃんと上層に正しく伝達しなかったりして、末端ではAPR_EGENERALっていうけど結局何なんですかみたいな状況になる。また、エラーコード体系が違う同士を組み合わせたりするとハマりやすい。

 今回は負荷を掛けないとなかなかエラーが再現しなかったので、GDBの利用を諦めてap_log_error()デバッグに勤しみましたとさ。


Categories : Tech