[groonga-dev,03394] Re: groonga-clientとgroongaのログメッセージについて

Back to archive index

Hiroyuki Sato hiroy****@gmail*****
2015年 8月 7日 (金) 10:19:14 JST


須藤様

佐藤です。

ご連絡をありがとうございます。
インラインでコメントしました。

よろしくお願いします。


2015年8月6日 21:51 Kouhei Sutou <kou****@clear*****>:
> 須藤です。
>
> In <CA+Tq-RqAq2aeizzEjbK-PRxN-jT_+vCcC=5Bzkd****@mail*****>
>   "[groonga-dev,03390] groonga-clientとgroongaのログメッセージについて" on Wed, 5 Aug 2015 21:33:53 +0900,
>   Hiroyuki Sato <hiroy****@gmail*****> wrote:
>
>> 1, groonga-clientについて
>>
>>   groonga-clientで次のようにデータが入った時に件数がちゃんと入ったことを確認するのは
>>   次のように返ってきた値のbodyの数をみれば良いのでしょうか?
>>
>>     # recordsは挿入するエントリのハッシュの配列
>>     ret =****@clien*****({:table => @out_table,
>>                         :values => records })
>>
>>     # 挿入(と更新)件数と、予定件数が一緒か確認
>>     ret.body == records.size
>
> はい、そうです。
>
>>   以前エラーがあったら例外が上がると聞いていたので、件数が0件だったというのは
>>   検出したいと思っています。
>
> すみません。。。

ありがとうございます。


>>   groonga-clientのバージョンは0.1.7です。
>>
>>     >   (3) エラーハンドリング
>>     >
>>     >     返ってくるエラー処理の例などどこかにありますでしょうか?
>>
>>     fluent-plugin-groongaが参考になると思います。
>>
>>     基本的にGroonga::Client::Errorでrescueすればいいです。
>
> Groongaのloadはいわゆるバルクロードなので1つでも問題があった
> ら止まる、ではなく、できる限り処理をして、問題があったらログ
> に書く、という方針の動きになっています。なので、load中に変な
> データがあってもload的には「成功」なのです。

了解しました。

> なので、全件loadできたかどうかはloadの結果に入っている件数と
> 自分が送ったデータの件数を確認してください。ただし、件数は同
> じでもカラムの値がおかしいとか、カラム名をtypoしていて無視さ
> れていたというものには気付けないことに注意してください。

個人的には、次のように思います。

・カラム名が間違えていて所定のカラムだけデータが入らなかった。
 => 成功でも良い。

・カラムの一部に不正な値が入っていて該当のレコードだけ、所定のカラムに
 値が入らなかった。例: 数値のカラムに文字列が入っていた。
 => エラーとして取り扱いたい。

つまり中途半端にデータが入るぐらいなら、エラーとして失敗してくれた方が良いです。


>
> 現状、↑のようなケースを検出するにはログを見るしかないで
> す。。。リモートから検出できるようにするにはどんなAPIにする
> のがいいんでしょうねぇ。バルクロードじゃない1件ずつロードす
> るAPIだとエラーを返すのは自然にできるんですけど、性能がでな
> いんですよねぇ。

ちょっと考えてみます。

>
>> 2, groongaのログについて
>>
>>  次のようになメッセージがログに残るのですが、これはエラーではないと
>>  考えてよいのでしょうか?
>>
>>   2015-08-05 21:12:20.668028|n| thread start (0/1)
>>   2015-08-05 21:12:20.668492|e| ignored invalid char('=') at
>>   2015-08-05 21:12:20.668514|e| [{"field"=
>>   2015-08-05 21:12:20.668524|e|            ^
>>   2015-08-05 21:12:20.668532|e| ignored invalid char('>') at
>>   2015-08-05 21:12:20.668539|e| [{"field"=>
>>   2015-08-05 21:12:20.668547|e|             ^
>>   2015-08-05 21:12:20.668555|e| ignored invalid char('=') at
>>   2015-08-05 21:12:20.668563|e| [{"field"=>"文字列", "field2"=
>>   2015-08-05 21:12:20.668570|e|                                           ^
>
> いえ、残念ながらエラーです。。。

ちょっと質問の仕方が悪かったかもしれないのでテストコードを作りました。
https://github.com/hiroyuki-sato/groonga-log_test
エラーとして表示されるんだけど、実際にはデータがインサートされています。
私のGroonga::Clientの使い方が間違えているのでしょうか?

> ログの読み方は↓に書いてあるのですが、
>   http://groonga.org/ja/docs/reference/log.html#process-log
>   (あれ、翻訳していなかったんだっけ。。。)
>
> タイムスタンプの後の
>
>   |X|
>
> の「X」の部分がログレベルを表しています。で、「e」はエラーと
> いう意味なのです。
>
>>  log-levelはinfoを指定、またはlog-level未指定です。
>>  エラーメッセージでなければ、ちょっと冗長かなと思います。
>
> エラーメッセージなので冗長ではないのです。
>
>>  一般的にどのぐらいのログレベルが適切でしょうか?
>
> 一般的にはデフォルトのnoticeが適切です。
>
> 開発時はinfoにして、少し困ったときはdebugにするというのはア
> リです。infoにするとクエリーで何件ヒットしたかとかがでるよう
> になったりします。debugにするともしかしたらヒントになる情報
> があるかもしれない、という感じです。
>
>
> --
> 須藤 功平 <kou****@clear*****>
> 株式会社クリアコード <http://www.clear-code.com/>
>
> Groongaベースの全文検索システムを総合サポート:
>   http://groonga.org/ja/support/
> パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
>   http://www.clear-code.com/recruitment/
> コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
>   http://www.clear-code.com/services/code-reader/
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.osdn.me/mailman/listinfo/groonga-dev



-- 
Hiroyuki Sato



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