kiyoka.2011_08_25 RSSPLAIN

Related pages: !kiyoka.blog.list Sekka.FAQ !kiyoka.blog.2011_08
55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554455545544444545444445
5

[Sekka] バグ原因調査: sekka-serverの起動時に辞書の読み込みに失敗する問題

5

 

5

@mori_devEXTさんからSekkaのバグ報告があったので調査。

5
 sekka の不具合(?)報告 — GistEXT
5
 => sekka-serverの起動時に辞書の読み込みに失敗する。
5

 

5

たぶんこれだろうと当たりがついているので、再現させてみる。

5

現象から、Tokyo Cabinetのバージョン不整合の問題だと考えられる。

5

新しいバージョンのTokyo Cabinetで作ったデータベースを古いTokyo Cabinetで開けようとしている可能性がある。

5

 

5

環境

5

この記事で使った環境は次の通り。

5

Rubyはrvmは使わず、ソースからインストールしている。(厳密にはstowというパッケージマネージャを使っている)

5
$ cat /etc/debian_version 
5
6.0.2
5
$ uname -a
5
Linux genkan.sumibi.org 2.6.34.1 #2 PREEMPT Thu Jul 22 16:04:48 JST 2010 i686 GNU/Linux
5
$ ruby --version
5
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
5
$ which ruby
5
/usr/local/bin/ruby
5
$ gem --version
5
1.8.8
5

 

5

 

5

Sekka 0.8.8 / 0.9.0の辞書データ

5

 

5

辞書データはTokyo CabinetのHashDBのデータベースファイルそのもので提供している。

5

作成に使ったTokyo Cabinetのバージョンは 1.4.47 だ。

5

Tokyo Cabinetはソースコードからインストールした最新版だ。

5

 

5

バージョン表示

5
$ tchmgr version
5
Tokyo Cabinet version 1.4.47 (910:1.0) for Linux
5
Copyright (C) 2006-2011 FAL Labs
5

 

5

辞書の内容を表示する。

5
$ tchmgr inform ~/.sekka-server/SEKKA-JISYO.SMALL.tch
5
path: SEKKA-JISYO.SMALL.tch
5
database type: hash
5
additional flags:
5
bucket number: 131071
5
alignment: 16
5
free block pool: 1024
5
inode number: 6554277
5
modified time: 2011-08-25T06:30:09+09:00
5
options:
5
record number: 3686019
5
file size: 296903328
5

 

5

古いTokyo Cabinetでオープンしてみる

5

これをDebian squeezeに入っているバージョンでオープンしてみる。

5

 

5
$ dpkg --list | grep -i tokyo
5
rc  libtokyocabinet 1.2.1-1         Tokyo Cabinet Database Libraries [runtime]
5
rc  libtokyocabinet 1.4.37-6        Tokyo Cabinet Database Libraries [runtime]
5
$
5

 

5

aptitudeでインストールする

5
$ su -
5
# aptitude install tokyocabinet-bin libtokyocabinet8 libtokyocabinet-dev 
5
# exit
5

 

5
$ dpkg --list | grep -i tokyo
5
ii  libtokyocabinet-dev                    1.4.37-6                               Tokyo Cabinet Database Libraries [development]
5
rc  libtokyocabinet3                       1.2.1-1                                Tokyo Cabinet Database Libraries [runtime]
5
ii  libtokyocabinet8                       1.4.37-6                               Tokyo Cabinet Database Libraries [runtime]
5
ii  tokyocabinet-bin                       1.4.37-6                               Tokyo Cabinet Database Utilities
5
$
5

 

5
$ tchmgr version
5
Tokyo Cabinet version 1.4.37 (827:1.0) for Linux
5
Copyright (C) 2006-2009 Mikio Hirabayashi
5

 

5
$ tchmgr inform ~/.sekka-server/SEKKA-JISYO.SMALL.tch
5
/usr/bin/tchmgr: -: 5: invalid meta data
5

 

5

やはりSekkaの辞書は読みこめない。エラーが出る。

5

 

5

sekka-serverではどのようなエラーになるか。

5

 

5

tokyocabinetのGemを再度ビルドしなおす。

5

そのためには、再インストールすればよい。

5
$ gem uninstall tokyocabinet
5
$ gem install tokyocabinet
5
Fetching: tokyocabinet-1.29.gem (100%)
5
Building native extensions.  This could take a while...
5
Successfully installed tokyocabinet-1.29
5
1 gem installed
5
Installing ri documentation for tokyocabinet-1.29...
5
Installing RDoc documentation for tokyocabinet-1.29...
5

 

5

結果、@mori_devさんの環境と同じエラーが出た。

5

 

5

$ sekka-server

5
/usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:176: TokyoCabinet::HDB.open error: file=/home/kiyoka/.sekka-server/SEKKA-JISYO.SMALL.tch (RuntimeError)
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/kvs.rb:56:in `open'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:216:in `block (2 levels) in initialize'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:461:in `call'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekka/jisyo-db.nnd:461:in `block in initialize'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/nendo-0.5.2/lib/nendo.rb:1598:in `call'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/nendo-0.5.2/lib/nendo.rb:1598:in `callProcedure'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/nendo-0.5.2/lib/nendo.rb:1336:in `openSekkaJisyo'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/nendo-0.5.2/lib/nendo.rb:1336:in `openSekkaJisyo'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/lib/sekkaserver.rb:57:in `initialize'
5
        from ./lib/sekka.ru:37:in `new'
5
        from ./lib/sekka.ru:37:in `block in <main>'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/builder.rb:51:in `instance_eval'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/builder.rb:51:in `initialize'
5
        from ./lib/sekka.ru:1:in `new'
5
        from ./lib/sekka.ru:1:in `<main>'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/builder.rb:40:in `eval'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/builder.rb:40:in `parse_file'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/server.rb:200:in `app'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/server.rb:301:in `wrapped_app'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/server.rb:252:in `start'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.2/lib/rack/server.rb:137:in `start'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/bin/sekka-server:90:in `main'
5
        from /usr/local/stow/ruby-1.9.2-p290/lib/ruby/gems/1.9.1/gems/sekka-0.8.8/bin/sekka-server:100:in `<top (required)>'
5
        from /usr/local/bin/sekka-server:19:in `load'
5
        from /usr/local/bin/sekka-server:19:in `<main>'
5

 

5

原因

5

古いlibtokyocabinetでは、新しいlibtokyocabinetで作ったデータベースフェアを読み込めない。

4

=> @mori_devさんところでは発生しないので、@mori_devさんの環境はどうも別の原因っぽいが…

4
 dbca051b95918ceeae9ad7b79d74eff2
5

 

5

 

5

対策

4

配布する辞書は Debian と Ubuntuに入っているバージョンのTokyo Cabinetで作る。

5

それによって、Sekkaをより広い環境で使える様にする。

5

 

4

Debian squeeze ... tokyo cabinet 1.4.37

4
  http://packages.debian.org/squeeze/tokyocabinet-bin
4

Ubuntu 10.10   ... tokyo cabinet 1.4.37

4
  http://packages.ubuntu.com/maverick/tokyocabinet-bin
4

このあたりで作ればいいかな。

5

 

4

Debian lennyはtokyo cabinet 1.2.1と古すぎるので対応しない。

5

 

4

Sekka 0.9.1の辞書からtokyo cabinet 1.4.37で作って提供するようにしよう。

4

@mori_devさんところの原因は個別に追っていく。こちらで議論して解決できればいいなぁ。

4
  sekka-serverの起動時に辞書の読み込みに失敗する問題 -   sekka_users EXT
4

 

4

 

5

...comment disabled...