client-java icon indicating copy to clipboard operation
client-java copied to clipboard

`tikv-client-java:3.2.0` can not build GrpcSslContexts

Open Daemonxiao opened this issue 3 years ago • 2 comments

Bug Report

1. Describe the bug

When I want to enable TLS, it reports a bug. tikv-client-java:3.2.0 can not build GrpcSslContexts.

My PC configuration:

  • Oracle JDK 1.8
  • Ubuntu LTS 20

2. Minimal reproduce step (Required)

  1. choose v3.2.0
           <dependency>
            <groupId>org.tikv</groupId>
            <artifactId>tikv-client-java</artifactId>
            <version>3.2.0</version>
        </dependency>
  1. setTLS enable
public class ClientTiKV {
    public static void main(String[] args) {
        // You MUST create a raw configuration if you are using RawKVClient.
        TiConfiguration conf = TiConfiguration.createRawDefault("127.0.0.1:2379");
        conf.setTlsEnable(true);
        conf.setKeyCertChainFile("client.cert");
        conf.setTrustCertCollectionFile("root.cert");
        conf.setKeyFile("client.key");
        TiSession session = TiSession.create(conf);
    }
}

3. What did you see instead (Required)

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
May 09, 2022 9:29:14 PM org.tikv.shade.io.grpc.netty.GrpcSslContexts defaultSslProvider
INFO: Java 9 ALPN API unavailable (this may be normal)
May 09, 2022 9:29:14 PM org.tikv.shade.io.grpc.netty.GrpcSslContexts defaultSslProvider
INFO: netty-tcnative unavailable (this may be normal)
java.lang.IllegalArgumentException: Failed to load any of the given libraries: [netty_tcnative_linux_x86_64, netty_tcnative_linux_x86_64_fedora, netty_tcnative_x86_64, netty_tcnative]
	at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:104)
	at org.tikv.shade.io.netty.handler.ssl.OpenSsl.loadTcNative(OpenSsl.java:590)
	at org.tikv.shade.io.netty.handler.ssl.OpenSsl.<clinit>(OpenSsl.java:136)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.defaultSslProvider(GrpcSslContexts.java:230)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:146)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:95)
	at org.tikv.common.util.ChannelFactory.getSslContextBuilder(ChannelFactory.java:119)
	at org.tikv.common.util.ChannelFactory.<init>(ChannelFactory.java:72)
	at org.tikv.common.TiSession.<init>(TiSession.java:130)
	at org.tikv.common.TiSession.create(TiSession.java:230)
	at ClientTiKV.main(ClientTiKV.java:16)
	Suppressed: java.lang.UnsatisfiedLinkError: could not load a native library: org_tikv_shade_netty_tcnative_linux_x86_64
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:226)
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:96)
		... 10 more
	Caused by: java.io.FileNotFoundException: META-INF/native/liborg_tikv_shade_netty_tcnative_linux_x86_64.so
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:175)
		... 11 more
		Suppressed: java.lang.UnsatisfiedLinkError: no org_tikv_shade_netty_tcnative_linux_x86_64 in java.library.path
			at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
			at java.lang.Runtime.loadLibrary0(Runtime.java:870)
			at java.lang.System.loadLibrary(System.java:1122)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:351)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:136)
			... 11 more
			Suppressed: java.lang.UnsatisfiedLinkError: no org_tikv_shade_netty_tcnative_linux_x86_64 in java.library.path
				at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
				at java.lang.Runtime.loadLibrary0(Runtime.java:870)
				at java.lang.System.loadLibrary(System.java:1122)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
				at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
				at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
				at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
				at java.lang.reflect.Method.invoke(Method.java:497)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:371)
				at java.security.AccessController.doPrivileged(Native Method)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:363)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:341)
				... 12 more
	Suppressed: java.lang.UnsatisfiedLinkError: could not load a native library: org_tikv_shade_netty_tcnative_linux_x86_64_fedora
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:226)
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:96)
		... 10 more
	Caused by: java.io.FileNotFoundException: META-INF/native/liborg_tikv_shade_netty_tcnative_linux_x86_64_fedora.so
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:175)
		... 11 more
		Suppressed: java.lang.UnsatisfiedLinkError: no org_tikv_shade_netty_tcnative_linux_x86_64_fedora in java.library.path
			at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
			at java.lang.Runtime.loadLibrary0(Runtime.java:870)
			at java.lang.System.loadLibrary(System.java:1122)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:351)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:136)
			... 11 more
			Suppressed: java.lang.UnsatisfiedLinkError: no org_tikv_shade_netty_tcnative_linux_x86_64_fedora in java.library.path
				at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
				at java.lang.Runtime.loadLibrary0(Runtime.java:870)
				at java.lang.System.loadLibrary(System.java:1122)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
				at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
				at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
				at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
				at java.lang.reflect.Method.invoke(Method.java:497)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:371)
				at java.security.AccessController.doPrivileged(Native Method)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:363)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:341)
				... 12 more
	Suppressed: java.lang.UnsatisfiedLinkError: could not load a native library: org_tikv_shade_netty_tcnative_x86_64
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:226)
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:96)
		... 10 more
	Caused by: java.io.FileNotFoundException: META-INF/native/liborg_tikv_shade_netty_tcnative_x86_64.so
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:175)
		... 11 more
		Suppressed: java.lang.UnsatisfiedLinkError: no org_tikv_shade_netty_tcnative_x86_64 in java.library.path
			at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
			at java.lang.Runtime.loadLibrary0(Runtime.java:870)
			at java.lang.System.loadLibrary(System.java:1122)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:351)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:136)
			... 11 more
			Suppressed: java.lang.UnsatisfiedLinkError: no org_tikv_shade_netty_tcnative_x86_64 in java.library.path
				at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
				at java.lang.Runtime.loadLibrary0(Runtime.java:870)
				at java.lang.System.loadLibrary(System.java:1122)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
				at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
				at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
				at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
				at java.lang.reflect.Method.invoke(Method.java:497)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:371)
				at java.security.AccessController.doPrivileged(Native Method)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:363)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:341)
				... 12 more
	Suppressed: java.lang.UnsatisfiedLinkError: could not load a native library: org_tikv_shade_netty_tcnative
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:226)
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:96)
		... 10 more
	Caused by: java.io.FileNotFoundException: META-INF/native/liborg_tikv_shade_netty_tcnative.so
		at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:175)
		... 11 more
		Suppressed: java.lang.UnsatisfiedLinkError: no org_tikv_shade_netty_tcnative in java.library.path
			at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
			at java.lang.Runtime.loadLibrary0(Runtime.java:870)
			at java.lang.System.loadLibrary(System.java:1122)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:351)
			at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:136)
			... 11 more
			Suppressed: java.lang.UnsatisfiedLinkError: no org_tikv_shade_netty_tcnative in java.library.path
				at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1864)
				at java.lang.Runtime.loadLibrary0(Runtime.java:870)
				at java.lang.System.loadLibrary(System.java:1122)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
				at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
				at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
				at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
				at java.lang.reflect.Method.invoke(Method.java:497)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:371)
				at java.security.AccessController.doPrivileged(Native Method)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:363)
				at org.tikv.shade.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:341)
				... 12 more

