先日の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()
デバッグに勤しみましたとさ。