Fails when writing
Code as following
100_000.times { |x| db.put x.to_s, "abcdefghijklmnopqrstuvwxyz"}
Error:
.../lib/leveldb/leveldb.so: undefined symbol: _ZN6snappy19MaxCompressedLengthEj
when more than about 79000 keys.
DB folder shows: -rw-r--r-- 1 root root 4178034 2012-04-18 07:58 000003.log -rw-r--r-- 1 root root 65536 2012-04-18 07:58 000004.log -rw-r--r-- 1 root root 0 2012-04-18 07:58 000005.sst -rw-r--r-- 1 root root 16 2012-04-18 07:58 CURRENT -rw-r--r-- 1 root root 0 2012-04-18 07:58 LOCK -rw-r--r-- 1 root root 115 2012-04-18 07:58 LOG -rw-r--r-- 1 root root 65536 2012-04-18 07:58 MANIFEST-000002
Why ???
I guess the reason is:
the default write_buffer_size is 4MB, so when the Memory flush to disk, LevelDB call snappy function, but the LevelDB-ruby did not include the snappy lib.
It solved.
- download leveldb-ruby source code.
- modify the line12 of ./ext/leveldb/extconf.rb
from
$LIBS << " -L../../leveldb -lleveldb"to$LIBS << " -L../../leveldb -lleveldb -lsnappy" - run
# rake -T spec# ruby setup.rb# cd /usr/local/lib/site-ruby/1.9.1/i686-linux/# cp leveldb.so ../leveldb/ - copy
snappy.so.1to above leveldb path. - try the test code.
Hello,
Thanks for the report. But I can't reproduce this. What version of the leveldb-ruby gem do you have installed?
The gem version is 5975fd7
My test enviroment is UNBUNTU 11.10
Can you try the latest master? I've updated to the latest leveldb code and this solved the snappy problem for some people (e.g. https://github.com/wmorgan/leveldb-ruby/pull/20)
1. Try the new rubyforge gem
I tried the :
gem install level-ruby
again, something make me confused, the ruby report
in put: wrong argument type LevelDB::DB (expected Data) (TypeError)
but your test file works.
2. Try the latest master, and build it manually
commands:
rake gem setup.ruby cp ./i686-linux/leveldb.so ./leveldb/
.../lib/leveldb/leveldb.so: undefined symbol: _ZN6snappy19MaxCompressedLengthEj
It seems it does not work, I guess the g++ command need -lsnappy switch in Makefile of google leveldb source files.
I don't know if you're still experiencing this problem, but I solved this by just remove snappy/leveldb from my package manager, then reinstalled the gem.