quarkus: Devmode reload broken, NPE in `io.q.deployment.dev.ClassComparisonUtil` - "Cannot invoke "org.jboss.jandex.ClassInfo.flags()" because "old" is null"

Describe the bug

Suddenly, the below has started happening. This is only in the last few days, and I’m not sure if I can recall any change which prompted it:

     13:26:36 ERROR traceId=575186d570bcca1e91df6c43c102e6c5, parentId=, spanId=6f2a1952011172f6, sampled=true [io.qu.de.de.RuntimeUpdatesProcessor] (vert.x-worker-thread-0) Failed to replace classes via instrumentation: java.lang.NullPointerException: Cannot invoke "org.jboss.jandex.ClassInfo.flags()" because "old" is null
        at io.quarkus.deployment.dev.ClassComparisonUtil.isSameStructure(ClassComparisonUtil.java:23)
        at io.quarkus.deployment.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:497)
        at io.quarkus.deployment.dev.RuntimeUpdatesProcessor.doScan(RuntimeUpdatesProcessor.java:436)
        at io.quarkus.vertx.http.runtime.devmode.VertxHttpHotReplacementSetup$4.handle(VertxHttpHotReplacementSetup.java:152)
        at io.quarkus.vertx.http.runtime.devmode.VertxHttpHotReplacementSetup$4.handle(VertxHttpHotReplacementSetup.java:139)
        at io.vertx.core.impl.ContextBase.lambda$null$0(ContextBase.java:137)
        at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264)
        at io.vertx.core.impl.ContextBase.lambda$executeBlocking$1(ContextBase.java:135)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
        at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
        at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:833)

What is interesting is that this only seems to happen when launched via ./gradlew quarkusDev If I launch Quarkus by clicking “Start” in IntelliJ through the IDE launcher, it doesn’t happen

Unfortunately, attaching a reproducer may be hard because the codebase isn’t open-source and I’m not sure how to minimize it while removing all confidential code and keeping the same behavior 🙁

Expected behavior

No response

Actual behavior

No response

How to Reproduce?

No response

Output of uname -a or ver

Microsoft Windows [Version 10.0.22622.601]

Output of java -version

18

GraalVM version (if different from Java)

No response

Quarkus version or git rev

2.13.0-Final

Build tool (ie. output of mvnw --version or gradlew --version)

Gradle v7.5.1

Additional information

No response

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 19 (19 by maintainers)

Most upvoted comments

Hahaha.

It shouldn’t be because conceptually it does not do anything weird, but 🤷🏼

cc @aloubyansky in case he has any ideas

How would we do this?

quarkus.live-reload.instrumentation=false (which is the default however)

Yeah that definitely gets my “strangest Quarkus bug I’ve ever encountered” trophy 🏆 🤣

There could certainly be a bigger issue at play, but we can try the guard and see if we get lucky 🙂

Very weird. I don’t see how old can be null here, although it would be trivial to guard against this case.