vmencik / akka-graal-native

Example of Akka HTTP server compiled with GraalVM native-image
93 stars 15 forks source link

try with graal-ce-19.0.0 #3

Closed domdorn closed 5 years ago

domdorn commented 5 years ago

Hey! I know, this is no supported piece of software, but I was just wondering if you have tried it with the newest graal release 19.0.0 ? they removed the --rerun-class-initialization-at-runtime parameter, so the old code is no longer working to build a executable. I tried replacing it with the suggested replacement, but couldn't get it to work.

Would be cool if you could take a look, but again, I know this is no supported software and you're probably busy with other things!

Thanks, Dominik

vmencik commented 5 years ago

I've tried updating to GraalVM 19.0.0 and I'm currently stuck at some problems with MethodHandles used by akka.dispatch.affinity.AffinityPool.

[error] Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandle.bindTo(Object)
[error] Trace:
[error]     at parsing java.lang.invoke.MethodHandleImpl.makePairwiseConvertByEditor(MethodHandleImpl.java:221)
[error] Call path from entry point to java.lang.invoke.MethodHandleImpl.makePairwiseConvertByEditor(MethodHandle, MethodType, boolean, boolean):
[error]     at java.lang.invoke.MethodHandleImpl.makePairwiseConvertByEditor(MethodHandleImpl.java:207)
[error]     at java.lang.invoke.MethodHandleImpl.makePairwiseConvert(MethodHandleImpl.java:194)
[error]     at java.lang.invoke.MethodHandleImpl.makePairwiseConvert(MethodHandleImpl.java:380)
[error]     at java.lang.invoke.MethodHandle.asTypeUncached(MethodHandle.java:776)
[error]     at java.lang.invoke.MethodHandle.asType(MethodHandle.java:761)
[error]     at java.lang.invoke.Invokers.checkGenericType(Invokers.java:321)
[error]     at java.lang.invoke.LambdaForm$MH/2093176254.invoke_MT(LambdaForm$MH)
[error]     at java.lang.invoke.InvokerBytecodeGenerator.emitNewArray(InvokerBytecodeGenerator.java:889)
[error]     at java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCodeBytes(InvokerBytecodeGenerator.java:688)
[error]     at java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCode(InvokerBytecodeGenerator.java:618)
[error]     at java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:654)
[error]     at java.lang.invoke.LambdaForm.prepare(LambdaForm.java:635)
[error]     at java.lang.invoke.MethodHandle.updateForm(MethodHandle.java:1432)
[error]     at java.lang.invoke.MethodHandle.customize(MethodHandle.java:1442)
[error]     at java.lang.invoke.Invokers.maybeCustomize(Invokers.java:407)
[error]     at java.lang.invoke.Invokers.checkCustomized(Invokers.java:398)
[error]     at java.lang.invoke.LambdaForm$MH/120741074.invokeExact_MT(LambdaForm$MH)
[error]     at akka.dispatch.affinity.AffinityPool$IdleStrategy.idle(AffinityPool.scala:90)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.executeNext$1(AffinityPool.scala:268)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.runLoop$1(AffinityPool.scala:286)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.run(AffinityPool.scala:294)
[error]     at com.oracle.svm.core.jdk.RuntimeSupport.executeHooks(RuntimeSupport.java:144)
[error]     at com.oracle.svm.core.jdk.RuntimeSupport.executeStartupHooks(RuntimeSupport.java:89)
[error]     at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:145)
[error]     at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
[error] Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandleImpl$BindCaller.prepareForInvoker(MethodHandle)
[error] Trace:
[error]     at parsing java.lang.invoke.MethodHandleImpl$BindCaller.makeInjectedInvoker(MethodHandleImpl.java:1166)
[error] Call path from entry point to java.lang.invoke.MethodHandleImpl$BindCaller.makeInjectedInvoker(Class):
[error]     at java.lang.invoke.MethodHandleImpl$BindCaller.makeInjectedInvoker(MethodHandleImpl.java:1141)
[error]     at java.lang.invoke.MethodHandleImpl$BindCaller.access$300(MethodHandleImpl.java:1122)
[error]     at java.lang.invoke.MethodHandleImpl$BindCaller$1.computeValue(MethodHandleImpl.java:1175)
[error]     at java.lang.invoke.MethodHandleImpl$BindCaller$1.computeValue(MethodHandleImpl.java:1173)
[error]     at com.oracle.svm.core.jdk.Target_java_lang_ClassValue.get(JavaLangSubstitutions.java:512)
[error]     at java.lang.invoke.MethodHandleImpl$BindCaller.bindCaller(MethodHandleImpl.java:1136)
[error]     at java.lang.invoke.MethodHandleImpl.bindCaller(MethodHandleImpl.java:1117)
[error]     at java.lang.invoke.MethodHandles$Lookup.maybeBindCaller(MethodHandles.java:1681)
[error]     at java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1669)
[error]     at java.lang.invoke.MethodHandles$Lookup.getDirectMethod(MethodHandles.java:1605)
[error]     at java.lang.invoke.MethodHandles$Lookup.findStatic(MethodHandles.java:781)
[error]     at java.lang.invoke.BoundMethodHandle$Factory.makeCbmhCtor(BoundMethodHandle.java:818)
[error]     at java.lang.invoke.BoundMethodHandle$Factory.makeCtors(BoundMethodHandle.java:763)
[error]     at java.lang.invoke.BoundMethodHandle$SpeciesData.<init>(BoundMethodHandle.java:349)
[error]     at java.lang.invoke.BoundMethodHandle$SpeciesData$1.apply(BoundMethodHandle.java:389)
[error]     at java.lang.invoke.BoundMethodHandle$SpeciesData$1.apply(BoundMethodHandle.java:383)
[error]     at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
[error]     at com.oracle.svm.core.posix.PosixJavaNetClose.getFdEntry(PosixJavaNetClose.java:124)
[error]     at com.oracle.svm.core.posix.PosixJavaNetClose.BLOCKING_IO_RETURN_INT(PosixJavaNetClose.java:220)
[error]     at com.oracle.svm.core.posix.PosixJavaNetClose.NET_Send(PosixJavaNetClose.java:308)
[error]     at com.oracle.svm.core.posix.JavaNetNetUtilMD.NET_Send(JavaNetNetUtil.java:1392)
[error]     at com.oracle.svm.core.posix.Target_java_net_SocketOutputStream.socketWrite0(PosixJavaNetSubstitutions.java:4444)
[error]     at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
[error]     at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
[error]     at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
[error]     at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
[error]     at java.io.PrintStream.newLine(PrintStream.java:548)
[error]     at java.io.PrintStream.println(PrintStream.java:807)
[error]     at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:758)
[error]     at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
[error] Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandleImpl.buildVarargsArray(MethodHandle, MethodHandle, int)
[error] Trace:
[error]     at parsing java.lang.invoke.MethodHandleImpl.varargsArray(MethodHandleImpl.java:1634)
[error] Call path from entry point to java.lang.invoke.MethodHandleImpl.varargsArray(Class, int):
[error]     at java.lang.invoke.MethodHandleImpl.varargsArray(MethodHandleImpl.java:1611)
[error]     at java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle.asCollector(MethodHandleImpl.java:1363)
[error]     at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.asTypeUncached(MethodHandleImpl.java:502)
[error]     at java.lang.invoke.MethodHandle.asType(MethodHandle.java:761)
[error]     at java.lang.invoke.Invokers.checkGenericType(Invokers.java:321)
[error]     at java.lang.invoke.LambdaForm$MH/2093176254.invoke_MT(LambdaForm$MH)
[error]     at java.lang.invoke.InvokerBytecodeGenerator.emitNewArray(InvokerBytecodeGenerator.java:889)
[error]     at java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCodeBytes(InvokerBytecodeGenerator.java:688)
[error]     at java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCode(InvokerBytecodeGenerator.java:618)
[error]     at java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:654)
[error]     at java.lang.invoke.LambdaForm.prepare(LambdaForm.java:635)
[error]     at java.lang.invoke.MethodHandle.updateForm(MethodHandle.java:1432)
[error]     at java.lang.invoke.MethodHandle.customize(MethodHandle.java:1442)
[error]     at java.lang.invoke.Invokers.maybeCustomize(Invokers.java:407)
[error]     at java.lang.invoke.Invokers.checkCustomized(Invokers.java:398)
[error]     at java.lang.invoke.LambdaForm$MH/120741074.invokeExact_MT(LambdaForm$MH)
[error]     at akka.dispatch.affinity.AffinityPool$IdleStrategy.idle(AffinityPool.scala:90)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.executeNext$1(AffinityPool.scala:268)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.runLoop$1(AffinityPool.scala:286)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.run(AffinityPool.scala:294)
[error]     at com.oracle.svm.core.jdk.RuntimeSupport.executeHooks(RuntimeSupport.java:144)
[error]     at com.oracle.svm.core.jdk.RuntimeSupport.executeStartupHooks(RuntimeSupport.java:89)
[error]     at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:145)
[error]     at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
[error] Error: type is not available in this platform: org.graalvm.nativeimage.hosted.Feature$BeforeAnalysisAccess
[error] Trace:  object java.lang.Class[]
[error]     object java.lang.invoke.MethodType
[error]     object java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry
[error]     object java.util.concurrent.ConcurrentHashMap$Node
[error]     object java.util.concurrent.ConcurrentHashMap$Node[]
[error]     object java.util.concurrent.ConcurrentHashMap
[error]     object java.lang.invoke.MethodType$ConcurrentWeakInternSet
[error]     method java.lang.invoke.MethodType.makeImpl(Class, Class[], boolean)
[error] Call path from entry point to java.lang.invoke.MethodType.makeImpl(Class, Class[], boolean):
[error]     at java.lang.invoke.MethodType.makeImpl(MethodType.java:301)
[error]     at java.lang.invoke.MethodType.methodType(MethodType.java:206)
[error]     at java.lang.invoke.LambdaForm.signatureType(LambdaForm.java:563)
[error]     at java.lang.invoke.LambdaForm.getPreparedForm(LambdaForm.java:711)
[error]     at java.lang.invoke.LambdaForm.prepare(LambdaForm.java:641)
[error]     at java.lang.invoke.MethodHandle.updateForm(MethodHandle.java:1432)
[error]     at java.lang.invoke.MethodHandle.customize(MethodHandle.java:1442)
[error]     at java.lang.invoke.Invokers.maybeCustomize(Invokers.java:407)
[error]     at java.lang.invoke.Invokers.checkCustomized(Invokers.java:398)
[error]     at java.lang.invoke.LambdaForm$MH/120741074.invokeExact_MT(LambdaForm$MH)
[error]     at akka.dispatch.affinity.AffinityPool$IdleStrategy.idle(AffinityPool.scala:90)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.executeNext$1(AffinityPool.scala:268)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.runLoop$1(AffinityPool.scala:286)
[error]     at akka.dispatch.affinity.AffinityPool$AffinityPoolWorker.run(AffinityPool.scala:294)
[error]     at com.oracle.svm.core.jdk.RuntimeSupport.executeHooks(RuntimeSupport.java:144)
[error]     at com.oracle.svm.core.jdk.RuntimeSupport.executeStartupHooks(RuntimeSupport.java:89)
[error]     at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:145)
[error]     at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
[error] Error: type is not available in this platform: org.graalvm.nativeimage.impl.ImageSingletonsSupport

I don't see why it wasn't an issue with GraalVM RCs. I'll probably have to ask GraalVM devs for some advice.

vmencik commented 5 years ago

I was able to get everything working with Graal 19.0.0 by instructing native-image to initialize all classes at image build time (which was the default in the RC versions). See https://github.com/vmencik/akka-graal-native/commit/736e43397e09d787280704e67c167ad04bd5ccee#diff-fdc3abdfd754eeb24090dbd90aeec2ceR34