quarkusio / quarkus-quickstarts

Quarkus quickstart code
https://quarkus.io
Apache License 2.0
1.95k stars 1.45k forks source link

All amazon tests hang, when running on java 21 #1406

Closed fedinskiy closed 6 months ago

fedinskiy commented 6 months ago

I use branch 3.8

Steps to reproduce:

  1. sdk use java 17.0.10-tem
  2. mvn clean verify -Dquarkus-plugin.version=3.8.3 -Dquarkus.platform.version=3.8.3 -pl amazon-dynamodb-quickstart/ — successful build in ~minute
  3. sdk use java 21.0.2-tem
  4. mvn clean verify -Dquarkus-plugin.version=3.8.3 -Dquarkus.platform.version=3.8.3 -pl amazon-dynamodb-quickstart/ Fails with the following error:
    @QuarkusTest has detected a hang, as there has been no test activity in PT10M
    To configure this timeout use the quarkus.test.hang-detection-timeout config property
    A stack trace is below to help diagnose the potential hang
    === Stack Trace ===
    Thread main: TIMED_WAITING
    Stack:
    java.base@21.0.2/jdk.internal.misc.Unsafe.park(Native Method)
    java.base@21.0.2/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
    org.jboss.threads.EnhancedQueueExecutor.awaitTermination(EnhancedQueueExecutor.java:920)
    software.amazon.awssdk.utils.ScheduledExecutorUtils$UnmanagedScheduledExecutorService.awaitTermination(ScheduledExecutorUtils.java:85)
    java.base@21.0.2/java.util.concurrent.ExecutorService.close(ExecutorService.java:417)
    software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
    software.amazon.awssdk.utils.IoUtils.closeIfCloseable(IoUtils.java:87)
    software.amazon.awssdk.utils.AttributeMap.lambda$close$0(AttributeMap.java:87)
    software.amazon.awssdk.utils.AttributeMap$$Lambda/0x00007f3460d04d60.accept(Unknown Source)
    java.base@21.0.2/java.util.HashMap$Values.forEach(HashMap.java:1073)
    software.amazon.awssdk.utils.AttributeMap.close(AttributeMap.java:87)
    software.amazon.awssdk.core.client.config.SdkClientConfiguration.close(SdkClientConfiguration.java:79)
    software.amazon.awssdk.core.internal.http.HttpClientDependencies.close(HttpClientDependencies.java:80)
    software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient.close(AmazonSyncHttpClient.java:76)
    software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.close(BaseSyncClientHandler.java:88)
    software.amazon.awssdk.services.dynamodb.DefaultDynamoDbClient.close(DefaultDynamoDbClient.java:6611)
    io.quarkus.amazon.dynamodb.runtime.DynamodbClientProducer.destroy(DynamodbClientProducer.java:49)
    io.quarkus.amazon.dynamodb.runtime.DynamodbClientProducer_Bean.doDestroy(Unknown Source)
    io.quarkus.amazon.dynamodb.runtime.DynamodbClientProducer_Bean.destroy(Unknown Source)
    io.quarkus.amazon.dynamodb.runtime.DynamodbClientProducer_Bean.destroy(Unknown Source)
    io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:78)
    io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:26)
    io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:102)
    io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:455)
    io.quarkus.arc.Arc.shutdown(Arc.java:65)
    io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:53)
    io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84)
    io.quarkus.runtime.StartupContext.close(StartupContext.java:73)
    io.quarkus.runner.ApplicationImpl.doStop(Unknown Source)
    io.quarkus.runtime.Application.stop(Application.java:208)
    io.quarkus.runtime.Application.stop(Application.java:155)
    io.quarkus.runtime.Application.close(Application.java:137)
    io.quarkus.runner.bootstrap.StartupActionImpl$5.close(StartupActionImpl.java:296)
    io.quarkus.runner.bootstrap.RunningQuarkusApplicationImpl.close(RunningQuarkusApplicationImpl.java:35)
    app//io.quarkus.test.junit.QuarkusTestExtension$4.close(QuarkusTestExtension.java:286)
    app//io.quarkus.test.junit.QuarkusTestExtension$ExtensionState.doClose(QuarkusTestExtension.java:1232)
    app//io.quarkus.test.junit.QuarkusTestExtensionState.close(QuarkusTestExtensionState.java:42)
    app//org.junit.jupiter.engine.descriptor.AbstractExtensionContext.lambda$static$0(AbstractExtensionContext.java:45)
    app//org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda/0x00007f34600bb820.close(Unknown Source)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue.close(NamespacedHierarchicalStore.java:333)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue.access$800(NamespacedHierarchicalStore.java:317)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore.lambda$close$3(NamespacedHierarchicalStore.java:98)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00007f3460cb88e8.execute(Unknown Source)
    app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore.lambda$close$4(NamespacedHierarchicalStore.java:98)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00007f3460cb86b8.accept(Unknown Source)
    java.base@21.0.2/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
    java.base@21.0.2/java.util.stream.SortedOps$RefSortingSink$$Lambda/0x00007f3460070158.accept(Unknown Source)
    java.base@21.0.2/java.util.ArrayList.forEach(ArrayList.java:1596)
    java.base@21.0.2/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)
    java.base@21.0.2/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
    java.base@21.0.2/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
    java.base@21.0.2/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
    java.base@21.0.2/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    java.base@21.0.2/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    java.base@21.0.2/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    java.base@21.0.2/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    java.base@21.0.2/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore.close(NamespacedHierarchicalStore.java:98)
    app//org.junit.jupiter.engine.descriptor.AbstractExtensionContext.close(AbstractExtensionContext.java:87)
    app//org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.close(JupiterEngineExecutionContext.java:53)
    app//org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor.cleanUp(JupiterEngineDescriptor.java:70)
    app//org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor.cleanUp(JupiterEngineDescriptor.java:31)
    app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$cleanUp$10(NodeTestTask.java:167)
    app//org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00007f3460cb6ce0.execute(Unknown Source)
    app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    app//org.junit.platform.engine.support.hierarchical.NodeTestTask.cleanUp(NodeTestTask.java:167)
    app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:98)
    app//@QuarkusTest has detected a hang, as there has been no test activity in PT10M
    To configure this timeout use the quarkus.test.hang-detection-timeout config property
    A stack trace is below to help diagnose the potential hang
    === Stack Trace ===
    Thread main: TIMED_WAITING
    Stack:
    java.base@21.0.2/jdk.internal.misc.Unsafe.park(Native Method)
    java.base@21.0.2/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269)
    org.jboss.threads.EnhancedQueueExecutor.awaitTermination(EnhancedQueueExecutor.java:920)
    software.amazon.awssdk.utils.ScheduledExecutorUtils$UnmanagedScheduledExecutorService.awaitTermination(ScheduledExecutorUtils.java:85)
    java.base@21.0.2/java.util.concurrent.ExecutorService.close(ExecutorService.java:417)
    software.amazon.awssdk.utils.IoUtils.closeQuietly(IoUtils.java:70)
    software.amazon.awssdk.utils.IoUtils.closeIfCloseable(IoUtils.java:87)
    software.amazon.awssdk.utils.AttributeMap.lambda$close$0(AttributeMap.java:87)
    software.amazon.awssdk.utils.AttributeMap$$Lambda/0x00007f3460d04d60.accept(Unknown Source)
    java.base@21.0.2/java.util.HashMap$Values.forEach(HashMap.java:1073)
    software.amazon.awssdk.utils.AttributeMap.close(AttributeMap.java:87)
    software.amazon.awssdk.core.client.config.SdkClientConfiguration.close(SdkClientConfiguration.java:79)
    software.amazon.awssdk.core.internal.http.HttpClientDependencies.close(HttpClientDependencies.java:80)
    software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient.close(AmazonSyncHttpClient.java:76)
    software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.close(BaseSyncClientHandler.java:88)
    software.amazon.awssdk.services.dynamodb.DefaultDynamoDbClient.close(DefaultDynamoDbClient.java:6611)
    io.quarkus.amazon.dynamodb.runtime.DynamodbClientProducer.destroy(DynamodbClientProducer.java:49)
    io.quarkus.amazon.dynamodb.runtime.DynamodbClientProducer_Bean.doDestroy(Unknown Source)
    io.quarkus.amazon.dynamodb.runtime.DynamodbClientProducer_Bean.destroy(Unknown Source)
    io.quarkus.amazon.dynamodb.runtime.DynamodbClientProducer_Bean.destroy(Unknown Source)
    io.quarkus.arc.impl.AbstractInstanceHandle.destroyInternal(AbstractInstanceHandle.java:78)
    io.quarkus.arc.impl.ContextInstanceHandleImpl.destroy(ContextInstanceHandleImpl.java:26)
    io.quarkus.arc.impl.AbstractSharedContext.destroy(AbstractSharedContext.java:102)
    io.quarkus.arc.impl.ArcContainerImpl.shutdown(ArcContainerImpl.java:455)
    io.quarkus.arc.Arc.shutdown(Arc.java:65)
    io.quarkus.arc.runtime.ArcRecorder$1.run(ArcRecorder.java:53)
    io.quarkus.runtime.StartupContext.runAllInReverseOrder(StartupContext.java:84)
    io.quarkus.runtime.StartupContext.close(StartupContext.java:73)
    io.quarkus.runner.ApplicationImpl.doStop(Unknown Source)
    io.quarkus.runtime.Application.stop(Application.java:208)
    io.quarkus.runtime.Application.stop(Application.java:155)
    io.quarkus.runtime.Application.close(Application.java:137)
    io.quarkus.runner.bootstrap.StartupActionImpl$5.close(StartupActionImpl.java:296)
    io.quarkus.runner.bootstrap.RunningQuarkusApplicationImpl.close(RunningQuarkusApplicationImpl.java:35)
    app//io.quarkus.test.junit.QuarkusTestExtension$4.close(QuarkusTestExtension.java:286)
    app//io.quarkus.test.junit.QuarkusTestExtension$ExtensionState.doClose(QuarkusTestExtension.java:1232)
    app//io.quarkus.test.junit.QuarkusTestExtensionState.close(QuarkusTestExtensionState.java:42)
    app//org.junit.jupiter.engine.descriptor.AbstractExtensionContext.lambda$static$0(AbstractExtensionContext.java:45)
    app//org.junit.jupiter.engine.descriptor.AbstractExtensionContext$$Lambda/0x00007f34600bb820.close(Unknown Source)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue.close(NamespacedHierarchicalStore.java:333)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore$EvaluatedValue.access$800(NamespacedHierarchicalStore.java:317)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore.lambda$close$3(NamespacedHierarchicalStore.java:98)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00007f3460cb88e8.execute(Unknown Source)
    app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore.lambda$close$4(NamespacedHierarchicalStore.java:98)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore$$Lambda/0x00007f3460cb86b8.accept(Unknown Source)
    java.base@21.0.2/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
    java.base@21.0.2/java.util.stream.SortedOps$RefSortingSink$$Lambda/0x00007f3460070158.accept(Unknown Source)
    java.base@21.0.2/java.util.ArrayList.forEach(ArrayList.java:1596)
    java.base@21.0.2/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)
    java.base@21.0.2/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
    java.base@21.0.2/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
    java.base@21.0.2/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
    java.base@21.0.2/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    java.base@21.0.2/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    java.base@21.0.2/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    java.base@21.0.2/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    java.base@21.0.2/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
    app//org.junit.platform.engine.support.store.NamespacedHierarchicalStore.close(NamespacedHierarchicalStore.java:98)
    app//org.junit.jupiter.engine.descriptor.AbstractExtensionContext.close(AbstractExtensionContext.java:87)
    app//org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.close(JupiterEngineExecutionContext.java:53)
    app//org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor.cleanUp(JupiterEngineDescriptor.java:70)
    app//org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor.cleanUp(JupiterEngineDescriptor.java:31)
    app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$cleanUp$10(NodeTestTask.java:167)
    app//org.junit.platform.engine.support.hierarchical.NodeTestTask$$Lambda/0x00007f3460cb6ce0.execute(Unknown Source)
    app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    app//org.junit.platform.engine.support.hierarchical.NodeTestTask.cleanUp(NodeTestTask.java:167)
    app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:98)
    app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
    app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda/0x00007f34600af6b8.accept(Unknown Source)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
    app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
    app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
    app//org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
    app//org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:56)
    app//org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:184)
    app//org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:148)
    app//org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122)
    app//org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
    app//org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
    app//org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
    app//org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
    Thread Reference Handler: RUNNABLE
    org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
    app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator$$Lambda/0x00007f34600af6b8.accept(Unknown Source)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
    app//org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
    app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
    app//org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
    app//org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
    app//org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:56)
    app//org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:184)
    app//org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:148)
    app//org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122)
    app//org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
    app//org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
    app//org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
    app//org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
    Thread Reference Handler: RUNNABLE
    <More Stacktraces>