May 09, 2022 9:29:14 PM org.tikv.shade.io.grpc.netty.GrpcSslContexts defaultSslProvider
INFO: Conscrypt not found (this may be normal)
java.lang.ClassNotFoundException: org.conscrypt.Conscrypt
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at org.tikv.shade.io.grpc.internal.ConscryptLoader.newProvider(ConscryptLoader.java:72)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts$ConscryptHolder.<clinit>(GrpcSslContexts.java:295)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.findJdkProvider(GrpcSslContexts.java:268)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.defaultSslProvider(GrpcSslContexts.java:234)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:146)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:95)
	at org.tikv.common.util.ChannelFactory.getSslContextBuilder(ChannelFactory.java:119)
	at org.tikv.common.util.ChannelFactory.<init>(ChannelFactory.java:72)
	at org.tikv.common.TiSession.<init>(TiSession.java:130)
	at org.tikv.common.TiSession.create(TiSession.java:230)
	at ClientTiKV.main(ClientTiKV.java:16)

May 09, 2022 9:29:14 PM org.tikv.shade.io.grpc.netty.GrpcSslContexts defaultSslProvider
INFO: Jetty ALPN unavailable (this may be normal)
java.lang.ClassNotFoundException: org/eclipse/jetty/alpn/ALPN
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at org.tikv.shade.io.grpc.netty.JettyTlsUtil.isJettyAlpnConfigured(JettyTlsUtil.java:64)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.findJdkProvider(GrpcSslContexts.java:254)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.defaultSslProvider(GrpcSslContexts.java:234)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:146)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:95)
	at org.tikv.common.util.ChannelFactory.getSslContextBuilder(ChannelFactory.java:119)
	at org.tikv.common.util.ChannelFactory.<init>(ChannelFactory.java:72)
	at org.tikv.common.TiSession.<init>(TiSession.java:130)
	at org.tikv.common.TiSession.create(TiSession.java:230)
	at ClientTiKV.main(ClientTiKV.java:16)

Exception in thread "main" java.lang.IllegalStateException: Could not find TLS ALPN provider; no working netty-tcnative, Conscrypt, or Jetty NPN/ALPN available
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.defaultSslProvider(GrpcSslContexts.java:246)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:146)
	at org.tikv.shade.io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:95)
	at org.tikv.common.util.ChannelFactory.getSslContextBuilder(ChannelFactory.java:119)
	at org.tikv.common.util.ChannelFactory.<init>(ChannelFactory.java:72)
	at org.tikv.common.TiSession.<init>(TiSession.java:130)
	at org.tikv.common.TiSession.create(TiSession.java:230)
	at ClientTiKV.main(ClientTiKV.java:16)
Disconnected from the target VM, address: '127.0.0.1:39051', transport: 'socket'

Process finished with exit code 1

4. What did you expect to see? (Required)

no exception.

5. What are your Java Client and TiKV versions? (Required)

  • Client Java: 3.2.0
  • TiKV:6.0.0

Daemonxiao avatar May 09 '22 13:05 Daemonxiao

When I change my JDK to other versions, such as Open JDK 1.8 or Oracle JDK 17, this problem never happens. So I think, maybe Oracle JDK 1.8 lacks some critical anything, like TLS ALPN provider and so on. When these lacking, io.netty needs a native dynamic library that was not shaded by maven. To solve it, I rename four dynamic libraries for clients to find them. #602

Daemonxiao avatar May 19 '22 10:05 Daemonxiao

This issue is stale because it has been open 30 days with no activity.

github-actions[bot] avatar Jun 19 '22 00:06 github-actions[bot]