scylladb / scylla-tools-java

Apache Cassandra, supplying tools for Scylla
Apache License 2.0
53 stars 84 forks source link

[aarch64] sstableloader fails when snappy compression is used #347

Open fruch opened 10 months ago

fruch commented 10 months ago

when using sstableloader with snappy compression on top of arm (aarch64) platform it fails like the following:

WARN  18:56:50,815 Cannot initialize native Snappy library. Compression on new sstables will be disabled.
  org.apache.cassandra.exceptions.ConfigurationException: SnappyCompressor.create() threw an error: java.lang.NoClassDefFoundError Could not initialize class org.xerial.snappy.Snappy
    at org.apache.cassandra.schema.CompressionParams.createCompressor(CompressionParams.java:273)
    at org.apache.cassandra.schema.CompressionParams.<init>(CompressionParams.java:164)
    at org.apache.cassandra.schema.CompressionParams.fromMap(CompressionParams.java:105)
    at org.apache.cassandra.cql3.statements.TableAttributes.build(TableAttributes.java:107)
    at org.apache.cassandra.cql3.statements.TableAttributes.validate(TableAttributes.java:55)
    at org.apache.cassandra.cql3.statements.CFProperties.validate(CFProperties.java:35)
    at org.apache.cassandra.cql3.statements.CreateTableStatement$RawStatement.prepare(CreateTableStatement.java:216)
    at com.scylladb.tools.BulkLoader$CQLClient.getCFMetaData(BulkLoader.java:701)
    at com.scylladb.tools.BulkLoader.process(BulkLoader.java:1571)
    at com.scylladb.tools.BulkLoader.lambda$main$1(BulkLoader.java:1369)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
  Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.apache.cassandra.schema.CompressionParams.createCompressor(CompressionParams.java:245)
    ... 14 more
  Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy
    at org.apache.cassandra.io.compress.SnappyCompressor.create(SnappyCompressor.java:48)
    ... 19 more
  org.apache.cassandra.exceptions.ConfigurationException: SnappyCompressor.create() threw an error: java.lang.NoClassDefFoundError Could not initialize class org.xerial.snappy.Snappy
    at org.apache.cassandra.schema.CompressionParams.createCompressor(CompressionParams.java:273)
    at org.apache.cassandra.schema.CompressionParams.<init>(CompressionParams.java:164)
    at org.apache.cassandra.schema.CompressionParams.fromMap(CompressionParams.java:105)
    at org.apache.cassandra.cql3.statements.TableAttributes.build(TableAttributes.java:107)
    at org.apache.cassandra.cql3.statements.TableAttributes.validate(TableAttributes.java:55)
    at org.apache.cassandra.cql3.statements.CFProperties.validate(CFProperties.java:35)
    at org.apache.cassandra.cql3.statements.CreateTableStatement$RawStatement.prepare(CreateTableStatement.java:216)
    at com.scylladb.tools.BulkLoader$CQLClient.getCFMetaData(BulkLoader.java:701)
    at com.scylladb.tools.BulkLoader.process(BulkLoader.java:1571)
    at com.scylladb.tools.BulkLoader.lambda$main$1(BulkLoader.java:1369)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
  Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.apache.cassandra.schema.CompressionParams.createCompressor(CompressionParams.java:245)
    ... 14 more
  Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy
    at org.apache.cassandra.io.compress.SnappyCompressor.create(SnappyCompressor.java:48)
    ... 19 more

this is the table that was used: CREATE COLUMNFAMILY cf (key varchar, c varchar, v varchar, PRIMARY KEY(key, c)) WITH compression = { 'sstable_compression': 'SnappyCompressor' }

Logs

https://jenkins.scylladb.com/view/staging/job/scylla-staging/job/fruch/job/arm-based-dtest-job/7/testReport/junit/sstable_generation_loading_test/TestSSTableGenerationAndLoading/Run_Dtest_Parallel_Cloud_Machines___FullDtest___full_split007___test_sstableloader_compression_None_Snappy_/

fruch commented 10 months ago

look like the version we are using of java-snappy is quite old and doesn't support arm yet very well

mykaul commented 10 months ago

I wouldn't be surprised - and we need to update it as well due to some other issues. We are using: https://github.com/scylladb/scylla-tools-java/blob/3c09ab97a9e39243d46973d376bd1ae75abac582/build.xml#L363

which is from 2015 or so...

Latest is https://github.com/xerial/snappy-java/releases/tag/v1.1.10.5 I just hope there are no interface changes.