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

HAYASHI Kentaro hayas****@clear*****
2014年 2月 4日 (火) 14:01:23 JST


林です。

On Mon, 3 Feb 2014 23:10:47 +0900
Naoya Murakami <visio****@gmail*****> wrote:

> お世話になっております。村上です。
> 
> すいません、スニペットにまつわる課題はまだありました。お手数ですが、以下の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
> 

再現例もつけていただいてありがとうございます。
クエリが空でクラッシュするというのは嬉しくないので修正しました。(すとうさんが)
以下のコミットで直っています。(直したところはあってます。さすがです!)

  https://github.com/groonga/groonga/commit/1094e392321e20022542b12bdb1e1a61f2a6a586

次回の肉の日にリリースします。

> (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'>
> 

こちらについても、検索のたびにALERTログを量産する状況というのは嬉しくないので、
修正しました。
以下のコミットで直っています。

  https://github.com/groonga/groonga/commit/ae8207299e2c9c378008361ae073456b2f47b07a

こちらも同じく、次のリリース(2/9ですね)に入ります。

以上、宜しくお願いいたします。
-- 
HAYASHI Kentaro <hayas****@clear*****>




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