Tokyo TyrantでテーブルDBを指定するとtcrtestがエラーになる。

Tokyo Cabinet / Tokyo Tyrant を使ってみているのだが、テーブルDBにTTのRuby binding経由で読み書きを繰り返していると、

  • エラーコードがずっとEMISC(9999)のままになる。
  • 結果がたまに空で返ってくる。
    • 再接続すると正しい結果が返る。
    • この時のエラーコードは大抵EMISCだがESUCCESSの場合も。

という問題が発生して困っている。原因を絞り込むためtcrtestを試したら、同じようにmiscエラーが出た。

  • ttservctlをテーブルDBに修正してttserverを起動。
  • tcrtest misc 127.0.0.1 1000
    • Linux(32bit) の場合、rnum=1000で2回に1回くらいmiscエラーが出る。
    • Mac OSX(64bit) の場合、rnum>4095でmiscエラーが出る。

自力で原因を調べると3年くらいかかりそうなので、mixiのサポートコミュニティで聞いてみることにする。

(追記) 回答いただけました。

テーブルDBと固定長DBは純粋なkey/valueストレージではないため、それを前提としたtcrtestの各種テストは正常に動作しません。ドキュメントに特にその旨を書いていなかったので、申し訳ありません。
TTにおけるテーブルDBのテストケースはtcrtest tableのみとなります。

うむー。やっぱりテストの内容をもうちょっと理解してから聞いたらよかったです。すいません。

そして手がかりが無くなってしまった……。EMISC……何かのエラー……。
(追記おわり)



以下詳細。

起動スクリプト

ttservctlをコピーし、以下の修正を行った。

  • tchをtctに変更。
  • ログファイルを指定。
# diff /usr/local/sbin/ttservctl ./ttservctl
14c14
< #logfile="$basedir/log"
---
> logfile="$basedir/log"
21c21
< dbname="$basedir/casket.tch#bnum=1000000"
---
> dbname="$basedir/casket.tct#bnum=1000000"

Fedora 8 (32bit)の場合。 (EC2 ami-5647a33f)

EC2のFedora 8で試した。他にEC2のdebian、EC2じゃないCentOSも試したが似たような結果だった。エラーが出る頻度はFedoraよりも多い感じがしたけど気のせいかも(あいまい)。

環境

# ttserver --version
Tokyo Tyrant version 1.1.28 (311:0.91) for Linux
Copyright (C) 2006-2009 Mikio Hirabayashi

# tctmgr --version
Tokyo Cabinet version 1.4.23 (814:1.0) for Linux
Copyright (C) 2006-2009 Mikio Hirabayashi

# gcc --version
gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33)

# tcucodec conf
myconf(version): 1.4.23
myconf(sysname): Linux
myconf(libver): 814
myconf(formatver): 1.0
myconf(prefix): /usr/local
myconf(includedir): /usr/local/include
myconf(libdir): /usr/local/lib
myconf(bindir): /usr/local/bin
myconf(libexecdir): /usr/local/libexec
myconf(appinc): -I/usr/local/include
myconf(applibs): -L/usr/local/lib -ltokyocabinet -lbz2 -lz -lrt -lpthread -lm -lc 
myconf(bigend): 0
myconf(usezlib): 1
myconf(usebzip): 1
sizeof(bool): 1
sizeof(char): 1
sizeof(short): 2
sizeof(int): 4
sizeof(long): 4
sizeof(long long): 8
sizeof(float): 4
sizeof(double): 8
sizeof(long double): 12
sizeof(void *): 4
sizeof(intptr_t): 4
sizeof(size_t): 4
sizeof(time_t): 4
sizeof(off_t): 4
sizeof(ino_t): 4
sizeof(wchar_t): 4
sizeof(sig_atomic_t): 4
macro(CHAR_MAX): 127
macro(SHRT_MAX): 32767
macro(INT_MAX): 2147483647
macro(LONG_MAX): 2147483647
macro(LLONG_MAX): 9223372036854775807
macro(FLT_MAX): 3.40282e+38
macro(DBL_MAX): 1.79769e+308
macro(LDBL_MAX): 1.18973e+4932
macro(PATH_MAX): 4096
macro(RAND_MAX): 2147483647
sysconf(_SC_CLK_TCK): 100
sysconf(_SC_OPEN_MAX): 1024
sysconf(_SC_PAGESIZE): 4096
stat(st_uid): 0
stat(st_gid): 0
stat(st_blksize): 4096

TTを起動。

