-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Describe the Issue
I got an error like this
Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing secondfoundation.common.util.RetryConfigurableKt.withRetries(RetryConfigurable.kt:168)
Parsing context:
at sf.apiclient.oasis.jarvis.transstatus.OasisTransStatusClient.getTransStatus(OasisTransStatusClient.kt:120)
at sf.apiclient.oasis.jarvis.transstatus.OasisTransStatusClient.getTransStatus$default(OasisTransStatusClient.kt:84)
at sf.jarvis.transmission.Reservations.getReservationStatus(Reservations.kt:103)
at sf.jarvis.transmission.$Reservations$Definition$Exec.dispatch(Unknown Source)
at io.micronaut.context.AbstractExecutableMethodsDefinition$DispatchedExecutableMethod.invoke(AbstractExecutableMethodsDefinition.java:456)
at io.micronaut.inject.DelegatingExecutableMethod.invoke(DelegatingExecutableMethod.java:86)
at io.micronaut.context.bind.DefaultExecutableBeanContextBinder$ContextBoundExecutable.invoke(DefaultExecutableBeanContextBinder.java:152)
at io.micronaut.scheduling.processor.ScheduledMethodProcessor.lambda$process$2(ScheduledMethodProcessor.java:131)
at io.micronaut.scheduling.processor.ScheduledMethodProcessor$$Lambda/0x000007e002c733c0.run(Unknown Source)
at io.micronaut.scheduling.TaskScheduler.lambda$schedule$0(TaskScheduler.java:79)
at io.micronaut.scheduling.TaskScheduler$$Lambda/0x000007e002c79df0.call(Unknown Source)
at reactor.core.publisher.MonoCallable.call(MonoCallable.java:72)
at reactor.core.publisher.MonoCallable$MonoCallableSubscription.request(MonoCallable.java:137)
at reactor.core.publisher.StrictSubscriber.onSubscribe(StrictSubscriber.java:77)
at reactor.core.publisher.Operators.reportThrowInSubscribe(Operators.java:226)
at reactor.core.publisher.Mono.subscribe(Mono.java:4571)
at reactor.core.publisher.Mono.block(Mono.java:1778)
at com.azure.core.util.polling.PollerFlux.lambda$new$1(PollerFlux.java:306)
at com.azure.core.util.polling.PollerFlux$$Lambda/0x000007e002a2b0f8.apply(Unknown Source)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1762)
at java.time.ZoneOffset.ofTotalSeconds(ZoneOffset.java:427)
at java.time.OffsetTime.with(OffsetTime.java:733)
at java.time.OffsetTime.with(OffsetTime.java:118)
at java.time.chrono.ChronoLocalDateTime.adjustInto(ChronoLocalDateTime.java:386)
at java.time.LocalDateTime.adjustInto(LocalDateTime.java:1623)
at java.time.OffsetTime.with(OffsetTime.java:690)
at java.time.OffsetTime.with(OffsetTime.java:118)
at root method.(Unknown Source)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisError.parsingError(AnalysisError.java:165)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:184)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureFlowsGraphCreated(MethodTypeFlow.java:152)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.getOrCreateMethodFlowsGraphInfo(MethodTypeFlow.java:110)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.typestate.DefaultStaticInvokeTypeFlow.lambda$update$0(DefaultStaticInvokeTypeFlow.java:75)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.LightImmutableCollection.forEach(LightImmutableCollection.java:90)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.typestate.DefaultStaticInvokeTypeFlow.update(DefaultStaticInvokeTypeFlow.java:74)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.PointsToAnalysis$1.run(PointsToAnalysis.java:575)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:166)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:152)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(ForkJoinTask.java:1726)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(ForkJoinTask.java:1717)
at java.base/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(ForkJoinTask.java:1641)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:507)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1458)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2034)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:189)
Caused by: jdk.graal.compiler.debug.GraalError: Frame states being merged are incompatible: mismatch in rethrowException flag
This frame state: [locals: [1497,1498,1499,1500,1501,1502,1503,1504,9,1505,_,_,102,91,114] stack: [1506] locks: [] rethrowException]
Other frame state: [locals: [648,649,650,651,652,653,654,655,9,656,2035,_,102,91,114] stack: [2036] locks: []]
Parser context: secondfoundation.common.util.RetryConfigurableKt.withRetries-Jg0PXok(RetryConfigurable.kt:126) [bci: 139, intrinsic: false]
139: goto 143
142: pop
143: new #55 // secondfoundation.common.util.RetryConfigurableKt$withRetries$2
146: dup
147: aload 7
149: aload 9
at jdk.graal.compiler/jdk.graal.compiler.java.FrameStateBuilder.checkCompatibleWith(FrameStateBuilder.java:495)
at jdk.graal.compiler/jdk.graal.compiler.java.FrameStateBuilder.merge(FrameStateBuilder.java:536)
at jdk.graal.compiler/jdk.graal.compiler.java.BytecodeParser.createTarget(BytecodeParser.java:3471)
at jdk.graal.compiler/jdk.graal.compiler.java.BytecodeParser.createTarget(BytecodeParser.java:3358)
at jdk.graal.compiler/jdk.graal.compiler.java.BytecodeParser.createExceptionDispatch(BytecodeParser.java:3637)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.createExceptionDispatch(SharedGraphBuilderPhase.java:933)
at jdk.graal.compiler/jdk.graal.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3542)
at jdk.graal.compiler/jdk.graal.compiler.java.BytecodeParser.build(BytecodeParser.java:1163)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.build(SharedGraphBuilderPhase.java:205)
at jdk.graal.compiler/jdk.graal.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:1055)
at jdk.graal.compiler/jdk.graal.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:103)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase.run(SharedGraphBuilderPhase.java:157)
at jdk.graal.compiler/jdk.graal.compiler.phases.Phase.run(Phase.java:49)
at jdk.graal.compiler/jdk.graal.compiler.phases.BasePhase.apply(BasePhase.java:468)
at jdk.graal.compiler/jdk.graal.compiler.phases.Phase.apply(Phase.java:42)
at jdk.graal.compiler/jdk.graal.compiler.phases.Phase.apply(Phase.java:38)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.AnalysisParsedGraph.parseBytecode(AnalysisParsedGraph.java:144)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.parseGraph(AnalysisMethod.java:916)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.ensureGraphParsedHelper(AnalysisMethod.java:881)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.ensureGraphParsed(AnalysisMethod.java:864)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysisGraphDecoder.lookupEncodedGraph(InlineBeforeAnalysisGraphDecoder.java:181)
at jdk.graal.compiler/jdk.graal.compiler.replacements.PEGraphDecoder.doInline(PEGraphDecoder.java:1215)
at jdk.graal.compiler/jdk.graal.compiler.replacements.PEGraphDecoder.tryInline(PEGraphDecoder.java:1198)
at jdk.graal.compiler/jdk.graal.compiler.replacements.PEGraphDecoder.trySimplifyInvoke(PEGraphDecoder.java:1053)
at jdk.graal.compiler/jdk.graal.compiler.replacements.PEGraphDecoder.handleInvokeWithCallTarget(PEGraphDecoder.java:1005)
at jdk.graal.compiler/jdk.graal.compiler.replacements.PEGraphDecoder.handleInvoke(PEGraphDecoder.java:991)
at jdk.graal.compiler/jdk.graal.compiler.nodes.GraphDecoder.processNextNode(GraphDecoder.java:926)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysisGraphDecoder.processNextNode(InlineBeforeAnalysisGraphDecoder.java:269)
at jdk.graal.compiler/jdk.graal.compiler.nodes.GraphDecoder.decode(GraphDecoder.java:654)
at jdk.graal.compiler/jdk.graal.compiler.replacements.PEGraphDecoder.decode(PEGraphDecoder.java:895)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysis.decodeGraph(InlineBeforeAnalysis.java:73)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:200)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:652)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:167)
... 15 more
Actual code at RetryConfigurableKt$withRetries$2 around line 126 is:
suspend fun <T> withRetries(
maxAttempts: Int,
backoff: IRetryBackoff = ConstantBackoff.ZERO,
timeout: Duration? = null,
logger: Logger? = null,
execLogLevel: RetryLogLevel = RetryLogLevel.INFO,
retryLogLevel: RetryLogLevel = RetryLogLevel.WARN,
exceedLogLevel: RetryLogLevel = RetryLogLevel.INFO,
block: suspend CoroutineScope.(index: Int) -> T
): T {
var index = 0
var lastCause: Exception
do {
try {
return if (timeout == null) {
logger?.log(execLogLevel, "[withRetries] launching") // line 126, if replaced by if (logger != null) logger.log, the issue moves to line 127
coroutineScope {
block(index).also {
logger?.log(execLogLevel, "[withRetries] succeeded")
}
}
} else {
logger?.log(execLogLevel, "[withRetries] launching with timeout ${timeout.inWholeMilliseconds}ms")
coroutineScope {
withTimeout(timeout) {
block(index).also {
logger?.log(execLogLevel, "[withRetries] succeeded")
}
}
}
}
} catch (e: TimeoutCancellationException) {
lastCause = e
if (handleException(++index, maxAttempts, backoff, logger, execLogLevel, retryLogLevel, exceedLogLevel, e)) {
break
}
} catch (e: CancellationException) {
throw e
} catch (e: Exception) {
lastCause = e
if (handleException(++index, maxAttempts, backoff, logger, execLogLevel, retryLogLevel, exceedLogLevel, e)) {
break
}
}
} while (coroutineContext.isActive)
throw TooManyAttemptsException(lastCause)
}
It is Kotlin code, using also Kotlin libraries, there are no explicit throws clauses.
Using the latest version of GraalVM can resolve many issues.
- I tried with the latest version of GraalVM.
GraalVM Version
java -version
openjdk version "23.0.1" 2024-10-15
OpenJDK Runtime Environment GraalVM CE 23.0.1+11.1 (build 23.0.1+11-jvmci-b01)
OpenJDK 64-Bit Server VM GraalVM CE 23.0.1+11.1 (build 23.0.1+11-jvmci-b01, mixed mode, sharing)
Operating System and Version
Darwin mac-N9M7V6WTXJ 24.2.0 Darwin Kernel Version 24.2.0: Fri Dec 6 18:56:34 PST 2024; root:xnu-11215.61.5~2/RELEASE_ARM64_T6020 arm64
Build Command
`graalvmNative {
binaries {
named("main") {
imageName.set("jarvis-app")
mainClass.set("sf.jarvis.JarvisApplication")
buildArgs.add("-O0")
buildArgs.add("--initialize-at-build-time=com.azure.core.util.logging.ClientLogger")
buildArgs.add("--initialize-at-build-time=org.slf4j.helpers")
buildArgs.add("--initialize-at-build-time=ch.qos.logback")
buildArgs.add("--initialize-at-build-time=com.fasterxml.jackson.core")
buildArgs.add("--initialize-at-build-time=org.xml.sax.helpers")
}
}
binaries.all {
buildArgs.add("--verbose")
}
}
`
./gradlew clean build :jarvis-application:nativeCompile
Expected Behavior
No error
Actual Behavior
Error
Steps to Reproduce
I am not sure how to reproduce the issue, I cannot share my project. But it happens 100% of time even with older version.
Additional Context
No response
Build Log Output and Error Messages
No response