[groonga-dev,02097] [Groonga]クエリが空文字であるときとカラムが空であるときのスニペットの挙動について

Naoya Murakami visio****@gmail*****
2014年 2月 3日 (月) 23:10:47 JST


お世話になっております。村上です。

すいません、スニペットにまつわる課題はまだありました。お手数ですが、以下の2点について
ご検討していただけませんでしょうか?
とりあえず、当方のパッチでクラッシュすることを回避できているので、お手すきのときでいいです!

(1)Gronga3.1.2のsnippet_htmlでは、クエリが空文字であるとき、conditionを取得することができず、
関数は、NULLを返します。
https://github.com/groonga/groonga/blob/master/lib/proc.c#L3715

関数でNULLが返されると、expr.cのgrn_expr_execのcase GRN_OP_CALLでクラッシュします。
https://github.com/groonga/groonga/blob/master/lib/expr.c#L2651

・再現例
https://github.com/naoa/groonga_saigen/blob/master/001_snippet_empty/empty_query.actual

アプリケーション側でクエリが空のときは、snippet関数をつけないようにすることもできますが、
ユーザ側が対応すべきかGroonga側で対応すべきがご検討ください。

クエリが空のほかに、grn_snip_execが失敗した場合等でも、やはりクラッシュする気がします。

あまりいい方法ではないですが、とりあえず、以下のように、snippetがNULLを返さないように
することで暫定的にクラッシュすることを防いでます。

https://github.com/naoa/groonga_saigen/blob/master/001_snippet_empty/proc.c_batch

(2)grn_snip_execでは、カラムが空文字であるとき、grn_string_openに失敗し、ALERTメッセージが
発生します。

https://github.com/groonga/groonga/blob/master/lib/snip.c#L601

・再現例
https://github.com/naoa/groonga_saigen/blob/master/001_snippet_empty/empty_column.actual

selectは失敗しないのですが、検索のたびにALERTが発生するため、パッチでメッセージの発生を
抑制しています。カラムが空文字のときのALERTメッセージまたは挙動についてご検討願いませんか?
また、上記(1)のようにgrn_snip_execが失敗すると、NULLが返され、クラッシュする例もあるようです。

メッセージがでるのも妥当といえば、妥当という気もしますので、対応が難しければ、現状のままでも
大丈夫です!その場合、毎回パッチしなければいけませんが。。

なお、当方の環境では、タイトル、要約はあるが、全文はないといったケースもあり、また、
カラムのサイズ制限256GiBを回避するために、全文カラムを3分割にしており、必然的にカラム
が空というケースが発生せざるを得ません。

<環境>
・groonga 3.1.2 (2/3時点最新master)
groonga --version
groonga 3.1.2-9-gf1fb387
[linux-gnu,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,zlib,lzo,epoll]

configure options: < '--libdir=/usr/lib64' '--prefix=/usr'>

以上、よろしくお願いします。



groonga-dev メーリングリストの案内