# ./ttservctl start
Starting the server of Tokyo Tyrant
Executing: ttserver -port 1978 -dmn -pid /var/ttserver/pid -log /var/ttserver/log
Done
# tcrtest misc 127.0.0.1 1000
<Miscellaneous Test>
  host=127.0.0.1  port=1978  cnum=1  tout=0  rnum=1000

writing:
......................... (00000100)
......................... (00000200)
......................... (00000300)
......................... (00000400)
......................... (00000500)
......................... (00000600)
......................... (00000700)
......................... (00000800)
......................... (00000900)
......................... (00001000)
reading:
tcrtest: (validation): error: 0: success
random writing:
tcrtest: (validation): error: 0: success
word writing:
.................... (00000041)
random erasing:
......................... (00000100)
......................... (00000200)
......................... (00000300)
......................... (00000400)
......................... (00000500)
......................... (00000600)
......................... (00000700)
......................... (00000800)
......................... (00000900)
......................... (00001000)
writing:
.......tcrtest: tcrdbput: error: 9999: miscellaneous error
erasing:
........tcrtest: tcrdbout: error: 7: no record found
random multi reading:
......................... (00000100)
......................... (00000200)
......................... (00000300)
......................... (00000400)
......................... (00000500)
......................... (00000600)
......................... (00000700)
......................... (00000800)
......................... (00000900)
......................... (00001000)
script extension calling:
......................... (00000100)
......................... (00000200)
......................... (00000300)
......................... (00000400)
......................... (00000500)
......................... (00000600)
......................... (00000700)
......................... (00000800)
......................... (00000900)
......................... (00001000)
checking versatile functions:
......................... (00000100)
......................... (00000200)
......................... (00000300)
......................... (00000400)
......................... (00000500)
......................... (00000600)
......................... (00000700)
......................... (00000800)
......................... (00000900)
......................... (00001000)
record number: 0
size: 14656
time: 0.428
error
  • tcrtest: (validation): error: 0: success は毎回発生。
  • tcrtest: tcrdbput: error: 9999: miscellaneous error は rnum=1000 で2回に1回くらい発生。

ログは以下のとおり。2回実行して終了させた。

2009-06-03T05:35:03-05:00       SYSTEM  --------- logging started [11085] --------
2009-06-03T05:35:03-05:00       SYSTEM  process ID configuration: path=/var/ttserver/pid pid=11085
2009-06-03T05:35:03-05:00       SYSTEM  server configuration: host=(any) port=1978
2009-06-03T05:35:03-05:00       SYSTEM  opening the database: /var/ttserver/casket.tct#bnum=1000000
2009-06-03T05:35:03-05:00       SYSTEM  service started: 11085
2009-06-03T05:35:03-05:00       INFO    timer thread 1 started
2009-06-03T05:35:03-05:00       INFO    worker thread 1 started
2009-06-03T05:35:03-05:00       INFO    worker thread 2 started
2009-06-03T05:35:03-05:00       INFO    worker thread 3 started
2009-06-03T05:35:03-05:00       INFO    worker thread 4 started
2009-06-03T05:35:03-05:00       INFO    worker thread 5 started
2009-06-03T05:35:03-05:00       INFO    worker thread 6 started
2009-06-03T05:35:03-05:00       INFO    worker thread 7 started
2009-06-03T05:35:03-05:00       INFO    worker thread 8 started
2009-06-03T05:35:03-05:00       SYSTEM  listening started
2009-06-03T05:39:07-05:00       INFO    connected: 127.0.0.1:36178
2009-06-03T05:39:07-05:00       INFO    doing vanish command
2009-06-03T05:39:08-05:00       INFO    doing sync command
2009-06-03T05:39:08-05:00       INFO    doing optimize command
2009-06-03T05:39:08-05:00       INFO    doing vanish command
2009-06-03T05:39:08-05:00       INFO    connection finished
2009-06-03T05:39:18-05:00       INFO    connected: 127.0.0.1:36179
2009-06-03T05:39:18-05:00       INFO    doing vanish command
2009-06-03T05:39:19-05:00       ERROR   do_put: operation failed
2009-06-03T05:39:19-05:00       INFO    doing sync command
2009-06-03T05:39:19-05:00       INFO    doing optimize command
2009-06-03T05:39:19-05:00       INFO    doing vanish command
2009-06-03T05:39:19-05:00       INFO    connection finished
2009-06-03T05:41:30-05:00       INFO    signal interruption
2009-06-03T05:41:30-05:00       SYSTEM  listening finished
2009-06-03T05:41:31-05:00       SYSTEM  closing the database
2009-06-03T05:41:31-05:00       INFO    worker thread 1 finished
2009-06-03T05:41:31-05:00       INFO    worker thread 2 finished
2009-06-03T05:41:31-05:00       INFO    worker thread 3 finished
2009-06-03T05:41:31-05:00       INFO    worker thread 4 finished
2009-06-03T05:41:31-05:00       INFO    worker thread 5 finished
2009-06-03T05:41:31-05:00       INFO    worker thread 6 finished
2009-06-03T05:41:31-05:00       INFO    worker thread 7 finished
2009-06-03T05:41:31-05:00       INFO    worker thread 8 finished
2009-06-03T05:41:31-05:00       INFO    timer thread 1 finished
2009-06-03T05:41:31-05:00       SYSTEM  service finished
2009-06-03T05:41:31-05:00       SYSTEM  --------- logging finished [11085] --------

