-
Notifications
You must be signed in to change notification settings - Fork 3k
Use a stack to store the TCCL #47780
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
Use a stack to store the TCCL #47780
Conversation
52856a0 to
0ae7d5e
Compare
This comment has been minimized.
This comment has been minimized.
0ae7d5e to
cb46de5
Compare
This comment has been minimized.
This comment has been minimized.
|
Thanks a lot for this! I've relaunched CI in order to see if the failures are related or just flaky tests |
I had a green CI, but then I switched from I'll have a go at reproducing the camel failures locally. |
|
👌🏽 |
This comment has been minimized.
This comment has been minimized.
|
Actually, having looked at these failures locally, I'm confident it's unrelated to my changes. I'm not seeing the runtime error, instead I'm seeing a compilation error: In the CI, |
test-framework/junit5/src/main/java/io/quarkus/test/junit/launcher/ExecutionListener.java
Outdated
Show resolved
Hide resolved
…de paths both trying to do TCCL-ing
cb46de5 to
741719e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Status for workflow
|
| Status | Name | Step | Failures | Logs | Raw logs | Build scan |
|---|---|---|---|---|---|---|
| ✖ | Platform Tests - JDK 17 | Test Platform |
Failures | Logs | Raw logs | 🚧 |
Full information is available in the Build summary check run.
You can consult the Develocity build scans.
Failures
⚙️ Platform Tests - JDK 17 #
- Failing: Root module
📦 Root module
✖ Failed to execute goal io.quarkus:quarkus-platform-bom-maven-plugin:0.0.120:invoke-platform-project (build-platform-project) on project quarkus-platform-config: Failed to build the platform project, please consult the errors logged above.
📦 quarkus-platform/generated-platform-project/quarkus-camel/integration-tests/camel-quarkus-integration-test-kubernetes
✖ org.apache.camel.quarkus.component.kubernetes.it.KubernetesConfigMapTest. - History - More details - Source on GitHub
java.lang.NoClassDefFoundError: io/fabric8/kubernetes/client/server/mock/KubernetesServer
at java.base/java.lang.Class.getDeclaredFields0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3297)
at java.base/java.lang.Class.getDeclaredFields(Class.java:2371)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.ClassNotFoundException: io.fabric8.kubernetes.client.server.mock.KubernetesServer
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
✖ org.apache.camel.quarkus.component.kubernetes.it.KubernetesCustomResourceTest. - History - More details - Source on GitHub
java.lang.NoClassDefFoundError: io/fabric8/kubernetes/client/server/mock/KubernetesServer
at java.base/java.lang.Class.getDeclaredFields0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3297)
at java.base/java.lang.Class.getDeclaredFields(Class.java:2371)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.ClassNotFoundException: io.fabric8.kubernetes.client.server.mock.KubernetesServer
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
✖ org.apache.camel.quarkus.component.kubernetes.it.KubernetesDeploymentTest. - History - More details - Source on GitHub
java.lang.NoClassDefFoundError: io/fabric8/kubernetes/client/server/mock/KubernetesServer
at java.base/java.lang.Class.getDeclaredFields0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3297)
at java.base/java.lang.Class.getDeclaredFields(Class.java:2371)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.ClassNotFoundException: io.fabric8.kubernetes.client.server.mock.KubernetesServer
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
✖ org.apache.camel.quarkus.component.kubernetes.it.KubernetesJobTest. - History - More details - Source on GitHub
java.lang.NoClassDefFoundError: io/fabric8/kubernetes/client/server/mock/KubernetesServer
at java.base/java.lang.Class.getDeclaredFields0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3297)
at java.base/java.lang.Class.getDeclaredFields(Class.java:2371)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.ClassNotFoundException: io.fabric8.kubernetes.client.server.mock.KubernetesServer
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
✖ org.apache.camel.quarkus.component.kubernetes.it.KubernetesPodsTest. - History - More details - Source on GitHub
java.lang.NoClassDefFoundError: io/fabric8/kubernetes/client/server/mock/KubernetesServer
at java.base/java.lang.Class.getDeclaredFields0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3297)
at java.base/java.lang.Class.getDeclaredFields(Class.java:2371)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.ClassNotFoundException: io.fabric8.kubernetes.client.server.mock.KubernetesServer
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
✖ org.apache.camel.quarkus.component.kubernetes.it.KubernetesSecretTest. - History - More details - Source on GitHub
java.lang.NoClassDefFoundError: io/fabric8/kubernetes/client/server/mock/KubernetesServer
at java.base/java.lang.Class.getDeclaredFields0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredFields(Class.java:3297)
at java.base/java.lang.Class.getDeclaredFields(Class.java:2371)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.ClassNotFoundException: io.fabric8.kubernetes.client.server.mock.KubernetesServer
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
📦 quarkus-platform/generated-platform-project/quarkus-cxf/integration-tests/quarkus-cxf-integration-test-server
✖ io.quarkiverse.cxf.it.server.ServerThreadPoolStressTest.stress line 71 - History - More details - Source on GitHub
java.util.concurrent.ExecutionException: java.lang.RuntimeException: Failed to access [/home/runner/.m2/repository/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar] because the FileSystem has been closed
at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
at io.quarkiverse.cxf.it.server.ServerThreadPoolStressTest.stress(ServerThreadPoolStressTest.java:71)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at io.quarkus.test.junit.QuarkusTestExtension.runExtensionMethod(QuarkusTestExtension.java:994)
at io.quarkus.test.junit.QuarkusTestExtension.interceptTestMethod(QuarkusTestExtension.java:842)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
📦 quarkus-platform/generated-platform-project/quarkus-operator-sdk/integration-tests/quarkus-operator-sdk-integration-tests
✖ io.quarkiverse.operatorsdk.it.OperatorSDKResourceTest.allControllersShouldHaveAssociatedConfiguration - History - More details - Source on GitHub
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:662)
at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:757)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at io.quarkus.test.junit.TestResourceUtil$TestResourceManagerReflections.startReflectively(TestResourceUtil.java:217)
Flaky tests - Develocity
⚙️ JVM Integration Tests - JDK 21
📦 integration-tests/opentelemetry-grpc-only
✖ io.quarkus.it.opentelemetry.grpc.HelloGrpcClientTest.testHello - History
java.lang.RuntimeException: Failed to start quarkus-java.lang.RuntimeException
java.lang.RuntimeException: java.lang.RuntimeException: Failed to start quarkus
at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:662)
at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:757)
at java.base/java.util.Optional.orElseGet(Optional.java:364)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: java.lang.RuntimeException: Failed to start quarkus
at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
|
@holly-cummins does it make sense to keep the platform tests around if they are just going to be failing until Camel releases? I can imagine this will cause folks some confusion... |
I agree it's not ideal. They're only run if people opt-in by setting the |
|
Got it, makes sense. |
Used for resetting at the end of QuarkusTests and avoid having two code paths both trying to do TCCL-ing.
At first glance, #47657 looked simple. The cause was that we weren't resetting the TCCL back to to the system classloader at the end of quarkus test execution, so plain tests were then being run with the
QuarkusClassLoader, which did not work well.Digging into it, it became clear it was a bit more complex. By the time the
QuarkusTestExtensionmethods run, the TCCL is already set to be a runtime classloader, so any resetting is pointless. The pre-set of the TCCL was introduced in #47379. Even though it was my code it took me a while in the debugger to figure out where it was being set, so I've added some comments. The un-set in the extension listener should work to reset everything, but in nested tests, the 'old' classloader gets overwritten. I've switched to using a stack, which should help with this.I've also removed a whole bunch of TCCL-setting in
QuarkusTestExtension, since we now have the 'super-wrapper' around the whole test which sets and resets the TCCL. Having other TCCL-setting is a no-op and just adds to the code complexity.