k8ssandra / management-api-for-apache-cassandra

RESTful / Secure Management Sidecar for Apache Cassandra
Apache License 2.0
70 stars 51 forks source link

arm64 support for DSE 6.8 images #417

Open adejanovski opened 8 months ago

adejanovski commented 8 months ago

Trying to start a DSE 6.8 cluster using K8ssandra on arm64 instances, we can see the pods will never get to a ready state and the following exception pops up in the logs:

INFO  [DSE main thread] 2023-10-31 08:25:31,448  CassandraDaemonInterceptor.java:52 - Starting DataStax Management API Agent for Apache Cassandra v0.1
WARN  [DSE main thread] 2023-10-31 08:25:31,612  CassandraDaemonInterceptor.java:94 - Problem starting DataStax Management API for Apache Cassandra
java.lang.RuntimeException: Event loop needed
    at com.datastax.mgmtapi.interceptors.CassandraDaemonInterceptor.intercept(CassandraDaemonInterceptor.java:56)
    at org.apache.cassandra.service.CassandraDaemon.start(CassandraDaemon.java)
    at com.datastax.bdp.server.DseDaemon.start(DseDaemon.java:559)
    at org.apache.cassandra.service.CassandraDaemon.activate0(CassandraDaemon.java:809)
    at org.apache.cassandra.service.CassandraDaemon.access$100(CassandraDaemon.java:88)
    at org.apache.cassandra.service.CassandraDaemon$3.run(CassandraDaemon.java:717)
INFO  [DSE main thread] 2023-10-31 08:25:31,613  MetricsInterceptor.java:65 - Starting Metric Collector for Apache Cassandra
ERROR [DSE main thread] 2023-10-31 08:25:33,331  MetricsInterceptor.java:92 - Unable to start metrics endpoint
java.lang.UnsatisfiedLinkError: failed to load the required native library
    at io.netty.channel.epoll.Epoll.ensureAvailability(Epoll.java:81)
    at io.netty.channel.epoll.EpollEventLoop.<clinit>(EpollEventLoop.java:59)
    at io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:209)
    at io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:37)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60)
    at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:49)
    at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:59)
    at io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:119)
    at io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:106)
    at io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:83)
    at io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:54)
    at io.k8ssandra.metrics.interceptors.MetricsInterceptor.intercept(MetricsInterceptor.java:82)
    at org.apache.cassandra.service.CassandraDaemon.start(CassandraDaemon.java)
    at com.datastax.bdp.server.DseDaemon.start(DseDaemon.java:559)
    at org.apache.cassandra.service.CassandraDaemon.activate0(CassandraDaemon.java:809)
    at org.apache.cassandra.service.CassandraDaemon.access$100(CassandraDaemon.java:88)
    at org.apache.cassandra.service.CassandraDaemon$3.run(CassandraDaemon.java:717)
Caused by: java.lang.UnsatisfiedLinkError: could not load a native library: netty_transport_native_epoll_aarch_64
    at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:239)
    at io.netty.channel.epoll.Native.loadNativeLibrary(Native.java:419)
    at io.netty.channel.epoll.Native.<clinit>(Native.java:88)
    at io.netty.channel.epoll.Epoll.<clinit>(Epoll.java:40)
    at org.apache.cassandra.concurrent.TPC.<clinit>(TPC.java:84)
    at org.apache.cassandra.auth.AuthCache.initCache(AuthCache.java:306)
    at org.apache.cassandra.auth.AuthCache.init(AuthCache.java:105)
    at org.apache.cassandra.auth.AuthCache.<init>(AuthCache.java:100)
    at org.apache.cassandra.auth.RolesCache.<init>(RolesCache.java:56)
    at org.apache.cassandra.auth.RolesCache.<init>(RolesCache.java:39)
    at org.apache.cassandra.auth.AuthManager.<init>(AuthManager.java:74)
    at org.apache.cassandra.auth.AuthConfig.applyAuth(AuthConfig.java:94)
    at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:241)
    at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:254)
    at com.datastax.bdp.DseCoreModule.<init>(DseCoreModule.java:83)
    at com.datastax.bdp.DseModule.getRequiredModules(DseModule.java:161)
    at com.datastax.bdp.server.AbstractDseModule.configure(AbstractDseModule.java:27)
    at com.datastax.bdp.DseModule.configure(DseModule.java:88)
    at com.google.inject.AbstractModule.configure(AbstractModule.java:62)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340)
    at com.google.inject.spi.Elements.getElements(Elements.java:110)
    at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104)
    at com.google.inject.Guice.createInjector(Guice.java:96)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.google.inject.Guice.createInjector(Guice.java:62)
    at com.datastax.bdp.ioc.DseInjector.get(DseInjector.java:36)
    at com.datastax.bdp.DseModule.main(DseModule.java:102)
    Suppressed: java.lang.UnsatisfiedLinkError: could not load a native library: netty_transport_native_epoll
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:239)
        at io.netty.channel.epoll.Native.loadNativeLibrary(Native.java:422)
        ... 26 common frames omitted
    Caused by: java.io.FileNotFoundException: META-INF/native/libnetty_transport_native_epoll.so
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:186)
        ... 27 common frames omitted
        Suppressed: java.lang.UnsatisfiedLinkError: no netty_transport_native_epoll in java.library.path
            at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
            at java.lang.Runtime.loadLibrary0(Runtime.java:843)
            at java.lang.System.loadLibrary(System.java:1136)
            at io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
            at io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:391)
            at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:161)
            ... 27 common frames omitted
            Suppressed: java.lang.UnsatisfiedLinkError: no netty_transport_native_epoll in java.library.path
                at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
                at java.lang.Runtime.loadLibrary0(Runtime.java:843)
                at java.lang.System.loadLibrary(System.java:1136)
                at 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:498)
                at io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:425)
                at java.security.AccessController.doPrivileged(Native Method)
                at io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:417)
                at io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:383)
                ... 28 common frames omitted
Caused by: java.io.FileNotFoundException: META-INF/native/libnetty_transport_native_epoll_aarch_64.so
    at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:186)
    ... 27 common frames omitted
    Suppressed: java.lang.UnsatisfiedLinkError: no netty_transport_native_epoll_aarch_64 in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
        at java.lang.Runtime.loadLibrary0(Runtime.java:843)
        at java.lang.System.loadLibrary(System.java:1136)
        at io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
        at io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:391)
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:161)
        ... 27 common frames omitted
        Suppressed: java.lang.UnsatisfiedLinkError: no netty_transport_native_epoll_aarch_64 in java.library.path
            at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
            at java.lang.Runtime.loadLibrary0(Runtime.java:843)
            at java.lang.System.loadLibrary(System.java:1136)
            at 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:498)
            at io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:425)
            at java.security.AccessController.doPrivileged(Native Method)
            at io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:417)
            at io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:383)
            ... 28 common frames omitted

This seems to indicate we're missing a netty dependency in the java path to provide arm64 compatibility.