quarkus
quarkus copied to clipboard
Speedup ContextInstances if there are null instances
This is an alternative to #38737 with no need of cutoff values and always performing fast-path unlocked checks, if possible, and lazy allocation of a ReentrantLock
.
In order to reduce the stack-map it has introduced smaller methods to remove/lazy allocate locks which are reused whenever possible
@Ladicek @mkouba
@mkouba I've added 92bc2e542a8f2d316bff0f71785f327ff9cd199a and update the Java code snippet to explain what is doing: it shouldn't be a big deal but it seems more correct to return only the value read, instead of performing an unguarded volatile read, there.
:waning_crescent_moon: This workflow status is outdated as a new workflow run has been triggered.
Status for workflow Quarkus CI
This is the status report for running Quarkus CI
on commit 8aa4ea2996fd5c19408c02bea75184aae2bc5759.
:white_check_mark: The latest workflow run for the pull request has completed successfully.
It should be safe to merge provided you have a look at the other checks in the summary.
:waning_crescent_moon: This workflow status is outdated as a new workflow run has been triggered.
Status for workflow Quarkus CI
This is the status report for running Quarkus CI
on commit be0d26d82ebb0ed690f9865290f6d20321a59284.
:white_check_mark: The latest workflow run for the pull request has completed successfully.
It should be safe to merge provided you have a look at the other checks in the summary.
Flaky tests - Develocity
:gear: Maven Tests - JDK 17
:package: integration-tests/maven
✖ io.quarkus.maven.it.DevMojoIT.testThatNewResourcesAreServed
- History
-
io.quarkus.maven.it.DevMojoIT expected "c49e23ed-1f09-4fa9-8547-22458659040b" but was "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." within 2 minutes.
-org.awaitility.core.ConditionTimeoutException
org.awaitility.core.ConditionTimeoutException: io.quarkus.maven.it.DevMojoIT expected "c49e23ed-1f09-4fa9-8547-22458659040b" but was "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." within 2 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AbstractHamcrestCondition.await(AbstractHamcrestCondition.java:86)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:985)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:691)
at io.quarkus.maven.it.DevMojoIT.testThatNewResourcesAreServed(DevMojoIT.java:967)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
✖ io.quarkus.maven.it.DevMojoIT.testThatNewResourcesAreServed
- History
-
io.quarkus.maven.it.DevMojoIT expected "c49e23ed-1f09-4fa9-8547-22458659040b" but was "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." within 2 minutes.
-org.awaitility.core.ConditionTimeoutException
org.awaitility.core.ConditionTimeoutException: io.quarkus.maven.it.DevMojoIT expected "c49e23ed-1f09-4fa9-8547-22458659040b" but was "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." within 2 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AbstractHamcrestCondition.await(AbstractHamcrestCondition.java:86)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:985)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:691)
at io.quarkus.maven.it.DevMojoIT.testThatNewResourcesAreServed(DevMojoIT.java:967)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Thanks @mkouba yep, in case the micro doesn't impact, I suggest to perform one where the context instance is allocated on the fly and have different instance fields while using a parameter to decide how many to compute, and including a remove at the end of the usage life-cycle ; having such benchmark will help capturing the actual possible behaviours for request scoped beans, which seems to be allocated, computed, removed in the hot path
So I ran the microbenchmarks and the only benchmark that shows significant improvement is the RequestContextActivationBenchmark
which merely tests request context activation/deactivation, no bean operations - and it's expected due to lazy init of Lock
. The throughtput is doubled!
The ContextProviderBenchmark
that tests ArcContextProvider
(SmallRye Context Propagation integration) shows a decent improvement too (because it does not do much more than RequestContextActivationBenchmark
). So this PR could slightly improve the performance in use cases where SR Context Propagation is used extensively.
However, the RequestContextBenchmark, which activates the context, invokes client proxies of 5 @RequestScoped
beans and finally terminates the context, shows no significant change. And I think that it's expected too because this PR does not improve the ContextInstances#computeIfAbsent()
method which is critical for this benchmark. @franz1981 is the use case you describe in the previous comment different?
@mkouba
@franz1981 is the use case you describe in the previous comment different?
Exactly and happy that you already had crafted other benchmarks which capture the use case (which is farly realistic for the request scoped case) of the changes sent here, thanks again for checking!!!!
Probably RequestContextBenchmark, could have been relevant if the benchmark had a parameter to decide how many of these beans are computed eg for a total of 5 beans, just 1(,2,3,4,5) is computed. It will impact the removal as well, given that this pr remove only what is actually computed, too.
Just for reference
this was the call-stack of a compute case with 1/5 beans were computed (hence saving 3 * 4 = 12 atomic volatile ops in the hot path)
Probably RequestContextBenchmark, could have been relevant if the benchmark had a parameter to decide how many of these beans are computed eg for a total of 5 beans, just 1(,2,3,4,5) is computed. It will impact the removal as well, given that this pr remove only what is actually computed, too.
So I've tried to adapt the RequestContextBenchmark
in a way that:
- The app contains 10 request scoped beans
- We always test 15 client proxy invocations but in three variants:
- 1 of the 10 beans is used (i.e. instantiated in
ContextInstances.computeIfAbsent()
), - 3 of the 10 beans are used, and
- 5 of the 10 beans are used.
- 1 of the 10 beans is used (i.e. instantiated in
And this PR indeed increased the throughput in the first scenario (1/10) by ~ 40%, in the second (3/10) by ~ 15% and the results of the third are more or less the same.
In other words, the more request scoped beans exist in the app and the less beans are actually used in the benchmark the better throughput with this PR. And since it's very likely that only a fraction of all request scoped beans is used in a single request of a "real world" app I think that it's really a great improvement. Good job!
I'm adding a note here to help ourselves of the future; in order to "fix" the existing impl and this PR in the case where a compute is started after (no need to be concurrent really) it (regardless the remove has found any value to remove, before):
- compute always have to check for any existing invalidation before starting
- after compute has happened, in case it has stored any value, it should check again the invalidation status, and if
true
, should loop till removingnull
out everything
The last loop is necessary because other(s) concurrent compute can end up "recomputing" the value again, so it's important for them to keep on trying to remove the value till is stable as null
.
This mechanism is to prevent @PreDestroy
to NOT be called because the remove will read a null
volatile instance value, and the compute will set it right after, without cleaning it up.
@mkouba @Ladicek I know that's crazy but i can easily forget this concurrent stuff, so let me brain dump this here
:waning_crescent_moon: This workflow status is outdated as a new workflow run has been triggered.
Status for workflow Quarkus CI
This is the status report for running Quarkus CI
on commit 0608ddd0e075ec8b813d9c9694cf9232a14e8639.
Failing Jobs
Status | Name | Step | Failures | Logs | Raw logs | Build scan |
---|---|---|---|---|---|---|
:heavy_check_mark: | JVM Tests - JDK 17 | Logs | Raw logs | :construction: | ||
✖ | JVM Tests - JDK 17 Windows | Build |
Failures | Logs | Raw logs | :construction: |
:heavy_check_mark: | JVM Tests - JDK 21 | Logs | Raw logs | :construction: |
Full information is available in the Build summary check run.
Failures
:gear: JVM Tests - JDK 17 Windows #
- Failing: extensions/smallrye-reactive-messaging-amqp/deployment
! Skipped: integration-tests/reactive-messaging-amqp integration-tests/virtual-threads/amqp-virtual-threads
:package: extensions/smallrye-reactive-messaging-amqp/deployment
✖ io.quarkus.smallrye.reactivemessaging.amqp.AnonymousAmqpTest.test
line 30
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with io.quarkus.smallrye.reactivemessaging.amqp.AnonymousAmqpTest was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:985)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:954)
at io.quarkus.smallrye.reactivemessaging.amqp.AnonymousAmqpTest.test(AnonymousAmqpTest.java:30)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
✖ io.quarkus.smallrye.reactivemessaging.amqp.SecuredAmqpTest.test
line 28
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with io.quarkus.smallrye.reactivemessaging.amqp.SecuredAmqpTest was not fulfilled within 10 seconds.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:985)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:954)
at io.quarkus.smallrye.reactivemessaging.amqp.SecuredAmqpTest.test(SecuredAmqpTest.java:28)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
✖ io.quarkus.smallrye.reactivemessaging.amqp.devmode.AmqpDevModeTest.testCodeUpdate
line 44
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: Condition with io.quarkus.smallrye.reactivemessaging.amqp.devmode.AmqpDevModeTest was not fulfilled within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)
at org.awaitility.core.CallableCondition.await(CallableCondition.java:26)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:985)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:954)
at io.quarkus.smallrye.reactivemessaging.amqp.devmode.AmqpDevModeTest.testCodeUpdate(AmqpDevModeTest.java:44)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
✖ io.quarkus.smallrye.reactivemessaging.amqp.devmode.nohttp.AmqpDevModeNoHttpTest.testConsumerUpdate
line 77
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException:
Assertion condition defined as a io.quarkus.smallrye.reactivemessaging.amqp.devmode.nohttp.AmqpDevModeNoHttpTest
Expecting size of:
[]
to be greater than or equal to 5 but was 0 within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:119)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:31)
✖ io.quarkus.smallrye.reactivemessaging.amqp.devmode.nohttp.AmqpDevModeNoHttpTest.testProducerUpdate
line 48
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException:
Assertion condition defined as a io.quarkus.smallrye.reactivemessaging.amqp.devmode.nohttp.AmqpDevModeNoHttpTest
Expecting size of:
[]
to be greater than or equal to 5 but was 0 within 1 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:119)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:31)
Flaky tests - Develocity
:gear: JVM Tests - JDK 17
:package: extensions/smallrye-reactive-messaging-kafka/deployment
✖ io.quarkus.smallrye.reactivemessaging.kafka.deployment.dev.KafkaDevServicesDevModeTestCase.sseStream
- History
-
Assertion condition defined as a io.quarkus.smallrye.reactivemessaging.kafka.deployment.dev.KafkaDevServicesDevModeTestCase Expecting size of: [] to be greater than or equal to 2 but was 0 within 10 seconds.
-org.awaitility.core.ConditionTimeoutException
org.awaitility.core.ConditionTimeoutException:
Assertion condition defined as a io.quarkus.smallrye.reactivemessaging.kafka.deployment.dev.KafkaDevServicesDevModeTestCase
Expecting size of:
[]
to be greater than or equal to 2 but was 0 within 10 seconds.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:119)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:31)
:waning_crescent_moon: This workflow status is outdated as a new workflow run has been triggered.
Status for workflow Quarkus CI
This is the status report for running Quarkus CI
on commit c256a0cd4cdb473bbe1172f20d0d889b31067f38.
:white_check_mark: The latest workflow run for the pull request has completed successfully.
It should be safe to merge provided you have a look at the other checks in the summary.
Flaky tests - Develocity
:gear: JVM Tests - JDK 17
:package: integration-tests/opentelemetry
✖ io.quarkus.it.opentelemetry.EndUserEnabledTest.baseTest
- History
-
AttributesMap{data={net.protocol.name=http, http.scheme=http, http.method=GET, code.namespace=io.quarkus.it.opentelemetry.util.EndUserResource, http.route=/otel/enduser, http.status_code=200, http.client_ip=127.0.0.1, net.host.port=8081, http.response_content_length=0, net.host.name=localhost, user_agent.original=Apache-HttpClient/4.5.14 (Java/17.0.10), http.target=/otel/enduser, code.function=dummy}, capacity=128, totalAddedValues=13} ==> expected: <testUser> but was: <null>
-org.opentest4j.AssertionFailedError
org.opentest4j.AssertionFailedError: AttributesMap{data={net.protocol.name=http, http.scheme=http, http.method=GET, code.namespace=io.quarkus.it.opentelemetry.util.EndUserResource, http.route=/otel/enduser, http.status_code=200, http.client_ip=127.0.0.1, net.host.port=8081, http.response_content_length=0, net.host.name=localhost, user_agent.original=Apache-HttpClient/4.5.14 (Java/17.0.10), http.target=/otel/enduser, code.function=dummy}, capacity=128, totalAddedValues=13} ==> expected: <testUser> but was: <null>
at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1156)
at io.quarkus.it.opentelemetry.EndUserEnabledTest.evaluateAttributes...
Ok @geoand this should be a very good one, once merged. Just need to make sure the test failures are all flaky ones
:waning_crescent_moon: This workflow status is outdated as a new workflow run has been triggered.
Status for workflow Quarkus CI
This is the status report for running Quarkus CI
on commit a86cddbe5a7b15f7dec785cae0b0508b3e6ed6b6.
Failing Jobs
Status | Name | Step | Failures | Logs | Raw logs | Build scan |
---|---|---|---|---|---|---|
✖ | Maven Tests - JDK 17 | Build |
Failures | Logs | Raw logs | :construction: |
:heavy_check_mark: | Maven Tests - JDK 17 Windows | Logs | Raw logs | :construction: |
Full information is available in the Build summary check run.
Failures
:gear: Maven Tests - JDK 17 #
- Failing: integration-tests/maven
:package: integration-tests/maven
✖ io.quarkus.maven.it.DevMojoIT.testThatNewResourcesAreServed
line 967
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: io.quarkus.maven.it.DevMojoIT expected "51968f98-2e24-4e25-821a-1bc116d5ba72" but was "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." within 2 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AbstractHamcrestCondition.await(AbstractHamcrestCondition.java:86)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:985)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:691)
at io.quarkus.maven.it.DevMojoIT.testThatNewResourcesAreServed(DevMojoIT.java:967)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
✖ io.quarkus.maven.it.DevMojoIT.testThatNewResourcesAreServed
line 967
- History - More details - Source on GitHub
org.awaitility.core.ConditionTimeoutException: io.quarkus.maven.it.DevMojoIT expected "51968f98-2e24-4e25-821a-1bc116d5ba72" but was "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." within 2 minutes.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AbstractHamcrestCondition.await(AbstractHamcrestCondition.java:86)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:985)
at org.awaitility.core.ConditionFactory.until(ConditionFactory.java:691)
at io.quarkus.maven.it.DevMojoIT.testThatNewResourcesAreServed(DevMojoIT.java:967)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Flaky tests - Develocity
:gear: JVM Tests - JDK 21
:package: extensions/smallrye-reactive-messaging-kafka/deployment
✖ io.quarkus.smallrye.reactivemessaging.kafka.deployment.dev.KafkaDevServicesDevModeTestCase.sseStream
- History
-
Assertion condition Expecting size of: [] to be greater than or equal to 2 but was 0 within 10 seconds.
-org.awaitility.core.ConditionTimeoutException
org.awaitility.core.ConditionTimeoutException:
Assertion condition
Expecting size of:
[]
to be greater than or equal to 2 but was 0 within 10 seconds.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:119)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:31)
https://github.com/franz1981/quarkus/actions/runs/7941041918 seems to show that the failure reported here is real or another flaky test
:waning_crescent_moon: This workflow status is outdated as a new workflow run has been triggered.
Status for workflow Quarkus CI
This is the status report for running Quarkus CI
on commit ab94de71b22aa921114f5c175f2a53414cfcb8cb.
:white_check_mark: The latest workflow run for the pull request has completed successfully.
It should be safe to merge provided you have a look at the other checks in the summary.
Flaky tests - Develocity
:gear: JVM Tests - JDK 17
:package: integration-tests/opentelemetry
✖ io.quarkus.it.opentelemetry.EndUserEnabledTest.baseTest
- History
-
AttributesMap{data={code.namespace=io.quarkus.it.opentelemetry.util.EndUserResource, http.route=/otel/enduser, http.response_content_length=0, net.protocol.name=http, net.host.port=8081, http.status_code=200, http.scheme=http, http.method=GET, net.host.name=localhost, user_agent.original=Apache-HttpClient/4.5.14 (Java/17.0.10), http.target=/otel/enduser, code.function=dummy, http.client_ip=127.0.0.1}, capacity=128, totalAddedValues=13} ==> expected: <testUser> but was: <null>
-org.opentest4j.AssertionFailedError
org.opentest4j.AssertionFailedError: AttributesMap{data={code.namespace=io.quarkus.it.opentelemetry.util.EndUserResource, http.route=/otel/enduser, http.response_content_length=0, net.protocol.name=http, net.host.port=8081, http.status_code=200, http.scheme=http, http.method=GET, net.host.name=localhost, user_agent.original=Apache-HttpClient/4.5.14 (Java/17.0.10), http.target=/otel/enduser, code.function=dummy, http.client_ip=127.0.0.1}, capacity=128, totalAddedValues=13} ==> expected: <testUser> but was: <null>
at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1156)
at io.quarkus.it.opentelemetry.EndUserEnabledTest.evaluateAttributes...
@mkouba this looks good, WDYT?
:waning_crescent_moon: This workflow status is outdated as a new workflow run has been triggered.
Status for workflow Quarkus CI
This is the status report for running Quarkus CI
on commit b0b28a4fcb4a7324bddc1df8c331711cf5ecab01.
:white_check_mark: The latest workflow run for the pull request has completed successfully.
It should be safe to merge provided you have a look at the other checks in the summary.
Flaky tests - Develocity
:gear: JVM Tests - JDK 17
:package: extensions/smallrye-reactive-messaging-kafka/deployment
✖ io.quarkus.smallrye.reactivemessaging.kafka.deployment.dev.KafkaDevServicesDevModeTestCase.sseStream
- History
-
Assertion condition defined as a io.quarkus.smallrye.reactivemessaging.kafka.deployment.dev.KafkaDevServicesDevModeTestCase Expecting size of: [] to be greater than or equal to 2 but was 0 within 10 seconds.
-org.awaitility.core.ConditionTimeoutException
org.awaitility.core.ConditionTimeoutException:
Assertion condition defined as a io.quarkus.smallrye.reactivemessaging.kafka.deployment.dev.KafkaDevServicesDevModeTestCase
Expecting size of:
[]
to be greater than or equal to 2 but was 0 within 10 seconds.
at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:167)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:119)
at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:31)
:gear: JVM Tests - JDK 21
:package: integration-tests/opentelemetry
✖ io.quarkus.it.opentelemetry.EndUserEnabledTest.baseTest
- History
-
AttributesMap{data={http.client_ip=127.0.0.1, http.target=/otel/enduser, code.function=dummy, net.host.name=localhost, user_agent.original=Apache-HttpClient/4.5.14 (Java/21.0.2), http.method=GET, http.scheme=http, net.protocol.name=http, net.host.port=8081, http.route=/otel/enduser, http.response_content_length=0, code.namespace=io.quarkus.it.opentelemetry.util.EndUserResource, http.status_code=200}, capacity=128, totalAddedValues=13} ==> expected: <testUser> but was: <null>
-org.opentest4j.AssertionFailedError
org.opentest4j.AssertionFailedError: AttributesMap{data={http.client_ip=127.0.0.1, http.target=/otel/enduser, code.function=dummy, net.host.name=localhost, user_agent.original=Apache-HttpClient/4.5.14 (Java/21.0.2), http.method=GET, http.scheme=http, net.protocol.name=http, net.host.port=8081, http.route=/otel/enduser, http.response_content_length=0, code.namespace=io.quarkus.it.opentelemetry.util.EndUserResource, http.status_code=200}, capacity=128, totalAddedValues=13} ==> expected: <testUser> but was: <null>
at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:1156)
at io.quarkus.it.opentelemetry.EndUserEnabledTest.evaluateAttributes(...
Done @mkouba and @geoand waiting the CI again, although I've just changed a comment and rebased)
Status for workflow Quarkus CI
This is the status report for running Quarkus CI
on commit 9905b94359dd00c232dfe6ad4d45753ce353ea7f.
:white_check_mark: The latest workflow run for the pull request has completed successfully.
It should be safe to merge provided you have a look at the other checks in the summary.