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