Reloading configuration with OpenJDK 10 throws a java.lang.NoClassDefFoundError
miikka opened this issue · 8 comments
Hi! I just started using Riemann and it looks really nice. I'm running it inside Docker with the provided riemannio/riemann
image. Unfortunately reloading the configuration does not seem to work.
Steps to reproduce:
- Start Riemann inside Docker:
docker run -it --rm --name riemann riemannio/riemann:0.3.1
- Send SIGHUP:
docker kill --signal=HUP riemann
What I expected? That Riemann reloads /etc/riemann.config.
What happens instead?
INFO [2018-06-13 07:43:39,950] SIGHUP handler - riemann.bin - Caught SIGHUP, reloading
INFO [2018-06-13 07:43:39,953] SIGHUP handler - riemann.pubsub - Sweeping transient subscriptions.
ERROR [2018-06-13 07:43:39,958] SIGHUP handler - riemann.bin - Couldn't reload:
clojure.lang.Compiler$CompilerException: java.lang.NoClassDefFoundError: clojure/lang/AFunction, compiling:(/etc/riemann.config:4:1)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7010)
at clojure.lang.Compiler.analyze(Compiler.java:6773)
at clojure.lang.Compiler.eval(Compiler.java:7059)
at clojure.lang.Compiler.load(Compiler.java:7514)
at clojure.lang.Compiler.loadFile(Compiler.java:7452)
at clojure.lang.RT$3.invoke(RT.java:325)
at riemann.config$include.invokeStatic(config.clj:449)
at riemann.config$include.invoke(config.clj:426)
at riemann.bin$reload_BANG_.invokeStatic(bin.clj:46)
at riemann.bin$reload_BANG_.invoke(bin.clj:36)
at riemann.bin$handle_signals$fn__14078.invoke(bin.clj:62)
at riemann.bin.proxy$java.lang.Object$SignalHandler$d8c00ec7.handle(Unknown Source)
at jdk.unsupported/sun.misc.Signal$InternalMiscHandler.handle(Signal.java:198)
at java.base/jdk.internal.misc.Signal$1.run(Signal.java:220)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.NoClassDefFoundError: clojure/lang/AFunction
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1009)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:870)
at clojure.lang.DynamicClassLoader.defineClass(DynamicClassLoader.java:46)
at clojure.lang.Compiler$ObjExpr.getCompiledClass(Compiler.java:4979)
at clojure.lang.Compiler$FnExpr.parse(Compiler.java:4109)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:7001)
... 14 common frames omitted
Caused by: java.lang.ClassNotFoundException: clojure.lang.AFunction
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:69)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
at clojure.lang.DynamicClassLoader.loadClass(DynamicClassLoader.java:77)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 21 common frames omitted
I wasn't able to reproduce this when running directly on the host.
Ah, probably the culprit is not Docker but Java 10! I tried rebuilding the Docker image against openjdk:8-jre-slim
(instead of openjdk:10-jre-slim
) and reloading works as expected.
I faced similar java.lang.NoClassDefFoundError when tried to add Monger dependency via pomegranate. Seemed to be somehow related to the version of plexus-utils dependency.
sigproblems in docker are often related to the entrypoint being run as PID=1
This should be fixed in 0.3.2.
I'm still experiencing the same issue with the riemannio/riemann:0.3.2
docker image
Okay - I think I've found the issue. Let me do some testing.
Released in 0.3.3.
Thanks a lot for the quick patch!