ずいぶん昔にGroongaソースコードリーディング会に参加していた

忘れていた。結構なミドルウェアgdbを使ってソースを読んでいくのは楽しかった。

環境

  • CentOS6.5

ソースを読むためのビルド手順

ソースとパッケージのインストール

$ wget http://packages.groonga.org/source/groonga/groonga-5.0.2.tar.gz
$ sudo yum install -y wget tar gcc-c++ make mecab-devel
$ tar xvzf groonga-5.0.2.tar.gz
$ cd groonga-5.0.2
# デバッグ用。Groonga起動バイナリのパス設定
$ ./configure --enable-debug --prefix=/tmp/local

# コンパイルを高速化。結構良いマシンならOK

$ make -j
$ sudo make install 

起動手順

  • 先にDBファイルと設定を用意する
$ cd /tmp
$ vim test.grn
  • 以下のファイルを用意する
table_create --name Site --flags TABLE_HASH_KEY --key_type ShortText
column_create --table Site --name title --type ShortText
table_create --name Terms --flags TABLE_PAT_KEY|KEY_NORMALIZE --key_type ShortText --default_tokenizer TokenBigram
column_create --table Terms --name blog_title --flags COLUMN_INDEX|WITH_POSITION --type Site --source title

load --table Site
[
{"_key":"http://example.org/","title":"This is test record 1!"},
]
  • 以下のように起動
$ rm -rf /tmp/db && mkdir -p /tmp/db && gdb --args /tmp/local/bin/groonga --file /tmp/test.grn -n /tmp/db/db
  • 上記で起動したら、以下のようにコマンドを実行する
(gdb) b grn_load
(gdb) run

f:id:fjwr38:20150730134645g:plain

  • Ctr-x aでエディタを表示する
  • nで関数を進める。sでステップ。

f:id:fjwr38:20150730134809g:plain

  • 以上のような感じで見ていく

gdbの操作

所感

  • 結構Gemのソースとか読むとコメントとか軽いサンプル書いてあって、雰囲気分かったりすることがあるんだけど、Groongaのソースはコメントとか一切無いので難しかった。

  • とはいえ、RubyとCだと抽象度に雲泥の差があるので、多分一個の関数にコメントとか気軽に付けられないだろう。

  • LLerからすると、結構Cってポインタとかでビビったりするが、いうほどメモリ的な知識は求められないと思う(もちろん知ってるに越したことは無い)

    • どちらかというとgdbの操作を知っていた方が特な気がする

参考

Groonga インストール ソースからビルド http://groonga.org/ja/docs/install/centos.html#build-from-source

Groongaソースコード読書会(仮) https://github.com/groonga/meetup/issues/4