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

ConcurrentModificationException during native image generation with JDK 11 #6018

Closed
gwenneg opened this issue Dec 8, 2019 · 6 comments
Closed
Labels
env/graalvm-java11 Relating to using GraalVM native image generation on Java 11 kind/bug Something isn't working
Milestone

Comments

@gwenneg
Copy link
Member

gwenneg commented Dec 8, 2019

Describe the bug

[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-Dsun.nio.ch.maxUpdateArraySize=100 -J-DCoordinatorEnvironmentBean.transactionStatusManagerEnable=false -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -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 -H:+TraceClassInitialization --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar quarkus-integration-test-spring-data-jpa-999-SNAPSHOT-runner.jar -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:+AddAllCharsets -H:EnableURLProtocols=http,https --enable-all-security-services -H:+JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace quarkus-integration-test-spring-data-jpa-999-SNAPSHOT-runner
[quarkus-integration-test-spring-data-jpa-999-SNAPSHOT-runner:48873]    classlist:  36,890.86 ms
[quarkus-integration-test-spring-data-jpa-999-SNAPSHOT-runner:48873]        (cap):   5,810.60 ms
[quarkus-integration-test-spring-data-jpa-999-SNAPSHOT-runner:48873]        setup:  10,718.86 ms
10:14:17,095 INFO  [org.hib.Version] HHH000412: Hibernate Core {5.4.10.Final}
10:14:17,147 INFO  [org.hib.ann.com.Version] HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
10:14:17,229 INFO  [org.hib.dia.Dialect] HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
10:14:22,649 INFO  [org.jbo.threads] JBoss Threads version 3.0.0.Final
[quarkus-integration-test-spring-data-jpa-999-SNAPSHOT-runner:48873]     analysis:  82,709.43 ms
Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing org.hibernate.engine.jdbc.NClobProxy.generateProxy(java.lang.String) 
Parsing context:
	parsing org.hibernate.engine.jdbc.NonContextualLobCreator.createNClob(NonContextualLobCreator.java:53)
	parsing org.hibernate.type.descriptor.java.StringTypeDescriptor.unwrap(StringTypeDescriptor.java:55)
	parsing org.hibernate.type.descriptor.java.StringTypeDescriptor.unwrap(StringTypeDescriptor.java:22)
	parsing org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$1.doBind(VarbinaryTypeDescriptor.java:45)
	parsing org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:73)
	parsing org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:276)
	parsing org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:271)
	parsing org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:53)
	parsing org.hibernate.hql.internal.ast.exec.BasicExecutor.doExecute(BasicExecutor.java:92)
	parsing org.hibernate.hql.internal.ast.exec.DeleteExecutor.execute(DeleteExecutor.java:109)
	parsing org.hibernate.hql.internal.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:454)
	parsing org.hibernate.engine.query.spi.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:377)
	parsing org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1420)
	parsing org.hibernate.query.internal.AbstractProducedQuery.doExecuteUpdate(AbstractProducedQuery.java:1623)
	parsing org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1605)
	parsing io.quarkus.hibernate.orm.panache.runtime.JpaOperations.executeUpdate(JpaOperations.java:421)
	parsing io.quarkus.it.spring.data.jpa.MovieRepository_4263b43a08c2ca0cc9a7dd59c4e59bb4f9386bbdImpl.changeRatingToNewName(MovieRepository_4263b43a08c2ca0cc9a7dd59c4e59bb4f9386bbdImpl.zig:153)
	parsing io.quarkus.it.spring.data.jpa.MovieRepository_4263b43a08c2ca0cc9a7dd59c4e59bb4f9386bbdImpl_ClientProxy.changeRatingToNewName(MovieRepository_4263b43a08c2ca0cc9a7dd59c4e59bb4f9386bbdImpl_ClientProxy.zig:143)
	parsing io.quarkus.it.spring.data.jpa.MovieResource.changeRatingToNewName(MovieResource.java:92)
	parsing com.oracle.svm.reflect.MovieResource_changeRatingToNewName_f2c353a05d09b7208c38e1dd17272af9e7015cc0_105.invoke(Unknown Source)
	parsing java.lang.reflect.Method.invoke(Method.java:566)
	parsing javax.enterprise.util.AnnotationLiteral.invoke(AnnotationLiteral.java:288)
	parsing javax.enterprise.util.AnnotationLiteral.getMemberValue(AnnotationLiteral.java:276)
	parsing javax.enterprise.util.AnnotationLiteral.hashCode(AnnotationLiteral.java:246)
	parsing java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
	parsing java.util.Properties.get(Properties.java:1332)
	parsing com.oracle.svm.core.jdk.SystemPropertiesSupport.initializeLazyValue(SystemPropertiesSupport.java:183)
	parsing com.oracle.svm.core.jdk.SystemPropertiesSupport.getProperty(SystemPropertiesSupport.java:141)
	parsing com.oracle.svm.core.jdk.Target_java_lang_System.getProperty(JavaLangSubstitutions.java:339)
	parsing com.oracle.svm.core.jdk.JNIPlatformNativeLibrarySupport.initializeEncoding(JNIPlatformNativeLibrarySupport.java:80)
	parsing com.oracle.svm.core.jdk.JNIPlatformNativeLibrarySupport.loadJavaLibrary(JNIPlatformNativeLibrarySupport.java:53)
	parsing com.oracle.svm.core.posix.PosixNativeLibrarySupport.loadJavaLibrary(PosixNativeLibraryFeature.java:121)
	parsing com.oracle.svm.core.posix.PosixNativeLibrarySupport.initializeBuiltinLibraries(PosixNativeLibraryFeature.java:101)
	parsing com.oracle.svm.core.graal.snippets.CEntryPointSnippets.initializeIsolate(CEntryPointSnippets.java:252)

	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 org.hibernate.engine.jdbc.NClobProxy.generateProxy(NClobProxy.java:44)
	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

