Is there a way to change the sstable_compression for system tables? I am
trying to deploy Cassandra 1.2.2 on a platform with IBM Java and 32 bit
arch where the snappy-java native library fails to load. The error I get
looks like,
ERROR [SSTableBatchOpen:1] 2013-05-02 14:42:42,485
CassandraDaemon.java (line 132) Exception in thread
Thread[SSTableBatchOpen:1,5,main]
java.lang.RuntimeException: Cannot create CompressionParameters for
stored parameters
at
org.apache.cassandra.io.compress.CompressionMetadata.<init>(CompressionMetadata.java:99)
at
org.apache.cassandra.io.compress.CompressionMetadata.create(CompressionMetadata.java:63)
at
org.apache.cassandra.io.util.CompressedSegmentedFile$Builder.complete(CompressedSegmentedFile.java:51)
at
org.apache.cassandra.io.sstable.SSTableReader.load(SSTableReader.java:404)
at
org.apache.cassandra.io.sstable.SSTableReader.open(SSTableReader.java:198)
at
org.apache.cassandra.io.sstable.SSTableReader.open(SSTableReader.java:149)
at
org.apache.cassandra.io.sstable.SSTableReader$1.run(SSTableReader.java:238)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:482)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:345)
at java.util.concurrent.FutureTask.run(FutureTask.java:177)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1156)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:626)
at java.lang.Thread.run(Thread.java:780)
Caused by: org.apache.cassandra.exceptions.ConfigurationException:
SnappyCompressor.create() threw an error:
java.lang.NoClassDefFoundError org.xerial.snappy.Snappy
(initialization failure)
at
org.apache.cassandra.io.compress.CompressionParameters.createCompressor(CompressionParameters.java:179)
at
org.apache.cassandra.io.compress.CompressionParameters.<init>(CompressionParameters.java:71)
at
org.apache.cassandra.io.compress.CompressionMetadata.<init>(CompressionMetadata.java:95)
... 12 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:613)
at
org.apache.cassandra.io.compress.CompressionParameters.createCompressor(CompressionParameters.java:156)
... 14 more
Caused by: java.lang.NoClassDefFoundError: org.xerial.snappy.Snappy
(initialization failure)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:176)
at
org.apache.cassandra.io.compress.SnappyCompressor.create(SnappyCompressor.java:45)
... 19 more
Caused by: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] null
at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:229)
at org.xerial.snappy.Snappy.<clinit>(Snappy.java:44)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:236)
at
org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:150)
at
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:366)
at
org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:409)
I am not able to change sstable_compression for system tables from either
cassandra-cli or from cqlsh. I should point out that the DataStax docs do
state that system tables cannot be altered. I was wondering though if there
might be another way to do so.
Simply not using IBM Java is not an option for me. There is already an
issue[1] open with the snappy-java project that I think will address this
issue; however, that would involve packaging a new version of snappy-java
with Cassandra (when the fix is available). I would like to better
understand the impact of switching to a patched and/or upgraded version of
snappy-java before making that change.
[1] https://github.com/xerial/snappy-java/issues/34
Thanks
- John