fedinskiy commented 6 months ago

Same problem affects all amazon quickstarts: !amazon-dynamodb-quickstart,amazon-kms-quickstart,amazon-s3-quickstart,amazon-ses-quickstart,amazon-sns-quickstart,amazon-sqs-quickstart,amazon-ssm-quickstart

fedinskiy commented 6 months ago

Things, that help:

  1. Upgrading quarkus-amazon-services.version to 2.13.1 (this is done in main branch)
  2. Using quarkus-amazon-services-bom from quarkus.platform.group-id and not from io.quarkiverse.amazonservices (this is done in code.quarkus)
fedinskiy commented 6 months ago

@aloubyansky I can prepare a fix for this issue, but I need to know, which way is preferred: upgrading to 2.13.1 or using platform instead of quakiverse.

aloubyansky commented 6 months ago

Always using the platform BOM

aloubyansky commented 6 months ago

if it's a compatible version upgrade then we should consider it too

aloubyansky commented 6 months ago

The downside of using the platform BOM property is it won't be testable with io.quarkus as the platform groupId though. But otherwise that's how it should be.

fedinskiy commented 6 months ago

@aloubyansky documentation[1] for these extensions says "A newer version of this extension has been released with the group id io.quarkiverse.amazonservices", so I presume, that using the io.quarkus.platform version is not recommended anymore.

The fix is here: https://github.com/quarkusio/quarkus-quickstarts/pull/1407

[1] https://quarkus.io/extensions/io.quarkus/quarkus-amazon-sqs/

aloubyansky commented 6 months ago

The groupId of the extension artifacts is still the quarkiverse one. The quarkiverse BOM though is not aligned with the platform, so as long as a user is interested in using a dependency aligned version of the BOM for these extensions, the platform BOM should be used.

fedinskiy commented 6 months ago

Go it, switched to io.quarkus.platform

fedinskiy commented 6 months ago

Too late, the previous version got merged :)