Macの場合。

環境

# ttserver --version
Tokyo Tyrant version 1.1.27 (310:0.91) for Mac OS X
Copyright (C) 2006-2009 Mikio Hirabayashi

# tctmgr --version
Tokyo Cabinet version 1.4.23 (814:1.0) for Mac OS X
Copyright (C) 2006-2009 Mikio Hirabayashi

# gcc --version
i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5488)

# tcucodec conf
myconf(version): 1.4.23
myconf(sysname): Mac OS X
myconf(libver): 814
myconf(formatver): 1.0
myconf(prefix): /usr/local
myconf(includedir): /usr/local/include
myconf(libdir): /usr/local/lib
myconf(bindir): /usr/local/bin
myconf(libexecdir): /usr/local/libexec
myconf(appinc): -I/usr/local/include
myconf(applibs): -L/usr/local/lib -ltokyocabinet -lbz2 -lz -lpthread -lm -lc 
myconf(bigend): 0
myconf(usezlib): 1
myconf(usebzip): 1
sizeof(bool): 1
sizeof(char): 1
sizeof(short): 2
sizeof(int): 4
sizeof(long): 4
sizeof(long long): 8
sizeof(float): 4
sizeof(double): 8
sizeof(long double): 16
sizeof(void *): 4
sizeof(intptr_t): 4
sizeof(size_t): 4
sizeof(time_t): 4
sizeof(off_t): 8
sizeof(ino_t): 4
sizeof(wchar_t): 4
sizeof(sig_atomic_t): 4
macro(CHAR_MAX): 127
macro(SHRT_MAX): 32767
macro(INT_MAX): 2147483647
macro(LONG_MAX): 2147483647
macro(LLONG_MAX): 9223372036854775807
macro(FLT_MAX): 3.40282e+38
macro(DBL_MAX): 1.79769e+308
macro(LDBL_MAX): 1.18973e+4932
macro(PATH_MAX): 1024
macro(RAND_MAX): 2147483647
sysconf(_SC_CLK_TCK): 100
sysconf(_SC_OPEN_MAX): 256
sysconf(_SC_PAGESIZE): 4096
stat(st_uid): 0
stat(st_gid): 0
stat(st_blksize): 4096

ttserverを起動。

# ./ttservctl start
Starting the server of Tokyo Tyrant
./ttservctl: line 49: ulimit: open files: cannot modify limit: Invalid argument
Executing: ttserver -port 1978 -dmn -pid /var/ttserver/pid -log /var/ttserver/log
Done

tcrtest miscを実行するとエラーになる。

# tcrtest misc 127.0.0.1 5000
<Miscellaneous Test>
  host=127.0.0.1  port=1978  cnum=1  tout=0  rnum=5000

writing:
......................... (00000500)
......................... (00001000)
......................... (00001500)
......................... (00002000)
......................... (00002500)
......................... (00003000)
......................... (00003500)
......................... (00004000)
......................... (00004500)
......................... (00005000)
reading:
tcrtest: (validation): error: 0: success
random writing:
tcrtest: (validation): error: 0: success
word writing:
.................... (00000041)
random erasing:
......................... (00000500)
......................... (00001000)
......................... (00001500)
......................... (00002000)
......................... (00002500)
......................... (00003000)
......................... (00003500)
......................... (00004000)
......................... (00004500)
......................... (00005000)
writing:
......................... (00000500)
......................... (00001000)
......................... (00001500)
......................... (00002000)
......................... (00002500)
......tcrtest: tcrdbput: error: 9999: miscellaneous error
erasing:
......................... (00000500)
......................... (00001000)
......................... (00001500)
......................... (00002000)
......................... (00002500)
......tcrtest: tcrdbout: error: 7: no record found
random multi reading:
......................... (00000500)
......................... (00001000)
......................... (00001500)
......................... (00002000)
......................... (00002500)
......................... (00003000)
......................... (00003500)
......................... (00004000)
......................... (00004500)
......................... (00005000)
script extension calling:
......................... (00000500)
......................... (00001000)
......................... (00001500)
......................... (00002000)
......................... (00002500)
......................... (00003000)
......................... (00003500)
......................... (00004000)
......................... (00004500)
......................... (00005000)
checking versatile functions:
......................... (00000500)
......................... (00001000)
......................... (00001500)
......................... (00002000)
......................... (00002500)
......................... (00003000)
......................... (00003500)
......................... (00004000)
......................... (00004500)
......................... (00005000)
record number: 0
size: 61728
time: 3.798
error
  • tcrtest: (validation): error: 0: success は毎回発生。
  • tcrtest: tcrdbput: error: 9999: miscellaneous error はrnumが4096から毎回発生するようだった。