To Reproduce
Steps to reproduce the behavior from the master branch:

  1. (Optional) Set the JAVA_HOME environment variable to a JDK 11 installation directory (OpenJDK 11 or GraalVM 19.3.0 JDK 11 edition). Add the JDK 11 bin directory to the path.
  2. (Optional) Run ./mvnw clean install -Dmaven.test.skip=true to build all the Quarkus sources with the JDK 11.
  3. Run ./mvnw clean install --projects :quarkus-integration-test-spring-data-jpa -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:19.3.0-java11.
@gwenneg gwenneg added kind/bug Something isn't working env/graalvm-java11 Relating to using GraalVM native image generation on Java 11 labels Dec 8, 2019
@jaikiran
Copy link
Member

jaikiran commented Dec 8, 2019

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)

I think this one should be fixed by the bug fix that was done recently for the issue reported by @stuartwdouglas here oracle/graal#1927

@gwenneg gwenneg changed the title quarkus-integration-test-spring-data-jpa build fails in native mode with JDK 11 ConcurrentModificationException during native image generation with JDK 11 Dec 15, 2019
@gwenneg
Copy link
Member Author

gwenneg commented Dec 15, 2019

I renamed this issue to reflect the real problem. It can happen during the native image generation of any integration test module.

@gsmet
Copy link
Member

gsmet commented Dec 15, 2019

So Stuart’s work around does not work in the end?

@gwenneg
Copy link
Member Author

gwenneg commented Dec 15, 2019

Well I suppose it doesn't since I keep seeing failures locally.

@stuartwdouglas
Copy link
Member

I originally saw this in a JDK8 run, so it is not tied to JDK11, and I am pretty sure the code in question has been buggy for a while. I am pretty sure it is just luck that we have not run into this earlier.

@gwenneg
Copy link
Member Author

gwenneg commented Jan 27, 2020

Fixed in GraalVM 19.3.1 which is already supported by Quarkus 1.2.0.Final and master.

@gwenneg gwenneg closed this as completed Jan 27, 2020
@gsmet gsmet added this to the 1.2.0.Final milestone Feb 3, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
env/graalvm-java11 Relating to using GraalVM native image generation on Java 11 kind/bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants