Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fails when writing #18

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

Fails when writing #18

xumingyong opened this issue Apr 18, 2012 · 7 comments

Comments

@xumingyong
Copy link

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
Copy link
Author

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
Copy link
Author

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
Copy link
Owner

wmorgan commented Apr 20, 2012

Hello,

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

@xumingyong
Copy link
Author

The gem version is 5975fd7

My test enviroment is UNBUNTU 11.10

@wmorgan
Copy link
Owner

wmorgan commented Apr 22, 2012

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
Copy link
Author

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
Copy link

emnl commented Nov 4, 2012

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
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants