Fails when writing #18

Open
xumingyong opened this Issue Apr 18, 2012 · 7 comments

Projects

None yet

3 participants

@xumingyong

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 ???

@xumingyong

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.

@xumingyong

It solved.

  1. download leveldb-ruby source code.

  2. modify the line12 of ./ext/leveldb/extconf.rb
    from
    $LIBS << " -L../../leveldb -lleveldb"
    to
    $LIBS << " -L../../leveldb -lleveldb -lsnappy"

  3. run
    # rake -T spec
    # ruby setup.rb
    # cd /usr/local/lib/site-ruby/1.9.1/i686-linux/
    # cp leveldb.so ../leveldb/

  4. copy snappy.so.1 to above leveldb path.

  5. try the test code.

@wmorgan
Owner

Hello,

Thanks for the report. But I can't reproduce this. What version of the leveldb-ruby gem do you have installed?

@xumingyong

The gem version is 5975fd7

My test enviroment is UNBUNTU 11.10

@wmorgan
Owner

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. #20)

@xumingyong

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.

@emnl

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment