quarkus icon indicating copy to clipboard operation
quarkus copied to clipboard

Propagate Vert.x context on all ExecutorService methods for VirtualThreadExecutor

Open ozangunalp opened this issue 1 year ago • 9 comments

Previous propagation only decorated execute method.

  • Fixes #38815

ozangunalp avatar Feb 16 '24 12:02 ozangunalp


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

Failing Jobs

Status Name Step Failures Logs Raw logs Build scan
Initial JDK 17 Build Build Failures Logs Raw logs :mag:

You can consult the Develocity build scans.

Failures

:gear: Initial JDK 17 Build #

- Failing: integration-tests/virtual-threads/resteasy-reactive-virtual-threads 

:package: integration-tests/virtual-threads/resteasy-reactive-virtual-threads

Failed to execute goal net.revelc.code:impsort-maven-plugin:1.9.0:check (check-imports) on project quarkus-integration-test-virtual-threads-reseteasy-reactive: Imports are not sorted in /home/runner/work/quarkus/quarkus/integration-tests/virtual-threads/resteasy-reactive-virtual-threads/src/main/java/io/quarkus/virtual/rr/FilteredResource.java

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

@vsevel Would you mind giving this branch/PR a spin with your use case?

manovotn avatar Feb 16 '24 12:02 manovotn

Fixed the import sort

ozangunalp avatar Feb 16 '24 12:02 ozangunalp

@vsevel Would you mind giving this branch/PR a spin with your use case?

sure. it may take a little while though.

vsevel avatar Feb 16 '24 12:02 vsevel

I can confirm this works. I can now do:

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @RunOnVirtualThread
    @Path("/vt")
    @RolesAllowed("myrole")
    public String getId() throws InterruptedException, ExecutionException {

        String name = securityIdentity.getPrincipal().getName();
        log.info("name = " + name);

        String name2 = vThreads.submit(() -> myComponent.getId()).get();

        log.info("name2 = " + name2);
        return "CALLER:" + name + "  /  CALLED:" + name2;
    }

...

@ApplicationScoped
public class MyComponent {

    private static final Logger log = Logger.getLogger(MyComponent.class);

    @Inject
    SecurityIdentity securityIdentity;

    public String getId() {
        String name = securityIdentity.getPrincipal().getName();
        log.info("name inside CALLED = " + name);
        return name;
    }
}

getting the principal name as expected. no need to activate a request context. I am impressed @ozangunalp

vsevel avatar Feb 16 '24 16:02 vsevel


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

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 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 16 '24 16:02 quarkus-bot[bot]

@vsevel thank you for testing it out. It was supposed to work this way from the beginning.

ozangunalp avatar Feb 19 '24 08:02 ozangunalp

@ozangunalp I would propose to backport it, as for me it was a bug. WDYT?

cescoffier avatar Feb 19 '24 09:02 cescoffier

Yes, I think I need to revert the pattern variable change for the backporting.

ozangunalp avatar Feb 19 '24 10:02 ozangunalp

Status for workflow Quarkus CI

This is the status report for running Quarkus CI on commit 1ea93ccfd20089fc9e5781749fe9fb9184cfa984.

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

: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.status_code=200, net.protocol.name=http, net.host.port=8081, http.method=GET, http.scheme=http, http.response_content_length=0, net.host.name=localhost, user_agent.original=Apache-HttpClient/4.5.14 (Java/21.0.2), code.function=dummy, http.target=/otel/enduser, 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.status_code=200, net.protocol.name=http, net.host.port=8081, http.method=GET, http.scheme=http, http.response_content_length=0, net.host.name=localhost, user_agent.original=Apache-HttpClient/4.5.14 (Java/21.0.2), code.function=dummy, http.target=/otel/enduser, 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 19 '24 14:02 quarkus-bot[bot]