Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Temp workaround: use a single thread to generate native image #6066

Merged
merged 1 commit into from
Dec 9, 2019

Conversation

stuartwdouglas
Copy link
Member

Workaround for oracle/graal#1927

Should be possible to remove this in 19.3.1

This is a different problem to the previous one that this
fix worked around, however because we were using this setting
we only ran into the thread safety problem after it was removed.

Workaround for oracle/graal#1927

Should be possible to remove this in 19.3.1

This is a different problem to the previous one that this
fix worked around, however because we were using this setting
we only ran into the thread safety problem after it was removed.
@stuartwdouglas
Copy link
Member Author

@gsmet @gwenneg This should fix the proxy generation problem that is causing intermittent failures until the real Graal fix is available.

@gwenneg
Copy link
Member

gwenneg commented Dec 9, 2019

Great, thanks @stuartwdouglas!

@gwenneg gwenneg added the triage/waiting-for-ci Ready to merge when CI successfully finishes label Dec 9, 2019
@gwenneg gwenneg merged commit 302c497 into quarkusio:master Dec 9, 2019
@gwenneg gwenneg added this to the 1.2.0 milestone Dec 9, 2019
@gsmet gsmet removed the backport? label Dec 9, 2019
@gsmet gsmet modified the milestones: 1.2.0, 1.1.0 Dec 9, 2019
@gwenneg
Copy link
Member

gwenneg commented Dec 11, 2019

I'm not sure the ConcurrentModificationException is fixed as I still see it happening locally. I'll confirm this tonight.

@gwenneg
Copy link
Member

gwenneg commented Dec 12, 2019

I've seen a lot of ConcurrentModificationException during native image generation lately so I'm pretty sure the issue is still there.

@stuartwdouglas
Copy link
Member Author

What does the stack trace look like?

@gwenneg
Copy link
Member

gwenneg commented Dec 13, 2019

Here's one example:

[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM Version 19.3.0 CE
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] /Library/Java/JavaVirtualMachines/graalvm-ce-java11-19.3.0/Contents/Home/bin/native-image -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-DCoordinatorEnvironmentBean.transactionStatusManagerEnable=false -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=1 --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar quarkus-integration-test-jpa-mysql-999-SNAPSHOT-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:+AddAllCharsets -H:+IncludeAllTimeZones -H:EnableURLProtocols=http,https --enable-all-security-services -H:+JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace quarkus-integration-test-jpa-mysql-999-SNAPSHOT-runner
[quarkus-integration-test-jpa-mysql-999-SNAPSHOT-runner:25615]    classlist:  26,222.42 ms
[quarkus-integration-test-jpa-mysql-999-SNAPSHOT-runner:25615]        (cap):   4,739.72 ms
[quarkus-integration-test-jpa-mysql-999-SNAPSHOT-runner:25615]        setup:   9,611.33 ms
23:31:12,042 INFO  [org.hib.Version] HHH000412: Hibernate Core {5.4.10.Final}
23:31:12,096 INFO  [org.hib.ann.com.Version] HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
23:31:12,167 INFO  [org.hib.dia.Dialect] HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
23:31:16,508 INFO  [org.jbo.threads] JBoss Threads version 3.0.0.Final
[quarkus-integration-test-jpa-mysql-999-SNAPSHOT-runner:25615]     analysis:  36,124.60 ms
Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing com.mysql.cj.jdbc.ha.FailoverConnectionProxy.createProxyInstance(com.mysql.cj.conf.ConnectionUrl) 
Parsing context:
	parsing com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:205)
	parsing io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:200)
	parsing io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:390)
	parsing io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:372)
	parsing java.util.concurrent.FutureTask.run(FutureTask.java:264)
	parsing com.oracle.svm.core.jdk.RuntimeSupport.executeHooks(RuntimeSupport.java:144)
	parsing com.oracle.svm.core.jdk.RuntimeSupport.executeTearDownHooks(RuntimeSupport.java:121)
	parsing com.oracle.svm.core.graal.snippets.CEntryPointSnippets.tearDownIsolate(CEntryPointSnippets.java:361)

	at com.oracle.graal.pointsto.util.AnalysisError.parsingError(AnalysisError.java:138)
	at com.oracle.graal.pointsto.flow.MethodTypeFlow.doParse(MethodTypeFlow.java:323)
	at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureParsed(MethodTypeFlow.java:300)
	at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:107)
	at com.oracle.graal.pointsto.flow.StaticInvokeTypeFlow.update(InvokeTypeFlow.java:346)
	at com.oracle.graal.pointsto.BigBang$2.run(BigBang.java:511)
	at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:171)
	at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: org.graalvm.compiler.java.BytecodeParser$BytecodeParserError: java.util.ConcurrentModificationException
	at parsing com.mysql.cj.jdbc.ha.FailoverConnectionProxy.createProxyInstance(FailoverConnectionProxy.java:112)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.throwParserError(BytecodeParser.java:2475)
	at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.throwParserError(SharedGraphBuilderPhase.java:93)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3291)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3093)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:977)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:871)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:84)
	at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.run(Phase.java:49)
	at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:197)
	at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:42)
	at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:38)
	at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:221)
	at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:340)
	at com.oracle.graal.pointsto.flow.MethodTypeFlow.doParse(MethodTypeFlow.java:310)
	... 11 more
Caused by: java.util.ConcurrentModificationException
	at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1134)
	at com.oracle.svm.reflect.proxy.DynamicProxySupport.addProxyClass(DynamicProxySupport.java:94)
	at com.oracle.svm.hosted.snippets.SubstrateGraphBuilderPlugins.interceptProxyInterfaces(SubstrateGraphBuilderPlugins.java:246)
	at com.oracle.svm.hosted.snippets.SubstrateGraphBuilderPlugins.access$000(SubstrateGraphBuilderPlugins.java:149)
	at com.oracle.svm.hosted.snippets.SubstrateGraphBuilderPlugins$6.apply(SubstrateGraphBuilderPlugins.java:230)
	at jdk.internal.vm.compiler/org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin.execute(InvocationPlugin.java:217)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.tryInvocationPlugin(BytecodeParser.java:2097)
	at com.oracle.svm.hosted.phases.AnalysisGraphBuilderPhase$AnalysisBytecodeParser.tryInvocationPlugin(AnalysisGraphBuilderPhase.java:67)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.appendInvoke(BytecodeParser.java:1806)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1571)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1551)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBytecode(BytecodeParser.java:5170)
	at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3286)
	... 22 more
Error: Image build request failed with exit status 1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
triage/waiting-for-ci Ready to merge when CI successfully finishes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants