昨日開発版コードを見てたら、検索結果がおかしいのでよく見てみたらLudia 1.3.0でにした際それまでの1.1.0で動いていた SELECT * FROM table WHERE fts @@ '*D+ hogehoge'という検索が"sen_query_scan failed(1)" というエラーで落ちるようになっていた。これがまた静か〜〜〜に落ちて、ただ結果を返さないという仕様なためしばらく気がつかなかった。ludia-1.3.0からsenna-1.0.8を使うようになっていて、ここでsen_query_scanが初めて使用されている。1.0.8は一回差し替えされたといういわくつきのリリースなので、念のためもう一度入れ直しても症状は同じ。

なのでsenna-1.0.5+ludia-1.1.0にダウングレードしたら問題も解決した。

senna+ludia/tritonnは実際使っててスピードや利便性に関してはなんの文句もないけれども、エラーが起こった時に何をしたらいいのか全くわからないのが運用上ひじょうに不安。senna.logに吐き出す事はできるだろうけど、senna.logは内部構造的な情報がほとんどで中身に精通してない(別にしたくない)人には不親切。例えば今回のエラーに関してはsen_query_scanは多分クエリーをパースするものだろうから、そこでエラーがあるんだろうけどSTDERRかどこかに"failed to parse query hogehoge: XXX details of the error XXX"くらい書いてくれてもいいんじゃないかと思う。まぁこれはsenna本体だけではなくludiaの問題でもあるんだろうけど。

ちなみに1.3.0でなぜ*一部*のクエリーだけにこの問題があるのかは不明。←全部がつぶれるんじゃなくて、一部だけが答えを返してくれないので発見が遅れた。

アップグレードする度にどきどきするわ。