ログは以下のとおり。

2009-06-03T19:17:55+09:00       SYSTEM  --------- logging started [2886] --------
2009-06-03T19:17:55+09:00       SYSTEM  process ID configuration: path=/var/ttserver/pid pid=2886
2009-06-03T19:17:55+09:00       SYSTEM  server configuration: host=(any) port=1978
2009-06-03T19:17:55+09:00       SYSTEM  opening the database: /var/ttserver/casket.tct#bnum=1000000
2009-06-03T19:17:55+09:00       SYSTEM  service started: 2886
2009-06-03T19:17:55+09:00       INFO    timer thread 1 started
2009-06-03T19:17:55+09:00       INFO    worker thread 1 started
2009-06-03T19:17:55+09:00       INFO    worker thread 2 started
2009-06-03T19:17:55+09:00       INFO    worker thread 3 started
2009-06-03T19:17:55+09:00       INFO    worker thread 4 started
2009-06-03T19:17:55+09:00       INFO    worker thread 5 started
2009-06-03T19:17:55+09:00       INFO    worker thread 6 started
2009-06-03T19:17:55+09:00       INFO    worker thread 7 started
2009-06-03T19:17:55+09:00       INFO    worker thread 8 started
2009-06-03T19:17:55+09:00       SYSTEM  listening started
2009-06-03T19:18:00+09:00       INFO    connected: 127.0.0.1:64081
2009-06-03T19:18:00+09:00       INFO    doing vanish command
2009-06-03T19:18:02+09:00       ERROR   do_put: operation failed
2009-06-03T19:18:04+09:00       INFO    doing sync command
2009-06-03T19:18:04+09:00       INFO    doing optimize command
2009-06-03T19:18:04+09:00       INFO    doing vanish command
2009-06-03T19:18:04+09:00       INFO    connection finished
2009-06-03T19:18:06+09:00       INFO    signal interruption
2009-06-03T19:18:06+09:00       SYSTEM  listening finished
2009-06-03T19:18:06+09:00       SYSTEM  closing the database
2009-06-03T19:18:06+09:00       INFO    worker thread 1 was canceled
2009-06-03T19:18:06+09:00       INFO    worker thread 1 finished
2009-06-03T19:18:06+09:00       INFO    worker thread 2 was canceled
2009-06-03T19:18:06+09:00       INFO    worker thread 2 finished
2009-06-03T19:18:06+09:00       INFO    worker thread 3 was canceled
2009-06-03T19:18:06+09:00       INFO    worker thread 3 finished
2009-06-03T19:18:06+09:00       INFO    worker thread 4 was canceled
2009-06-03T19:18:06+09:00       INFO    worker thread 4 finished
2009-06-03T19:18:06+09:00       INFO    worker thread 5 was canceled
2009-06-03T19:18:06+09:00       INFO    worker thread 5 finished
2009-06-03T19:18:06+09:00       INFO    worker thread 6 was canceled
2009-06-03T19:18:06+09:00       INFO    worker thread 6 finished
2009-06-03T19:18:06+09:00       INFO    worker thread 7 was canceled
2009-06-03T19:18:06+09:00       INFO    worker thread 7 finished
2009-06-03T19:18:06+09:00       INFO    worker thread 8 was canceled
2009-06-03T19:18:06+09:00       INFO    worker thread 8 finished
2009-06-03T19:18:06+09:00       INFO    timer thread 1 was canceled
2009-06-03T19:18:06+09:00       INFO    timer thread 1 finished
2009-06-03T19:18:06+09:00       SYSTEM  service finished
2009-06-03T19:18:06+09:00       SYSTEM  --------- logging finished [2886] --------