[groonga-dev,01694] Re: grn_str_charlen_utf8のwarningメッセージの影響について

Back to archive index

Kouhei Sutou kou****@clear*****
2013年 8月 27日 (火) 12:13:03 JST


須藤です。

In <CANM+HheQcESWM+Oe+EjjhsUuvczK+jLE-bz=Qnv5rQNR=j-M9w****@mail*****>
  "[groonga-dev,01684] grn_str_charlen_utf8のwarningメッセージの影響について" on Sun, 25 Aug 2013 01:18:07 +0900,
  Naoya Murakami <visio****@gmail*****> wrote:

> 度々の投稿失礼します。お忙しい中、ご迷惑をおかけしてすいません。

いえいえ、反応が追いつかなくてすみません。。。

> groongaログに、grn_str_charlen_utf8のwarningメッセージが散見されました。
> 
> grn_str_charlen_utf8(): first byte is invalid
> grn_str_charlen_utf8(): imcomplete character
> 
> https://github.com/groonga/groonga/blob/master/lib/str.c#L67
> 
> imcomplete characterについては、myisamのテーブルからmroongaのテーブルに
> コピーする際にでることがあるようです。
> insert ignore into mroonga select * from myisam;
> first byte is invalidについては、インデックス構築中に稀に発生します。
> 
> grepでひっかかった限りでは、grn_str_charlen_utf8は、ノーマライザで使われている
> ようですが、このwarningメッセージは、どのような影響がありますか?

ノーマライザー以外にも文字列処理をしているところではだいたい
使われていた気がします。ただ、多くの場所では文字列処理をする
前にノーマライザーを経由しているはずなのでノーマライザーでの
影響が大きいはずです。

で、どのような影響かというと、使う場所毎に異なりますが、多く
の場合はそこで文字列処理を終了します。

例えば、以下のように不正なUTF-8文字を含んでいる場合、

  Hel${不正なUTF-8文字}lo World

「lo World」以降は無視される処理になっていることがほとんどな
はずです。

> ノーマライザだけなら、正規化処理ができない文字コードが渡されている
> だけで、原則、検索に影響はないと考えてよろしいでしょうか?
> 正規化されないだけで、トークンが無視されるようなことはないでしょうか?

残念ながら影響があります。
不正なUTF-8文字の場合、正規化の前にそもそも正しく「文字」と
して扱えません。そのため、正規化もできませんし、トークンに分
割することもできません。よって、多くの処理ではwarningをだし
てそれ以降を無視するようになっています。


不正な値が入力された場合にエラーにするという対応もあるのです
が、groongaの入力処理ではwarningをだして無視するという挙動が
多いです。これは、不正な値以外は正常に処理を継続するためです。
問題に気づきにくいというトレードオフがありますが。。。

> なお、現状は、エラーメッセージ、warningメッセージがでた場合、ソース見て
> 処理を理解するしか、内容、影響度合いを知る方法はありませんでしょうか?

はい、現状ではそれが現実です。。。

> また、too many postingsの例のように、warningレベルでも検索に影響があるケース
> があるようなので、warningレベルは、検索に影響があるものも含まれると思って
> おいたほうがよろしいでしょうか?

はい、その通りです。

> ちなみに、mroongaのドキュメントでは、このような説明がなされています。
> 
>   * E: emergency:データベースの破損などの緊急に対処が必要なログメッセージを出力する。
>   * A: alert:内部的なエラーを示すログを出力する。
>   * C: critical:デッドロックの発生など致命的なログメッセージを出力する。
>   * e: error:mroongaが仕様しているAPIのエラーログメッセージを出力する。
>   * w: warning:引数の誤りなどの警告ログメッセージを出力する。
>   * n: notice:設定や状態の変化を示すログメッセージを出力する。
>   * i: information:ファイル操作などの情報をログメッセージとして出力する。
>   * d: debug:デバッグメッセージを出力する。
> 
> http://mroonga.org/ja/docs/reference/server_variables.html
> http://groonga.org/ja/docs/reference/log.html

おぉ、こんな説明があったとは。。。
不正な入力データは引数の誤りっぽい気がするのでwarningになっ
ているのはそれっぽい気がします。


あ、errorの説明の「仕様」はtypoですね。。。

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

groongaサポート:
  http://groonga.org/ja/support/
パッチ採用はじめました:
  http://www.clear-code.com/recruitment/
コミットへのコメントサービスはじめました:
  http://www.clear-code.com/services/commit-comment.html




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