Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Fails when writing #18

Open
xumingyong opened this Issue · 7 comments

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
Something went wrong with that request. Please try again.