quarkus icon indicating copy to clipboard operation
quarkus copied to clipboard

Speedup ContextInstances if there are null instances

Open franz1981 opened this issue 6 months ago • 15 comments

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

franz1981 avatar Feb 13 '24 15:02 franz1981

@Ladicek @mkouba

franz1981 avatar Feb 13 '24 15:02 franz1981

@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.

franz1981 avatar Feb 13 '24 16:02 franz1981


: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.

quarkus-bot[bot] avatar Feb 13 '24 21:02 quarkus-bot[bot]


: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)

quarkus-bot[bot] avatar Feb 14 '24 16:02 quarkus-bot[bot]

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

franz1981 avatar Feb 15 '24 12:02 franz1981

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 avatar Feb 15 '24 15:02 mkouba

@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

image

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)

franz1981 avatar Feb 15 '24 16:02 franz1981

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:

  1. The app contains 10 request scoped beans
  2. We always test 15 client proxy invocations but in three variants:
    1. 1 of the 10 beans is used (i.e. instantiated in ContextInstances.computeIfAbsent()),
    2. 3 of the 10 beans are used, and
    3. 5 of the 10 beans are used.

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!

mkouba avatar Feb 16 '24 09:02 mkouba

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):

  1. compute always have to check for any existing invalidation before starting
  2. after compute has happened, in case it has stored any value, it should check again the invalidation status, and if true, should loop till removing null 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

franz1981 avatar Feb 16 '24 12:02 franz1981


: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)

quarkus-bot[bot] avatar Feb 16 '24 13:02 quarkus-bot[bot]


: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...

quarkus-bot[bot] avatar Feb 16 '24 17:02 quarkus-bot[bot]

Ok @geoand this should be a very good one, once merged. Just need to make sure the test failures are all flaky ones

franz1981 avatar Feb 17 '24 10:02 franz1981


: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)

quarkus-bot[bot] avatar Feb 17 '24 14:02 quarkus-bot[bot]

https://github.com/franz1981/quarkus/actions/runs/7941041918 seems to show that the failure reported here is real or another flaky test

franz1981 avatar Feb 17 '24 17:02 franz1981


: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...

quarkus-bot[bot] avatar Feb 17 '24 21:02 quarkus-bot[bot]

@mkouba this looks good, WDYT?

geoand avatar Feb 19 '24 15:02 geoand


: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(...

quarkus-bot[bot] avatar Feb 19 '24 19:02 quarkus-bot[bot]

Done @mkouba and @geoand waiting the CI again, although I've just changed a comment and rebased)

franz1981 avatar Feb 20 '24 08:02 franz1981

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.

quarkus-bot[bot] avatar Feb 20 '24 13:02 quarkus-bot[bot]