Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-26945

RM Kafka client using compression throws "NoClassDefFoundError: sun/misc/Unsafe" on Windows

    XMLWordPrintable

Details

    Description

      org.wildfly.test.integration.microprofile.reactive.messaging.kafka.compression.ReactiveMessagingKafkaCompressionTestCase#test fails on Windows with the following underlying message:

      ERROR [org.apache.kafka.common.utils.KafkaThread] (kafka-producer-network-thread | kafka-producer-to-kafka-snappy) Uncaught exception in thread 'kafka-producer-network-thread | kafka-producer-to-kafka-snappy':: java.lang.NoClassDefFoundError: sun/misc/Unsafe
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.PureJavaSnappy.rawCompress(PureJavaSnappy.java:120)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.rawCompress(Snappy.java:450)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.compress(Snappy.java:123)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.compressInput(SnappyOutputStream.java:380)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.flush(SnappyOutputStream.java:334)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.close(SnappyOutputStream.java:419)
      	at java.base/java.io.FilterOutputStream.close(FilterOutputStream.java:191)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.common.record.MemoryRecordsBuilder.closeForRecordAppends(MemoryRecordsBuilder.java:314)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.common.record.MemoryRecordsBuilder.close(MemoryRecordsBuilder.java:349)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.ProducerBatch.close(ProducerBatch.java:453)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.RecordAccumulator.drainBatchesForOneNode(RecordAccumulator.java:904)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.RecordAccumulator.drain(RecordAccumulator.java:937)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.Sender.sendProducerData(Sender.java:399)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:343)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:247)
      	at java.base/java.lang.Thread.run(Thread.java:829)
      	Suppressed: java.lang.NoClassDefFoundError: sun/misc/Unsafe
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.PureJavaSnappy.rawCompress(PureJavaSnappy.java:120)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.rawCompress(Snappy.java:450)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.compress(Snappy.java:123)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.compressInput(SnappyOutputStream.java:380)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.flush(SnappyOutputStream.java:334)
      		at java.base/java.io.DataOutputStream.flush(DataOutputStream.java:123)
      		at java.base/java.io.FilterOutputStream.close(FilterOutputStream.java:182)
      		... 9 more
      	Caused by: java.lang.ClassNotFoundException: sun.misc.Unsafe from [Module "org.xerial.snappy.snappy-java" from local module loader @79145d5a (finder: local module finder @1f2f9244 (roots: C:\...\jboss-dist\modules,C:\...\jboss-dist\modules\system\layers\microprofile,C:\...\jboss-dist\modules\system\layers\base,C:\...\testsuite\integration\microprofile\target\modules))]
      		at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:200)
      		at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:408)
      		at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:396)
      		at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:115)
      		... 16 more
      

      Adding <dependencies><module name="jdk.unsupported"/></dependencies> to modules/system/layers/microprofile/org/xerial/snappy/snappy-java/main/module.xml helps for Java 11. For Java 17 a new error is thrown:

      ERROR [org.apache.kafka.common.utils.KafkaThread] (kafka-producer-network-thread | kafka-producer-to-kafka-snappy) Uncaught exception in thread 'kafka-producer-network-thread | kafka-producer-to-kafka-snappy':: java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.pure.UnsafeUtil
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.SnappyRawCompressor.writeUncompressedLength(SnappyRawCompressor.java:405)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.SnappyRawCompressor.compress(SnappyRawCompressor.java:111)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.PureJavaSnappy.rawCompress(PureJavaSnappy.java:128)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.rawCompress(Snappy.java:450)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.compress(Snappy.java:123)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.compressInput(SnappyOutputStream.java:380)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.flush(SnappyOutputStream.java:334)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.close(SnappyOutputStream.java:419)
      	at java.base/java.io.FilterOutputStream.close(FilterOutputStream.java:191)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.common.record.MemoryRecordsBuilder.closeForRecordAppends(MemoryRecordsBuilder.java:314)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.common.record.MemoryRecordsBuilder.close(MemoryRecordsBuilder.java:349)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.ProducerBatch.close(ProducerBatch.java:453)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.RecordAccumulator.drainBatchesForOneNode(RecordAccumulator.java:904)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.RecordAccumulator.drain(RecordAccumulator.java:937)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.Sender.sendProducerData(Sender.java:399)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:343)
      	at org.apache.kafka.client@3.6.0.redhat-00005//org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:247)
      	at java.base/java.lang.Thread.run(Thread.java:842)
      	Suppressed: org.xerial.snappy.SnappyError: [UNSUPPORTED_PLATFORM] pure-java snappy requires access to java.nio.Buffer raw address field
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.UnsafeUtil.<clinit>(UnsafeUtil.java:49)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.SnappyRawCompressor.writeUncompressedLength(SnappyRawCompressor.java:405)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.SnappyRawCompressor.compress(SnappyRawCompressor.java:111)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.PureJavaSnappy.rawCompress(PureJavaSnappy.java:128)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.rawCompress(Snappy.java:450)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.compress(Snappy.java:123)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.compressInput(SnappyOutputStream.java:380)
      		at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.flush(SnappyOutputStream.java:334)
      		at java.base/java.io.DataOutputStream.flush(DataOutputStream.java:128)
      		at java.base/java.io.FilterOutputStream.close(FilterOutputStream.java:182)
      		... 9 more
      Caused by: java.lang.ExceptionInInitializerError: Exception org.xerial.snappy.SnappyError: pure-java snappy requires access to java.nio.Buffer raw address field [in thread "kafka-producer-network-thread | kafka-producer-to-kafka-snappy"]
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.UnsafeUtil.<clinit>(UnsafeUtil.java:49)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.SnappyRawCompressor.writeUncompressedLength(SnappyRawCompressor.java:405)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.SnappyRawCompressor.compress(SnappyRawCompressor.java:111)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.pure.PureJavaSnappy.rawCompress(PureJavaSnappy.java:128)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.rawCompress(Snappy.java:450)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.Snappy.compress(Snappy.java:123)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.compressInput(SnappyOutputStream.java:380)
      	at org.xerial.snappy.snappy-java//org.xerial.snappy.SnappyOutputStream.flush(SnappyOutputStream.java:334)
      	at java.base/java.io.DataOutputStream.flush(DataOutputStream.java:128)
      	at java.base/java.io.FilterOutputStream.close(FilterOutputStream.java:182)
      	... 9 more
      

      The failure is not visible in WildFly CI, seems specific for XP 5 (test release 2024-04-10).

      Marking this as Critical, the functionality is new in XP 5, introduced by JBEAP-25442.

      Attachments

        Issue Links

          Activity

            People

              kkhan1@redhat.com Kabir Khan
              okotek@redhat.com Ondrej Kotek
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: