[groonga-dev,03140] selectの出力のJSONが壊れていることがある

Back to archive index

Masumi SHOJI shoji****@doga*****
2015年 3月 30日 (月) 21:27:51 JST


はじめまして。正司と申します。

妙な現象に遭遇しましたのでご報告いたします。

groongaのselectが返すJSONが壊れるという現象がごくまれにですが
発生しています。
具体的には以下の様にBODYの直前に余分な"1"が付きます。

[[0,1426775540.63765,0.00017857551574707],1[[[2],[["_id","UInt32"],["_key","UInt64"],
…

"1"は1個とは限らず、"1111"と4個連なっていることもありました。

再現条件は申し訳ありませんが特定できていません。
現象は、DBの状態や検索条件が全く変わらなければ再現するのですが、
以下の様に出力に影響しなさそうな条件が変わっただけでも発生しなく
なってしまい、またごくまれにしか発生しないので、意図的に発生させる
条件が見つけられていません。

・ヒット件数より大きなlimit値を設定している場合でもlimit値を変えると
発生しなくなる。
(例: ヒット件数2件に対しlimitが12ならば発生し10ならば発生しないなど)

・検索条件にヒットしないレコードが追加されても、全く同じ検索条件で
発生しなくなる。

Groongaは-dオプションでHTTPサーバとして動かしていて、
現象はwebブラウザからのアクセスで確認しました。

DBは、公式のチュートリアルの「4.10. マイクロブログ検索システムの作成」を
参考に、テキスト本体、語彙表、ハッシュタグの3つのテーブルで構成しています。
プロジェクト名をテーブル名に含んでいたりしますので、
テーブル生成の一連のコマンドをそのまま転記するのは避けさせてください。

テキスト本体のテーブルは以下のカラムを持ちます。
UInt64の_key、ハッシュタグのベクターカラム、検索対象のLongText、
Time型のデータ生成日時と更新日時、UInt8のフラグ、UInt64のユーザID

ハッシュタグと語彙表のテーブルは、4.10の例に倣って作成しました。
ただ、語彙表はcomment_indexに相当するものだけで、
デフォルトトークナイザーには当初はTokenMecabを使用していて、
途中でTokenBigramSplitSymbolAlphaDigitに変更して作り直しましたが、
その両方で発生しています。

なお、DBには、同じマシンで稼働する別のシステムが使用するテーブルも
混在しています。(関係無いかもしれませんが)


環境は以下の通りです。

OS: CentOS6.6 64ビット
Groonga:
  以前はバージョン4.0.4をソースからビルド
  現在は5.0.0のパッケージをyumでインストール
  その両方で発生しています。


他の部分でデータが欠けていることはなさそうですので、
今は余分な文字を取り除いてからJSONをデコードするようにしています。


なにかお分かりになりますでしょうか。

-- 
Masumi SHOJI <shoji****@doga*****>




groonga-dev メーリングリストの案内
Back to archive index