heroku-tokyotyrant 0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +504 -0
- data/README.rdoc +231 -0
- data/Rakefile +72 -0
- data/benchmarks/balancer.rb +101 -0
- data/benchmarks/bulk_db.rb +74 -0
- data/benchmarks/bulk_table.rb +87 -0
- data/benchmarks/db.rb +114 -0
- data/benchmarks/table.rb +161 -0
- data/ext/extconf.rb +43 -0
- data/ext/tokyo/bin/tcamgr +0 -0
- data/ext/tokyo/bin/tcamttest +0 -0
- data/ext/tokyo/bin/tcatest +0 -0
- data/ext/tokyo/bin/tcbmgr +0 -0
- data/ext/tokyo/bin/tcbmttest +0 -0
- data/ext/tokyo/bin/tcbtest +0 -0
- data/ext/tokyo/bin/tcfmgr +0 -0
- data/ext/tokyo/bin/tcfmttest +0 -0
- data/ext/tokyo/bin/tcftest +0 -0
- data/ext/tokyo/bin/tchmgr +0 -0
- data/ext/tokyo/bin/tchmttest +0 -0
- data/ext/tokyo/bin/tchtest +0 -0
- data/ext/tokyo/bin/tcrmgr +0 -0
- data/ext/tokyo/bin/tcrmttest +0 -0
- data/ext/tokyo/bin/tcrtest +0 -0
- data/ext/tokyo/bin/tctmgr +0 -0
- data/ext/tokyo/bin/tctmttest +0 -0
- data/ext/tokyo/bin/tcttest +0 -0
- data/ext/tokyo/bin/tcucodec +0 -0
- data/ext/tokyo/bin/tcumttest +0 -0
- data/ext/tokyo/bin/tcutest +0 -0
- data/ext/tokyo/bin/ttserver +0 -0
- data/ext/tokyo/bin/ttulmgr +0 -0
- data/ext/tokyo/bin/ttultest +0 -0
- data/ext/tokyo/include/tcadb.h +548 -0
- data/ext/tokyo/include/tcbdb.h +1101 -0
- data/ext/tokyo/include/tcfdb.h +858 -0
- data/ext/tokyo/include/tchdb.h +871 -0
- data/ext/tokyo/include/tcrdb.h +801 -0
- data/ext/tokyo/include/tctdb.h +1086 -0
- data/ext/tokyo/include/tculog.h +392 -0
- data/ext/tokyo/include/tcutil.h +4184 -0
- data/ext/tokyo/include/ttutil.h +494 -0
- data/ext/tokyo/lib/libtokyocabinet.9.4.0.dylib +0 -0
- data/ext/tokyo/lib/libtokyocabinet.9.dylib +0 -0
- data/ext/tokyo/lib/libtokyocabinet.a +0 -0
- data/ext/tokyo/lib/libtokyocabinet.dylib +0 -0
- data/ext/tokyo/lib/libtokyotyrant.3.22.0.dylib +0 -0
- data/ext/tokyo/lib/libtokyotyrant.3.dylib +0 -0
- data/ext/tokyo/lib/libtokyotyrant.a +0 -0
- data/ext/tokyo/lib/libtokyotyrant.dylib +0 -0
- data/ext/tokyo/lib/pkgconfig/tokyocabinet.pc +14 -0
- data/ext/tokyo/lib/pkgconfig/tokyotyrant.pc +14 -0
- data/ext/tokyo/lib/ttskeldir.bundle +0 -0
- data/ext/tokyo/lib/ttskelmock.bundle +0 -0
- data/ext/tokyo/lib/ttskelnull.bundle +0 -0
- data/ext/tokyo/lib/ttskelproxy.bundle +0 -0
- data/ext/tokyo/libexec/tcawmgr.cgi +0 -0
- data/ext/tokyo/sbin/ttservctl +163 -0
- data/ext/tokyo/share/man/man1/tcamgr.1 +97 -0
- data/ext/tokyo/share/man/man1/tcamttest.1 +35 -0
- data/ext/tokyo/share/man/man1/tcatest.1 +55 -0
- data/ext/tokyo/share/man/man1/tcbmgr.1 +125 -0
- data/ext/tokyo/share/man/man1/tcbmttest.1 +81 -0
- data/ext/tokyo/share/man/man1/tcbtest.1 +107 -0
- data/ext/tokyo/share/man/man1/tcfmgr.1 +98 -0
- data/ext/tokyo/share/man/man1/tcfmttest.1 +62 -0
- data/ext/tokyo/share/man/man1/tcftest.1 +73 -0
- data/ext/tokyo/share/man/man1/tchmgr.1 +110 -0
- data/ext/tokyo/share/man/man1/tchmttest.1 +85 -0
- data/ext/tokyo/share/man/man1/tchtest.1 +95 -0
- data/ext/tokyo/share/man/man1/tcrmgr.1 +164 -0
- data/ext/tokyo/share/man/man1/tcrmttest.1 +55 -0
- data/ext/tokyo/share/man/man1/tcrtest.1 +89 -0
- data/ext/tokyo/share/man/man1/tctmgr.1 +140 -0
- data/ext/tokyo/share/man/man1/tctmttest.1 +92 -0
- data/ext/tokyo/share/man/man1/tcttest.1 +105 -0
- data/ext/tokyo/share/man/man1/tcucodec.1 +162 -0
- data/ext/tokyo/share/man/man1/tcumttest.1 +41 -0
- data/ext/tokyo/share/man/man1/tcutest.1 +81 -0
- data/ext/tokyo/share/man/man1/ttserver.1 +84 -0
- data/ext/tokyo/share/man/man1/ttulmgr.1 +40 -0
- data/ext/tokyo/share/man/man1/ttultest.1 +16 -0
- data/ext/tokyo/share/man/man3/tcadb.3 +676 -0
- data/ext/tokyo/share/man/man3/tcbdb.3 +1355 -0
- data/ext/tokyo/share/man/man3/tcfdb.3 +975 -0
- data/ext/tokyo/share/man/man3/tchdb.3 +898 -0
- data/ext/tokyo/share/man/man3/tclist.3 +1 -0
- data/ext/tokyo/share/man/man3/tcmap.3 +1 -0
- data/ext/tokyo/share/man/man3/tcmdb.3 +1 -0
- data/ext/tokyo/share/man/man3/tcmpool.3 +1 -0
- data/ext/tokyo/share/man/man3/tcrdb.3 +1309 -0
- data/ext/tokyo/share/man/man3/tctdb.3 +1110 -0
- data/ext/tokyo/share/man/man3/tctree.3 +1 -0
- data/ext/tokyo/share/man/man3/tculog.3 +15 -0
- data/ext/tokyo/share/man/man3/tcutil.3 +4518 -0
- data/ext/tokyo/share/man/man3/tcxstr.3 +1 -0
- data/ext/tokyo/share/man/man3/tokyocabinet.3 +132 -0
- data/ext/tokyo/share/man/man3/ttutil.3 +14 -0
- data/ext/tokyo/share/man/man8/ttservctl.8 +37 -0
- data/ext/tokyo/share/tokyocabinet/COPYING +504 -0
- data/ext/tokyo/share/tokyocabinet/ChangeLog +1252 -0
- data/ext/tokyo/share/tokyocabinet/THANKS +12 -0
- data/ext/tokyo/share/tokyocabinet/doc/benchmark.pdf +0 -0
- data/ext/tokyo/share/tokyocabinet/doc/common.css +211 -0
- data/ext/tokyo/share/tokyocabinet/doc/icon16.png +0 -0
- data/ext/tokyo/share/tokyocabinet/doc/index.html +156 -0
- data/ext/tokyo/share/tokyocabinet/doc/index.ja.html +197 -0
- data/ext/tokyo/share/tokyocabinet/doc/logo-ja.png +0 -0
- data/ext/tokyo/share/tokyocabinet/doc/logo.png +0 -0
- data/ext/tokyo/share/tokyocabinet/doc/spex-en.html +7145 -0
- data/ext/tokyo/share/tokyocabinet/doc/spex-ja.html +7476 -0
- data/ext/tokyo/share/tokyocabinet/doc/tokyoproducts.pdf +0 -0
- data/ext/tokyo/share/tokyocabinet/doc/tokyoproducts.ppt +0 -0
- data/ext/tokyo/share/tokyotyrant/COPYING +504 -0
- data/ext/tokyo/share/tokyotyrant/ChangeLog +578 -0
- data/ext/tokyo/share/tokyotyrant/THANKS +15 -0
- data/ext/tokyo/share/tokyotyrant/doc/common.css +211 -0
- data/ext/tokyo/share/tokyotyrant/doc/index.html +79 -0
- data/ext/tokyo/share/tokyotyrant/doc/spex.html +2264 -0
- data/ext/tokyo/share/tokyotyrant/ext/mapreduce.lua +57 -0
- data/ext/tokyo/share/tokyotyrant/ext/queue.lua +55 -0
- data/ext/tokyo/share/tokyotyrant/ext/senatus.lua +532 -0
- data/ext/tokyo/share/tokyotyrant/ext/usherette.lua +438 -0
- data/ext/tokyo_tyrant.c +147 -0
- data/ext/tokyo_tyrant.h +48 -0
- data/ext/tokyo_tyrant_db.c +227 -0
- data/ext/tokyo_tyrant_db.h +8 -0
- data/ext/tokyo_tyrant_module.c +453 -0
- data/ext/tokyo_tyrant_module.h +10 -0
- data/ext/tokyo_tyrant_query.c +226 -0
- data/ext/tokyo_tyrant_query.h +9 -0
- data/ext/tokyo_tyrant_table.c +319 -0
- data/ext/tokyo_tyrant_table.h +8 -0
- data/ext/tokyocabinet-1.4.41/COPYING +504 -0
- data/ext/tokyocabinet-1.4.41/ChangeLog +1252 -0
- data/ext/tokyocabinet-1.4.41/Makefile.in +825 -0
- data/ext/tokyocabinet-1.4.41/README +38 -0
- data/ext/tokyocabinet-1.4.41/THANKS +12 -0
- data/ext/tokyocabinet-1.4.41/bros/Makefile +133 -0
- data/ext/tokyocabinet-1.4.41/bros/bdbtest.c +438 -0
- data/ext/tokyocabinet-1.4.41/bros/cdbtest.c +219 -0
- data/ext/tokyocabinet-1.4.41/bros/cmpsqltctest.c +186 -0
- data/ext/tokyocabinet-1.4.41/bros/gdbmtest.c +216 -0
- data/ext/tokyocabinet-1.4.41/bros/mapreporter +72 -0
- data/ext/tokyocabinet-1.4.41/bros/maptest.cc +677 -0
- data/ext/tokyocabinet-1.4.41/bros/ndbmtest.c +204 -0
- data/ext/tokyocabinet-1.4.41/bros/qdbmtest.c +375 -0
- data/ext/tokyocabinet-1.4.41/bros/reporter +141 -0
- data/ext/tokyocabinet-1.4.41/bros/result.xls +0 -0
- data/ext/tokyocabinet-1.4.41/bros/sdbmtest.c +204 -0
- data/ext/tokyocabinet-1.4.41/bros/sqltest.c +404 -0
- data/ext/tokyocabinet-1.4.41/bros/tctest.c +748 -0
- data/ext/tokyocabinet-1.4.41/bros/tdbtest.c +205 -0
- data/ext/tokyocabinet-1.4.41/configure +7402 -0
- data/ext/tokyocabinet-1.4.41/configure.in +362 -0
- data/ext/tokyocabinet-1.4.41/doc/benchmark.pdf +0 -0
- data/ext/tokyocabinet-1.4.41/doc/common.css +211 -0
- data/ext/tokyocabinet-1.4.41/doc/icon16.png +0 -0
- data/ext/tokyocabinet-1.4.41/doc/index.html +156 -0
- data/ext/tokyocabinet-1.4.41/doc/index.ja.html +197 -0
- data/ext/tokyocabinet-1.4.41/doc/logo-ja.png +0 -0
- data/ext/tokyocabinet-1.4.41/doc/logo.png +0 -0
- data/ext/tokyocabinet-1.4.41/doc/spex-en.html +7145 -0
- data/ext/tokyocabinet-1.4.41/doc/spex-ja.html +7476 -0
- data/ext/tokyocabinet-1.4.41/doc/tokyoproducts.pdf +0 -0
- data/ext/tokyocabinet-1.4.41/doc/tokyoproducts.ppt +0 -0
- data/ext/tokyocabinet-1.4.41/example/Makefile +113 -0
- data/ext/tokyocabinet-1.4.41/example/tcadbex.c +55 -0
- data/ext/tokyocabinet-1.4.41/example/tcbdbex.c +64 -0
- data/ext/tokyocabinet-1.4.41/example/tcfdbex.c +60 -0
- data/ext/tokyocabinet-1.4.41/example/tchdbex.c +60 -0
- data/ext/tokyocabinet-1.4.41/example/tctchat.c +97 -0
- data/ext/tokyocabinet-1.4.41/example/tctchat.tmpl +141 -0
- data/ext/tokyocabinet-1.4.41/example/tctdbex.c +85 -0
- data/ext/tokyocabinet-1.4.41/example/tctsearch.c +95 -0
- data/ext/tokyocabinet-1.4.41/example/tctsearch.tmpl +122 -0
- data/ext/tokyocabinet-1.4.41/example/tcutilex.c +77 -0
- data/ext/tokyocabinet-1.4.41/f.tsv +2 -0
- data/ext/tokyocabinet-1.4.41/lab/calccomp +118 -0
- data/ext/tokyocabinet-1.4.41/lab/datechange +56 -0
- data/ext/tokyocabinet-1.4.41/lab/diffcheck +45 -0
- data/ext/tokyocabinet-1.4.41/lab/htmltotsv +102 -0
- data/ext/tokyocabinet-1.4.41/lab/magic +19 -0
- data/ext/tokyocabinet-1.4.41/lab/printenv.cgi +27 -0
- data/ext/tokyocabinet-1.4.41/lab/stepcount +26 -0
- data/ext/tokyocabinet-1.4.41/lab/stopwatch +61 -0
- data/ext/tokyocabinet-1.4.41/lab/tabcheck +43 -0
- data/ext/tokyocabinet-1.4.41/lab/wgettsv +239 -0
- data/ext/tokyocabinet-1.4.41/lab/widthcheck +57 -0
- data/ext/tokyocabinet-1.4.41/man/htmltoman +104 -0
- data/ext/tokyocabinet-1.4.41/man/tcadb.3 +676 -0
- data/ext/tokyocabinet-1.4.41/man/tcamgr.1 +97 -0
- data/ext/tokyocabinet-1.4.41/man/tcamttest.1 +35 -0
- data/ext/tokyocabinet-1.4.41/man/tcatest.1 +55 -0
- data/ext/tokyocabinet-1.4.41/man/tcbdb.3 +1355 -0
- data/ext/tokyocabinet-1.4.41/man/tcbmgr.1 +125 -0
- data/ext/tokyocabinet-1.4.41/man/tcbmttest.1 +81 -0
- data/ext/tokyocabinet-1.4.41/man/tcbtest.1 +107 -0
- data/ext/tokyocabinet-1.4.41/man/tcfdb.3 +975 -0
- data/ext/tokyocabinet-1.4.41/man/tcfmgr.1 +98 -0
- data/ext/tokyocabinet-1.4.41/man/tcfmttest.1 +62 -0
- data/ext/tokyocabinet-1.4.41/man/tcftest.1 +73 -0
- data/ext/tokyocabinet-1.4.41/man/tchdb.3 +898 -0
- data/ext/tokyocabinet-1.4.41/man/tchmgr.1 +110 -0
- data/ext/tokyocabinet-1.4.41/man/tchmttest.1 +85 -0
- data/ext/tokyocabinet-1.4.41/man/tchtest.1 +95 -0
- data/ext/tokyocabinet-1.4.41/man/tclist.3 +1 -0
- data/ext/tokyocabinet-1.4.41/man/tcmap.3 +1 -0
- data/ext/tokyocabinet-1.4.41/man/tcmdb.3 +1 -0
- data/ext/tokyocabinet-1.4.41/man/tcmpool.3 +1 -0
- data/ext/tokyocabinet-1.4.41/man/tctdb.3 +1110 -0
- data/ext/tokyocabinet-1.4.41/man/tctmgr.1 +140 -0
- data/ext/tokyocabinet-1.4.41/man/tctmttest.1 +92 -0
- data/ext/tokyocabinet-1.4.41/man/tctree.3 +1 -0
- data/ext/tokyocabinet-1.4.41/man/tcttest.1 +105 -0
- data/ext/tokyocabinet-1.4.41/man/tcucodec.1 +162 -0
- data/ext/tokyocabinet-1.4.41/man/tcumttest.1 +41 -0
- data/ext/tokyocabinet-1.4.41/man/tcutest.1 +81 -0
- data/ext/tokyocabinet-1.4.41/man/tcutil.3 +4518 -0
- data/ext/tokyocabinet-1.4.41/man/tcxstr.3 +1 -0
- data/ext/tokyocabinet-1.4.41/man/tokyocabinet.3 +132 -0
- data/ext/tokyocabinet-1.4.41/md5.c +381 -0
- data/ext/tokyocabinet-1.4.41/md5.h +101 -0
- data/ext/tokyocabinet-1.4.41/myconf.c +493 -0
- data/ext/tokyocabinet-1.4.41/myconf.h +549 -0
- data/ext/tokyocabinet-1.4.41/tcadb.c +4339 -0
- data/ext/tokyocabinet-1.4.41/tcadb.h +548 -0
- data/ext/tokyocabinet-1.4.41/tcamgr.c +1019 -0
- data/ext/tokyocabinet-1.4.41/tcamttest.c +542 -0
- data/ext/tokyocabinet-1.4.41/tcatest.c +1845 -0
- data/ext/tokyocabinet-1.4.41/tcawmgr.c +482 -0
- data/ext/tokyocabinet-1.4.41/tcbdb.c +4180 -0
- data/ext/tokyocabinet-1.4.41/tcbdb.h +1101 -0
- data/ext/tokyocabinet-1.4.41/tcbmgr.c +1012 -0
- data/ext/tokyocabinet-1.4.41/tcbmttest.c +1810 -0
- data/ext/tokyocabinet-1.4.41/tcbtest.c +2586 -0
- data/ext/tokyocabinet-1.4.41/tcfdb.c +2746 -0
- data/ext/tokyocabinet-1.4.41/tcfdb.h +858 -0
- data/ext/tokyocabinet-1.4.41/tcfmgr.c +786 -0
- data/ext/tokyocabinet-1.4.41/tcfmttest.c +1220 -0
- data/ext/tokyocabinet-1.4.41/tcftest.c +1695 -0
- data/ext/tokyocabinet-1.4.41/tchdb.c +5153 -0
- data/ext/tokyocabinet-1.4.41/tchdb.h +871 -0
- data/ext/tokyocabinet-1.4.41/tchmgr.c +842 -0
- data/ext/tokyocabinet-1.4.41/tchmttest.c +1757 -0
- data/ext/tokyocabinet-1.4.41/tchtest.c +2129 -0
- data/ext/tokyocabinet-1.4.41/tctdb.c +6199 -0
- data/ext/tokyocabinet-1.4.41/tctdb.h +1086 -0
- data/ext/tokyocabinet-1.4.41/tctmgr.c +1241 -0
- data/ext/tokyocabinet-1.4.41/tctmttest.c +1563 -0
- data/ext/tokyocabinet-1.4.41/tcttest.c +2062 -0
- data/ext/tokyocabinet-1.4.41/tcucodec.c +1357 -0
- data/ext/tokyocabinet-1.4.41/tcumttest.c +578 -0
- data/ext/tokyocabinet-1.4.41/tcutest.c +1875 -0
- data/ext/tokyocabinet-1.4.41/tcutil.c +10528 -0
- data/ext/tokyocabinet-1.4.41/tcutil.h +4184 -0
- data/ext/tokyocabinet-1.4.41/tokyocabinet.idl +336 -0
- data/ext/tokyocabinet-1.4.41/tokyocabinet.pc.in +14 -0
- data/ext/tokyotyrant-1.1.39/COPYING +504 -0
- data/ext/tokyotyrant-1.1.39/ChangeLog +578 -0
- data/ext/tokyotyrant-1.1.39/Makefile.in +365 -0
- data/ext/tokyotyrant-1.1.39/README +38 -0
- data/ext/tokyotyrant-1.1.39/THANKS +15 -0
- data/ext/tokyotyrant-1.1.39/configure +6979 -0
- data/ext/tokyotyrant-1.1.39/configure.in +300 -0
- data/ext/tokyotyrant-1.1.39/doc/common.css +211 -0
- data/ext/tokyotyrant-1.1.39/doc/index.html +79 -0
- data/ext/tokyotyrant-1.1.39/doc/spex.html +2264 -0
- data/ext/tokyotyrant-1.1.39/example/Makefile +68 -0
- data/ext/tokyotyrant-1.1.39/example/httptest.pl +88 -0
- data/ext/tokyotyrant-1.1.39/example/mcftest.pl +39 -0
- data/ext/tokyotyrant-1.1.39/example/mctest.pl +43 -0
- data/ext/tokyotyrant-1.1.39/example/tcrdbex +0 -0
- data/ext/tokyotyrant-1.1.39/example/tcrdbex.c +49 -0
- data/ext/tokyotyrant-1.1.39/example/tcrdbex.o +0 -0
- data/ext/tokyotyrant-1.1.39/example/tcrdbtblex +0 -0
- data/ext/tokyotyrant-1.1.39/example/tcrdbtblex.c +79 -0
- data/ext/tokyotyrant-1.1.39/example/tcrdbtblex.o +0 -0
- data/ext/tokyotyrant-1.1.39/ext/mapreduce.lua +57 -0
- data/ext/tokyotyrant-1.1.39/ext/queue.lua +55 -0
- data/ext/tokyotyrant-1.1.39/ext/senatus.lua +532 -0
- data/ext/tokyotyrant-1.1.39/ext/usherette.lua +438 -0
- data/ext/tokyotyrant-1.1.39/lab/datechange +56 -0
- data/ext/tokyotyrant-1.1.39/lab/diffcheck +45 -0
- data/ext/tokyotyrant-1.1.39/lab/fibonacci.lua +20 -0
- data/ext/tokyotyrant-1.1.39/lab/footprint.lua +67 -0
- data/ext/tokyotyrant-1.1.39/lab/highlow.lua +88 -0
- data/ext/tokyotyrant-1.1.39/lab/killdualmaster +12 -0
- data/ext/tokyotyrant-1.1.39/lab/rundualmaster +38 -0
- data/ext/tokyotyrant-1.1.39/lab/stepcount +26 -0
- data/ext/tokyotyrant-1.1.39/lab/tabcheck +43 -0
- data/ext/tokyotyrant-1.1.39/lab/ushrtregister.pl +55 -0
- data/ext/tokyotyrant-1.1.39/lab/widthcheck +57 -0
- data/ext/tokyotyrant-1.1.39/man/htmltoman +100 -0
- data/ext/tokyotyrant-1.1.39/man/tcrdb.3 +1309 -0
- data/ext/tokyotyrant-1.1.39/man/tcrmgr.1 +164 -0
- data/ext/tokyotyrant-1.1.39/man/tcrmttest.1 +55 -0
- data/ext/tokyotyrant-1.1.39/man/tcrtest.1 +89 -0
- data/ext/tokyotyrant-1.1.39/man/tculog.3 +15 -0
- data/ext/tokyotyrant-1.1.39/man/ttservctl.8 +37 -0
- data/ext/tokyotyrant-1.1.39/man/ttserver.1 +84 -0
- data/ext/tokyotyrant-1.1.39/man/ttulmgr.1 +40 -0
- data/ext/tokyotyrant-1.1.39/man/ttultest.1 +16 -0
- data/ext/tokyotyrant-1.1.39/man/ttutil.3 +14 -0
- data/ext/tokyotyrant-1.1.39/myconf.c +169 -0
- data/ext/tokyotyrant-1.1.39/myconf.h +408 -0
- data/ext/tokyotyrant-1.1.39/scrext.c +2394 -0
- data/ext/tokyotyrant-1.1.39/scrext.h +96 -0
- data/ext/tokyotyrant-1.1.39/tcrdb.c +2637 -0
- data/ext/tokyotyrant-1.1.39/tcrdb.h +801 -0
- data/ext/tokyotyrant-1.1.39/tcrmgr.c +1559 -0
- data/ext/tokyotyrant-1.1.39/tcrmttest.c +915 -0
- data/ext/tokyotyrant-1.1.39/tcrtest.c +1542 -0
- data/ext/tokyotyrant-1.1.39/tculog.c +1211 -0
- data/ext/tokyotyrant-1.1.39/tculog.h +392 -0
- data/ext/tokyotyrant-1.1.39/tokyotyrant.idl +143 -0
- data/ext/tokyotyrant-1.1.39/tokyotyrant.pc.in +14 -0
- data/ext/tokyotyrant-1.1.39/ttservctl +163 -0
- data/ext/tokyotyrant-1.1.39/ttserver.c +3583 -0
- data/ext/tokyotyrant-1.1.39/ttskeldir.c +141 -0
- data/ext/tokyotyrant-1.1.39/ttskelmock.c +64 -0
- data/ext/tokyotyrant-1.1.39/ttskelnull.c +79 -0
- data/ext/tokyotyrant-1.1.39/ttskelproxy.c +74 -0
- data/ext/tokyotyrant-1.1.39/ttulmgr.c +266 -0
- data/ext/tokyotyrant-1.1.39/ttultest.c +371 -0
- data/ext/tokyotyrant-1.1.39/ttutil.c +1510 -0
- data/ext/tokyotyrant-1.1.39/ttutil.h +494 -0
- data/lib/tokyo_tyrant/balancer.rb +189 -0
- data/spec/ext.lua +4 -0
- data/spec/plu_db.rb +538 -0
- data/spec/spec.rb +1 -0
- data/spec/spec_base.rb +17 -0
- data/spec/start_tyrants.sh +36 -0
- data/spec/stop_tyrants.sh +9 -0
- data/spec/tokyo_tyrant_balancer_db_spec.rb +160 -0
- data/spec/tokyo_tyrant_balancer_table_spec.rb +177 -0
- data/spec/tokyo_tyrant_query_spec.rb +159 -0
- data/spec/tokyo_tyrant_spec.rb +254 -0
- data/spec/tokyo_tyrant_table_spec.rb +301 -0
- metadata +402 -0
@@ -0,0 +1,578 @@
|
|
1
|
+
/*************************************************************************************************
|
2
|
+
* The test cases of the on-memory database API
|
3
|
+
* Copyright (C) 2006-2009 Mikio Hirabayashi
|
4
|
+
* This file is part of Tokyo Cabinet.
|
5
|
+
* Tokyo Cabinet is free software; you can redistribute it and/or modify it under the terms of
|
6
|
+
* the GNU Lesser General Public License as published by the Free Software Foundation; either
|
7
|
+
* version 2.1 of the License or any later version. Tokyo Cabinet is distributed in the hope
|
8
|
+
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
10
|
+
* License for more details.
|
11
|
+
* You should have received a copy of the GNU Lesser General Public License along with Tokyo
|
12
|
+
* Cabinet; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
13
|
+
* Boston, MA 02111-1307 USA.
|
14
|
+
*************************************************************************************************/
|
15
|
+
|
16
|
+
|
17
|
+
#include <tcutil.h>
|
18
|
+
#include "myconf.h"
|
19
|
+
|
20
|
+
#define RECBUFSIZ 48 // buffer for records
|
21
|
+
|
22
|
+
typedef struct { // type of structure for combo thread
|
23
|
+
TCMDB *mdb;
|
24
|
+
TCNDB *ndb;
|
25
|
+
int rnum;
|
26
|
+
bool rnd;
|
27
|
+
int id;
|
28
|
+
} TARGCOMBO;
|
29
|
+
|
30
|
+
typedef struct { // type of structure for typical thread
|
31
|
+
TCMDB *mdb;
|
32
|
+
TCNDB *ndb;
|
33
|
+
int rnum;
|
34
|
+
bool nc;
|
35
|
+
int rratio;
|
36
|
+
int id;
|
37
|
+
} TARGTYPICAL;
|
38
|
+
|
39
|
+
|
40
|
+
/* global variables */
|
41
|
+
const char *g_progname; // program name
|
42
|
+
unsigned int g_randseed; // random seed
|
43
|
+
|
44
|
+
|
45
|
+
/* function prototypes */
|
46
|
+
int main(int argc, char **argv);
|
47
|
+
static void usage(void);
|
48
|
+
static void iprintf(const char *format, ...);
|
49
|
+
static void iputchar(int c);
|
50
|
+
static void eprint(int line, const char *func);
|
51
|
+
static int myrand(int range);
|
52
|
+
static int myrandnd(int range);
|
53
|
+
static int runcombo(int argc, char **argv);
|
54
|
+
static int runtypical(int argc, char **argv);
|
55
|
+
static int proccombo(int tnum, int rnum, int bnum, bool tr, bool rnd);
|
56
|
+
static int proctypical(int tnum, int rnum, int bnum, bool tr, bool nc, int rratio);
|
57
|
+
static void *threadwrite(void *targ);
|
58
|
+
static void *threadread(void *targ);
|
59
|
+
static void *threadremove(void *targ);
|
60
|
+
static void *threadtypical(void *targ);
|
61
|
+
|
62
|
+
|
63
|
+
/* main routine */
|
64
|
+
int main(int argc, char **argv){
|
65
|
+
g_progname = argv[0];
|
66
|
+
const char *ebuf = getenv("TCRNDSEED");
|
67
|
+
g_randseed = ebuf ? tcatoix(ebuf) : tctime() * 1000;
|
68
|
+
srand(g_randseed);
|
69
|
+
if(argc < 2) usage();
|
70
|
+
int rv = 0;
|
71
|
+
if(!strcmp(argv[1], "combo")){
|
72
|
+
rv = runcombo(argc, argv);
|
73
|
+
} else if(!strcmp(argv[1], "typical")){
|
74
|
+
rv = runtypical(argc, argv);
|
75
|
+
} else {
|
76
|
+
usage();
|
77
|
+
}
|
78
|
+
if(rv != 0){
|
79
|
+
printf("FAILED: TCRNDSEED=%u PID=%d", g_randseed, (int)getpid());
|
80
|
+
for(int i = 0; i < argc; i++){
|
81
|
+
printf(" %s", argv[i]);
|
82
|
+
}
|
83
|
+
printf("\n\n");
|
84
|
+
}
|
85
|
+
return rv;
|
86
|
+
}
|
87
|
+
|
88
|
+
|
89
|
+
/* print the usage and exit */
|
90
|
+
static void usage(void){
|
91
|
+
fprintf(stderr, "%s: test cases of the on-memory database API of Tokyo Cabinet\n", g_progname);
|
92
|
+
fprintf(stderr, "\n");
|
93
|
+
fprintf(stderr, "usage:\n");
|
94
|
+
fprintf(stderr, " %s combo [-tr] [-rnd] tnum rnum [bnum]\n", g_progname);
|
95
|
+
fprintf(stderr, " %s typical [-tr] [-nc] [-rr num] tnum rnum [bnum]\n", g_progname);
|
96
|
+
fprintf(stderr, "\n");
|
97
|
+
exit(1);
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
/* print formatted information string and flush the buffer */
|
102
|
+
static void iprintf(const char *format, ...){
|
103
|
+
va_list ap;
|
104
|
+
va_start(ap, format);
|
105
|
+
vprintf(format, ap);
|
106
|
+
fflush(stdout);
|
107
|
+
va_end(ap);
|
108
|
+
}
|
109
|
+
|
110
|
+
|
111
|
+
/* print a character and flush the buffer */
|
112
|
+
static void iputchar(int c){
|
113
|
+
putchar(c);
|
114
|
+
fflush(stdout);
|
115
|
+
}
|
116
|
+
|
117
|
+
|
118
|
+
/* print error message of on-memory database */
|
119
|
+
static void eprint(int line, const char *func){
|
120
|
+
fprintf(stderr, "%s: %d: %s: error\n", g_progname, line, func);
|
121
|
+
}
|
122
|
+
|
123
|
+
|
124
|
+
/* get a random number */
|
125
|
+
static int myrand(int range){
|
126
|
+
if(range < 2) return 0;
|
127
|
+
int high = (unsigned int)rand() >> 4;
|
128
|
+
int low = range * (rand() / (RAND_MAX + 1.0));
|
129
|
+
low &= (unsigned int)INT_MAX >> 4;
|
130
|
+
return (high + low) % range;
|
131
|
+
}
|
132
|
+
|
133
|
+
|
134
|
+
/* get a random number based on normal distribution */
|
135
|
+
static int myrandnd(int range){
|
136
|
+
int num = (int)tcdrandnd(range >> 1, range / 10);
|
137
|
+
return (num < 0 || num >= range) ? 0 : num;
|
138
|
+
}
|
139
|
+
|
140
|
+
|
141
|
+
/* parse arguments of combo command */
|
142
|
+
static int runcombo(int argc, char **argv){
|
143
|
+
char *tstr = NULL;
|
144
|
+
char *rstr = NULL;
|
145
|
+
char *bstr = NULL;
|
146
|
+
bool tr = false;
|
147
|
+
bool rnd = false;
|
148
|
+
for(int i = 2; i < argc; i++){
|
149
|
+
if(!tstr && argv[i][0] == '-'){
|
150
|
+
if(!strcmp(argv[i], "-tr")){
|
151
|
+
tr = true;
|
152
|
+
} else if(!strcmp(argv[i], "-rnd")){
|
153
|
+
rnd = true;
|
154
|
+
} else {
|
155
|
+
usage();
|
156
|
+
}
|
157
|
+
} else if(!tstr){
|
158
|
+
tstr = argv[i];
|
159
|
+
} else if(!rstr){
|
160
|
+
rstr = argv[i];
|
161
|
+
} else if(!bstr){
|
162
|
+
bstr = argv[i];
|
163
|
+
} else {
|
164
|
+
usage();
|
165
|
+
}
|
166
|
+
}
|
167
|
+
if(!tstr || !rstr) usage();
|
168
|
+
int tnum = tcatoix(tstr);
|
169
|
+
int rnum = tcatoix(rstr);
|
170
|
+
if(tnum < 1 || rnum < 1) usage();
|
171
|
+
int bnum = bstr ? tcatoix(bstr) : -1;
|
172
|
+
int rv = proccombo(tnum, rnum, bnum, tr, rnd);
|
173
|
+
return rv;
|
174
|
+
}
|
175
|
+
|
176
|
+
|
177
|
+
/* parse arguments of typical command */
|
178
|
+
static int runtypical(int argc, char **argv){
|
179
|
+
char *tstr = NULL;
|
180
|
+
char *rstr = NULL;
|
181
|
+
char *bstr = NULL;
|
182
|
+
bool tr = false;
|
183
|
+
int rratio = -1;
|
184
|
+
bool nc = false;
|
185
|
+
for(int i = 2; i < argc; i++){
|
186
|
+
if(!tstr && argv[i][0] == '-'){
|
187
|
+
if(!strcmp(argv[i], "-tr")){
|
188
|
+
tr = true;
|
189
|
+
} else if(!strcmp(argv[i], "-nc")){
|
190
|
+
nc = true;
|
191
|
+
} else if(!strcmp(argv[i], "-rr")){
|
192
|
+
if(++i >= argc) usage();
|
193
|
+
rratio = tcatoix(argv[i]);
|
194
|
+
} else {
|
195
|
+
usage();
|
196
|
+
}
|
197
|
+
} else if(!tstr){
|
198
|
+
tstr = argv[i];
|
199
|
+
} else if(!rstr){
|
200
|
+
rstr = argv[i];
|
201
|
+
} else if(!bstr){
|
202
|
+
bstr = argv[i];
|
203
|
+
} else {
|
204
|
+
usage();
|
205
|
+
}
|
206
|
+
}
|
207
|
+
if(!tstr || !rstr) usage();
|
208
|
+
int tnum = tcatoix(tstr);
|
209
|
+
int rnum = tcatoix(rstr);
|
210
|
+
if(tnum < 1 || rnum < 1) usage();
|
211
|
+
int bnum = bstr ? tcatoix(bstr) : -1;
|
212
|
+
int rv = proctypical(tnum, rnum, bnum, tr, nc, rratio);
|
213
|
+
return rv;
|
214
|
+
}
|
215
|
+
|
216
|
+
|
217
|
+
/* perform combo command */
|
218
|
+
static int proccombo(int tnum, int rnum, int bnum, bool tr, bool rnd){
|
219
|
+
iprintf("<Combination Test>\n seed=%u tnum=%d rnum=%d bnum=%d tr=%d rnd=%d\n\n",
|
220
|
+
g_randseed, tnum, rnum, bnum, tr, rnd);
|
221
|
+
bool err = false;
|
222
|
+
double stime = tctime();
|
223
|
+
TCMDB *mdb = (bnum > 0) ? tcmdbnew2(bnum) : tcmdbnew();
|
224
|
+
TCNDB *ndb = tcndbnew();
|
225
|
+
TARGCOMBO targs[tnum];
|
226
|
+
pthread_t threads[tnum];
|
227
|
+
if(tnum == 1){
|
228
|
+
targs[0].mdb = mdb;
|
229
|
+
targs[0].ndb = tr ? ndb : NULL;
|
230
|
+
targs[0].rnum = rnum;
|
231
|
+
targs[0].rnd = rnd;
|
232
|
+
targs[0].id = 0;
|
233
|
+
if(threadwrite(targs) != NULL) err = true;
|
234
|
+
} else {
|
235
|
+
for(int i = 0; i < tnum; i++){
|
236
|
+
targs[i].mdb = mdb;
|
237
|
+
targs[i].ndb = tr ? ndb : NULL;
|
238
|
+
targs[i].rnum = rnum;
|
239
|
+
targs[i].rnd = rnd;
|
240
|
+
targs[i].id = i;
|
241
|
+
if(pthread_create(threads + i, NULL, threadwrite, targs + i) != 0){
|
242
|
+
eprint(__LINE__, "pthread_create");
|
243
|
+
targs[i].id = -1;
|
244
|
+
err = true;
|
245
|
+
}
|
246
|
+
}
|
247
|
+
for(int i = 0; i < tnum; i++){
|
248
|
+
if(targs[i].id == -1) continue;
|
249
|
+
void *rv;
|
250
|
+
if(pthread_join(threads[i], &rv) != 0){
|
251
|
+
eprint(__LINE__, "pthread_join");
|
252
|
+
err = true;
|
253
|
+
} else if(rv){
|
254
|
+
err = true;
|
255
|
+
}
|
256
|
+
}
|
257
|
+
}
|
258
|
+
if(tnum == 1){
|
259
|
+
targs[0].mdb = mdb;
|
260
|
+
targs[0].ndb = tr ? ndb : NULL;
|
261
|
+
targs[0].rnum = rnum;
|
262
|
+
targs[0].rnd = rnd;
|
263
|
+
targs[0].id = 0;
|
264
|
+
if(threadread(targs) != NULL) err = true;
|
265
|
+
} else {
|
266
|
+
for(int i = 0; i < tnum; i++){
|
267
|
+
targs[i].mdb = mdb;
|
268
|
+
targs[i].ndb = tr ? ndb : NULL;
|
269
|
+
targs[i].rnum = rnum;
|
270
|
+
targs[i].rnd = rnd;
|
271
|
+
targs[i].id = i;
|
272
|
+
if(pthread_create(threads + i, NULL, threadread, targs + i) != 0){
|
273
|
+
eprint(__LINE__, "pthread_create");
|
274
|
+
targs[i].id = -1;
|
275
|
+
err = true;
|
276
|
+
}
|
277
|
+
}
|
278
|
+
for(int i = 0; i < tnum; i++){
|
279
|
+
if(targs[i].id == -1) continue;
|
280
|
+
void *rv;
|
281
|
+
if(pthread_join(threads[i], &rv) != 0){
|
282
|
+
eprint(__LINE__, "pthread_join");
|
283
|
+
err = true;
|
284
|
+
} else if(rv){
|
285
|
+
err = true;
|
286
|
+
}
|
287
|
+
}
|
288
|
+
}
|
289
|
+
if(tnum == 1){
|
290
|
+
targs[0].mdb = mdb;
|
291
|
+
targs[0].ndb = tr ? ndb : NULL;
|
292
|
+
targs[0].rnum = rnum;
|
293
|
+
targs[0].rnd = rnd;
|
294
|
+
targs[0].id = 0;
|
295
|
+
if(threadremove(targs) != NULL) err = true;
|
296
|
+
} else {
|
297
|
+
for(int i = 0; i < tnum; i++){
|
298
|
+
targs[i].mdb = mdb;
|
299
|
+
targs[i].ndb = tr ? ndb : NULL;
|
300
|
+
targs[i].rnum = rnum;
|
301
|
+
targs[i].rnd = rnd;
|
302
|
+
targs[i].id = i;
|
303
|
+
if(pthread_create(threads + i, NULL, threadremove, targs + i) != 0){
|
304
|
+
eprint(__LINE__, "pthread_create");
|
305
|
+
targs[i].id = -1;
|
306
|
+
err = true;
|
307
|
+
}
|
308
|
+
}
|
309
|
+
for(int i = 0; i < tnum; i++){
|
310
|
+
if(targs[i].id == -1) continue;
|
311
|
+
void *rv;
|
312
|
+
if(pthread_join(threads[i], &rv) != 0){
|
313
|
+
eprint(__LINE__, "pthread_join");
|
314
|
+
err = true;
|
315
|
+
} else if(rv){
|
316
|
+
err = true;
|
317
|
+
}
|
318
|
+
}
|
319
|
+
}
|
320
|
+
if(tr){
|
321
|
+
iprintf("record number: %llu\n", (unsigned long long)tcndbrnum(ndb));
|
322
|
+
iprintf("size: %llu\n", (unsigned long long)tcndbmsiz(ndb));
|
323
|
+
} else {
|
324
|
+
iprintf("record number: %llu\n", (unsigned long long)tcmdbrnum(mdb));
|
325
|
+
iprintf("size: %llu\n", (unsigned long long)tcmdbmsiz(mdb));
|
326
|
+
}
|
327
|
+
tcndbdel(ndb);
|
328
|
+
tcmdbdel(mdb);
|
329
|
+
iprintf("time: %.3f\n", tctime() - stime);
|
330
|
+
iprintf("%s\n\n", err ? "error" : "ok");
|
331
|
+
return err ? 1 : 0;
|
332
|
+
}
|
333
|
+
|
334
|
+
|
335
|
+
/* perform typical command */
|
336
|
+
static int proctypical(int tnum, int rnum, int bnum, bool tr, bool nc, int rratio){
|
337
|
+
iprintf("<Typical Access Test>\n seed=%u tnum=%d rnum=%d bnum=%d tr=%d nc=%d"
|
338
|
+
" rratio=%d\n\n", g_randseed, tnum, rnum, bnum, tr, nc, rratio);
|
339
|
+
bool err = false;
|
340
|
+
double stime = tctime();
|
341
|
+
TCMDB *mdb = (bnum > 0) ? tcmdbnew2(bnum) : tcmdbnew();
|
342
|
+
TCNDB *ndb = tcndbnew();
|
343
|
+
TARGTYPICAL targs[tnum];
|
344
|
+
pthread_t threads[tnum];
|
345
|
+
if(tnum == 1){
|
346
|
+
targs[0].mdb = mdb;
|
347
|
+
targs[0].ndb = tr ? ndb : NULL;
|
348
|
+
targs[0].rnum = rnum;
|
349
|
+
targs[0].nc = nc;
|
350
|
+
targs[0].rratio = rratio;
|
351
|
+
targs[0].id = 0;
|
352
|
+
if(threadtypical(targs) != NULL) err = true;
|
353
|
+
} else {
|
354
|
+
for(int i = 0; i < tnum; i++){
|
355
|
+
targs[i].mdb = mdb;
|
356
|
+
targs[i].ndb = tr ? ndb : NULL;
|
357
|
+
targs[i].rnum = rnum;
|
358
|
+
targs[i].nc = nc;
|
359
|
+
targs[i].rratio= rratio;
|
360
|
+
targs[i].id = i;
|
361
|
+
if(pthread_create(threads + i, NULL, threadtypical, targs + i) != 0){
|
362
|
+
eprint(__LINE__, "pthread_create");
|
363
|
+
targs[i].id = -1;
|
364
|
+
err = true;
|
365
|
+
}
|
366
|
+
}
|
367
|
+
for(int i = 0; i < tnum; i++){
|
368
|
+
if(targs[i].id == -1) continue;
|
369
|
+
void *rv;
|
370
|
+
if(pthread_join(threads[i], &rv) != 0){
|
371
|
+
eprint(__LINE__, "pthread_join");
|
372
|
+
err = true;
|
373
|
+
} else if(rv){
|
374
|
+
err = true;
|
375
|
+
}
|
376
|
+
}
|
377
|
+
}
|
378
|
+
if(tr){
|
379
|
+
iprintf("record number: %llu\n", (unsigned long long)tcndbrnum(ndb));
|
380
|
+
iprintf("size: %llu\n", (unsigned long long)tcndbmsiz(ndb));
|
381
|
+
} else {
|
382
|
+
iprintf("record number: %llu\n", (unsigned long long)tcmdbrnum(mdb));
|
383
|
+
iprintf("size: %llu\n", (unsigned long long)tcmdbmsiz(mdb));
|
384
|
+
}
|
385
|
+
tcndbdel(ndb);
|
386
|
+
tcmdbdel(mdb);
|
387
|
+
iprintf("time: %.3f\n", tctime() - stime);
|
388
|
+
iprintf("%s\n\n", err ? "error" : "ok");
|
389
|
+
return err ? 1 : 0;
|
390
|
+
}
|
391
|
+
|
392
|
+
|
393
|
+
/* thread the write function */
|
394
|
+
static void *threadwrite(void *targ){
|
395
|
+
TCMDB *mdb = ((TARGCOMBO *)targ)->mdb;
|
396
|
+
TCNDB *ndb = ((TARGCOMBO *)targ)->ndb;
|
397
|
+
int rnum = ((TARGCOMBO *)targ)->rnum;
|
398
|
+
bool rnd = ((TARGCOMBO *)targ)->rnd;
|
399
|
+
int id = ((TARGCOMBO *)targ)->id;
|
400
|
+
double stime = tctime();
|
401
|
+
if(id == 0) iprintf("writing:\n");
|
402
|
+
int base = id * rnum;
|
403
|
+
for(int i = 1; i <= rnum; i++){
|
404
|
+
char buf[RECBUFSIZ];
|
405
|
+
int len = sprintf(buf, "%08d", base + (rnd ? myrand(i) : i));
|
406
|
+
if(ndb){
|
407
|
+
tcndbput(ndb, buf, len, buf, len);
|
408
|
+
} else {
|
409
|
+
tcmdbput(mdb, buf, len, buf, len);
|
410
|
+
}
|
411
|
+
if(id == 0 && rnum > 250 && i % (rnum / 250) == 0){
|
412
|
+
iputchar('.');
|
413
|
+
if(i == rnum || i % (rnum / 10) == 0) iprintf(" (%08d)\n", i);
|
414
|
+
}
|
415
|
+
}
|
416
|
+
if(id == 0) iprintf("time: %.3f\n", tctime() - stime);
|
417
|
+
return NULL;
|
418
|
+
}
|
419
|
+
|
420
|
+
|
421
|
+
/* thread the read function */
|
422
|
+
static void *threadread(void *targ){
|
423
|
+
TCMDB *mdb = ((TARGCOMBO *)targ)->mdb;
|
424
|
+
TCNDB *ndb = ((TARGCOMBO *)targ)->ndb;
|
425
|
+
int rnum = ((TARGCOMBO *)targ)->rnum;
|
426
|
+
bool rnd = ((TARGCOMBO *)targ)->rnd;
|
427
|
+
int id = ((TARGCOMBO *)targ)->id;
|
428
|
+
double stime = tctime();
|
429
|
+
if(id == 0) iprintf("reading:\n");
|
430
|
+
int base = id * rnum;
|
431
|
+
for(int i = 1; i <= rnum; i++){
|
432
|
+
char kbuf[RECBUFSIZ];
|
433
|
+
int ksiz = sprintf(kbuf, "%08d", base + (rnd ? myrand(i) : i));
|
434
|
+
int vsiz;
|
435
|
+
char *vbuf = ndb ? tcndbget(ndb, kbuf, ksiz, &vsiz) : tcmdbget(mdb, kbuf, ksiz, &vsiz);
|
436
|
+
if(vbuf) tcfree(vbuf);
|
437
|
+
if(id == 0 && rnum > 250 && i % (rnum / 250) == 0){
|
438
|
+
iputchar('.');
|
439
|
+
if(i == rnum || i % (rnum / 10) == 0) iprintf(" (%08d)\n", i);
|
440
|
+
}
|
441
|
+
}
|
442
|
+
if(id == 0) iprintf("time: %.3f\n", tctime() - stime);
|
443
|
+
return NULL;
|
444
|
+
}
|
445
|
+
|
446
|
+
|
447
|
+
/* thread the remove function */
|
448
|
+
static void *threadremove(void *targ){
|
449
|
+
TCMDB *mdb = ((TARGCOMBO *)targ)->mdb;
|
450
|
+
TCNDB *ndb = ((TARGCOMBO *)targ)->ndb;
|
451
|
+
int rnum = ((TARGCOMBO *)targ)->rnum;
|
452
|
+
bool rnd = ((TARGCOMBO *)targ)->rnd;
|
453
|
+
int id = ((TARGCOMBO *)targ)->id;
|
454
|
+
double stime = tctime();
|
455
|
+
if(id == 0) iprintf("removing:\n");
|
456
|
+
int base = id * rnum;
|
457
|
+
for(int i = 1; i <= rnum; i++){
|
458
|
+
char buf[RECBUFSIZ];
|
459
|
+
int len = sprintf(buf, "%08d", base + (rnd ? myrand(i) : i));
|
460
|
+
if(ndb){
|
461
|
+
tcndbout(ndb, buf, len);
|
462
|
+
} else {
|
463
|
+
tcmdbout(mdb, buf, len);
|
464
|
+
}
|
465
|
+
if(id == 0 && rnum > 250 && i % (rnum / 250) == 0){
|
466
|
+
iputchar('.');
|
467
|
+
if(i == rnum || i % (rnum / 10) == 0) iprintf(" (%08d)\n", i);
|
468
|
+
}
|
469
|
+
}
|
470
|
+
if(id == 0) iprintf("time: %.3f\n", tctime() - stime);
|
471
|
+
return NULL;
|
472
|
+
}
|
473
|
+
|
474
|
+
|
475
|
+
/* thread the typical function */
|
476
|
+
static void *threadtypical(void *targ){
|
477
|
+
TCMDB *mdb = ((TARGTYPICAL *)targ)->mdb;
|
478
|
+
TCNDB *ndb = ((TARGCOMBO *)targ)->ndb;
|
479
|
+
int rnum = ((TARGTYPICAL *)targ)->rnum;
|
480
|
+
bool nc = ((TARGTYPICAL *)targ)->nc;
|
481
|
+
int rratio = ((TARGTYPICAL *)targ)->rratio;
|
482
|
+
int id = ((TARGTYPICAL *)targ)->id;
|
483
|
+
bool err = false;
|
484
|
+
TCMAP *map = (!nc && id == 0) ? tcmapnew2(rnum + 1) : NULL;
|
485
|
+
int base = id * rnum;
|
486
|
+
int mrange = tclmax(50 + rratio, 100);
|
487
|
+
for(int i = 1; !err && i <= rnum; i++){
|
488
|
+
char buf[RECBUFSIZ];
|
489
|
+
int len = sprintf(buf, "%08d", base + myrandnd(i));
|
490
|
+
int rnd = myrand(mrange);
|
491
|
+
if(rnd < 10){
|
492
|
+
if(ndb){
|
493
|
+
tcndbput(ndb, buf, len, buf, len);
|
494
|
+
} else {
|
495
|
+
tcmdbput(mdb, buf, len, buf, len);
|
496
|
+
}
|
497
|
+
if(map) tcmapput(map, buf, len, buf, len);
|
498
|
+
} else if(rnd < 15){
|
499
|
+
if(ndb){
|
500
|
+
tcndbputkeep(ndb, buf, len, buf, len);
|
501
|
+
} else {
|
502
|
+
tcmdbputkeep(mdb, buf, len, buf, len);
|
503
|
+
}
|
504
|
+
if(map) tcmapputkeep(map, buf, len, buf, len);
|
505
|
+
} else if(rnd < 20){
|
506
|
+
if(ndb){
|
507
|
+
tcndbputcat(ndb, buf, len, buf, len);
|
508
|
+
} else {
|
509
|
+
tcmdbputcat(mdb, buf, len, buf, len);
|
510
|
+
}
|
511
|
+
if(map) tcmapputcat(map, buf, len, buf, len);
|
512
|
+
} else if(rnd < 30){
|
513
|
+
if(ndb){
|
514
|
+
tcndbout(ndb, buf, len);
|
515
|
+
} else {
|
516
|
+
tcmdbout(mdb, buf, len);
|
517
|
+
}
|
518
|
+
if(map) tcmapout(map, buf, len);
|
519
|
+
} else if(rnd < 31){
|
520
|
+
if(myrand(10) == 0) tcmdbiterinit(mdb);
|
521
|
+
for(int j = 0; !err && j < 10; j++){
|
522
|
+
int ksiz;
|
523
|
+
char *kbuf = ndb ? tcndbiternext(ndb, &ksiz) : tcmdbiternext(mdb, &ksiz);
|
524
|
+
if(kbuf) tcfree(kbuf);
|
525
|
+
}
|
526
|
+
} else {
|
527
|
+
int vsiz;
|
528
|
+
char *vbuf = ndb ? tcndbget(ndb, buf, len, &vsiz) : tcmdbget(mdb, buf, len, &vsiz);
|
529
|
+
if(vbuf){
|
530
|
+
if(map){
|
531
|
+
int msiz;
|
532
|
+
const char *mbuf = tcmapget(map, buf, len, &msiz);
|
533
|
+
if(msiz != vsiz || memcmp(mbuf, vbuf, vsiz)){
|
534
|
+
eprint(__LINE__, "(validation)");
|
535
|
+
err = true;
|
536
|
+
}
|
537
|
+
}
|
538
|
+
tcfree(vbuf);
|
539
|
+
} else {
|
540
|
+
if(map && tcmapget(map, buf, len, &vsiz)){
|
541
|
+
eprint(__LINE__, "(validation)");
|
542
|
+
err = true;
|
543
|
+
}
|
544
|
+
}
|
545
|
+
}
|
546
|
+
if(id == 0 && rnum > 250 && i % (rnum / 250) == 0){
|
547
|
+
iputchar('.');
|
548
|
+
if(i == rnum || i % (rnum / 10) == 0) iprintf(" (%08d)\n", i);
|
549
|
+
}
|
550
|
+
}
|
551
|
+
if(map){
|
552
|
+
tcmapiterinit(map);
|
553
|
+
int ksiz;
|
554
|
+
const char *kbuf;
|
555
|
+
while(!err && (kbuf = tcmapiternext(map, &ksiz)) != NULL){
|
556
|
+
int vsiz;
|
557
|
+
char *vbuf = ndb ? tcndbget(ndb, kbuf, ksiz, &vsiz) : tcmdbget(mdb, kbuf, ksiz, &vsiz);
|
558
|
+
if(vbuf){
|
559
|
+
int msiz;
|
560
|
+
const char *mbuf = tcmapget(map, kbuf, ksiz, &msiz);
|
561
|
+
if(!mbuf || msiz != vsiz || memcmp(mbuf, vbuf, vsiz)){
|
562
|
+
eprint(__LINE__, "(validation)");
|
563
|
+
err = true;
|
564
|
+
}
|
565
|
+
tcfree(vbuf);
|
566
|
+
} else {
|
567
|
+
eprint(__LINE__, "(validation)");
|
568
|
+
err = true;
|
569
|
+
}
|
570
|
+
}
|
571
|
+
tcmapdel(map);
|
572
|
+
}
|
573
|
+
return err ? "error" : NULL;
|
574
|
+
}
|
575
|
+
|
576
|
+
|
577
|
+
|
578
|
+
// END OF FILE
|