Running under JDK 11 prints stack trace

I am getting following error traces (logged at DEBUG level) while starting my Java app. My app uses

  • JDK 11
  • Java Client SDK 2.7.9
  • Core-IO 1.7.9
  • DCP Client 0.24.0

Looks like the netty version used by SDK (in shodow mode) is not JDK11 compatible.

Is there a fix for it now?

2019-08-25T22:54:45.582|main|DEBUG|com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0# direct buffer constructor: unavailable
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
    at com.couchbase.client.deps.io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0$4.run(PlatformDependent0.java:220) ~[core-io-1.7.9.jar!/:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:214) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:203) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:74) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.Signal.<clinit>(Signal.java:31) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.concurrent.DefaultPromise.<clinit>(DefaultPromise.java:43) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:35) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:50) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:70) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:65) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:56) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.core.env.DefaultCoreEnvironment.<init>(DefaultCoreEnvironment.java:435) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.java.env.DefaultCouchbaseEnvironment.<init>(DefaultCouchbaseEnvironment.java:121) ~[java-client-2.7.9.jar!/:?]
    at com.couchbase.client.java.env.DefaultCouchbaseEnvironment.<init>(DefaultCouchbaseEnvironment.java:40) ~[java-client-2.7.9.jar!/:?]
    at com.couchbase.client.java.env.DefaultCouchbaseEnvironment$Builder.build(DefaultCouchbaseEnvironment.java:251) ~[java-client-2.7.9.jar!/:?]

2019-08-25T22:54:45.583|main|DEBUG|com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0# java.nio.Bits.unaligned: unavailable true
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
    at com.couchbase.client.deps.io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0$5.run(PlatformDependent0.java:268) ~[core-io-1.7.9.jar!/:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:261) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:203) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:74) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.Signal.<clinit>(Signal.java:31) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.concurrent.DefaultPromise.<clinit>(DefaultPromise.java:43) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:35) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:50) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:70) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:65) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:56) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.core.env.DefaultCoreEnvironment.<init>(DefaultCoreEnvironment.java:435) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.java.env.DefaultCouchbaseEnvironment.<init>(DefaultCouchbaseEnvironment.java:121) ~[java-client-2.7.9.jar!/:?]
    at com.couchbase.client.java.env.DefaultCouchbaseEnvironment.<init>(DefaultCouchbaseEnvironment.java:40) ~[java-client-2.7.9.jar!/:?]
    at com.couchbase.client.java.env.DefaultCouchbaseEnvironment$Builder.build(DefaultCouchbaseEnvironment.java:251) ~[java-client-2.7.9.jar!/:?]

2019-08-25T22:54:45.584|main|DEBUG|com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0# jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
java.lang.IllegalAccessException: class com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0$6 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does n
ot export jdk.internal.misc to unnamed module @5d28bcd5
    at jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:361) ~[?:?]
    at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:591) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:558) ~[?:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0$6.run(PlatformDependent0.java:311) ~[core-io-1.7.9.jar!/:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:302) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:203) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:74) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.Signal.<clinit>(Signal.java:31) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.concurrent.DefaultPromise.<clinit>(DefaultPromise.java:43) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:35) ~[core-io-1.7.9.jar!/:?]
    at com.couchbase.client.deps.io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:50) ~[core-io-1.7.9.jar!/:?]

Hi @niranjan.nanda,

You’re right, the Netty version used by SDK 2.7.9 is pretty old at this point, and it’s not optimized for JDK 11. It still functions properly on that platform though. The debug log messages are just saying it can’t use certain performance optimizations.

The software components you mentioned are all tested against OpenJDK 11 (as well as other versions) and we haven’t seen any correctness issues related to JDK 11, but I agree the debug messages don’t look good.

Ultimately the fix will be to upgrade the Netty version, which we are doing for SDK 3. In the mean time you can safely ignore those debug log messages, or suppress them by setting the Java system property:

-Dcom.couchbase.client.core.deps.io.netty.noUnsafe=true

Thanks,
David N