diff --git a/temporal-sdk/src/main/java/io/temporal/worker/WorkerOptions.java b/temporal-sdk/src/main/java/io/temporal/worker/WorkerOptions.java index 99a596514..3da57ef81 100644 --- a/temporal-sdk/src/main/java/io/temporal/worker/WorkerOptions.java +++ b/temporal-sdk/src/main/java/io/temporal/worker/WorkerOptions.java @@ -1011,7 +1011,7 @@ public String getIdentity() { } public boolean isUsingVirtualThreadsOnWorkflowWorker() { - return usingVirtualThreadsOnActivityWorker; + return usingVirtualThreadsOnWorkflowWorker; } public boolean isUsingVirtualThreadsOnActivityWorker() { diff --git a/temporal-sdk/src/test/java/io/temporal/worker/WorkerOptionsTest.java b/temporal-sdk/src/test/java/io/temporal/worker/WorkerOptionsTest.java index 877f6fdce..f21345a30 100644 --- a/temporal-sdk/src/test/java/io/temporal/worker/WorkerOptionsTest.java +++ b/temporal-sdk/src/test/java/io/temporal/worker/WorkerOptionsTest.java @@ -181,6 +181,46 @@ public void validateAndBuildWithDefaultsIsIdempotentWithPollerBehavior() { assertNotNull(second.getWorkflowTaskPollersBehavior()); } + @Test + public void setUsingVirtualThreadsEnablesAllWorkers() { + WorkerOptions options = WorkerOptions.newBuilder().setUsingVirtualThreads(true).build(); + assertTrue(options.isUsingVirtualThreadsOnWorkflowWorker()); + assertTrue(options.isUsingVirtualThreadsOnActivityWorker()); + assertTrue(options.isUsingVirtualThreadsOnLocalActivityWorker()); + assertTrue(options.isUsingVirtualThreadsOnNexusWorker()); + } + + @Test + public void perWorkerVirtualThreadOptionsAreIndependent() { + WorkerOptions workflowOnly = + WorkerOptions.newBuilder().setUsingVirtualThreadsOnWorkflowWorker(true).build(); + assertTrue(workflowOnly.isUsingVirtualThreadsOnWorkflowWorker()); + assertFalse(workflowOnly.isUsingVirtualThreadsOnActivityWorker()); + assertFalse(workflowOnly.isUsingVirtualThreadsOnLocalActivityWorker()); + assertFalse(workflowOnly.isUsingVirtualThreadsOnNexusWorker()); + + WorkerOptions activityOnly = + WorkerOptions.newBuilder().setUsingVirtualThreadsOnActivityWorker(true).build(); + assertFalse(activityOnly.isUsingVirtualThreadsOnWorkflowWorker()); + assertTrue(activityOnly.isUsingVirtualThreadsOnActivityWorker()); + assertFalse(activityOnly.isUsingVirtualThreadsOnLocalActivityWorker()); + assertFalse(activityOnly.isUsingVirtualThreadsOnNexusWorker()); + + WorkerOptions localActivityOnly = + WorkerOptions.newBuilder().setUsingVirtualThreadsOnLocalActivityWorker(true).build(); + assertFalse(localActivityOnly.isUsingVirtualThreadsOnWorkflowWorker()); + assertFalse(localActivityOnly.isUsingVirtualThreadsOnActivityWorker()); + assertTrue(localActivityOnly.isUsingVirtualThreadsOnLocalActivityWorker()); + assertFalse(localActivityOnly.isUsingVirtualThreadsOnNexusWorker()); + + WorkerOptions nexusOnly = + WorkerOptions.newBuilder().setUsingVirtualThreadsOnNexusWorker(true).build(); + assertFalse(nexusOnly.isUsingVirtualThreadsOnWorkflowWorker()); + assertFalse(nexusOnly.isUsingVirtualThreadsOnActivityWorker()); + assertFalse(nexusOnly.isUsingVirtualThreadsOnLocalActivityWorker()); + assertTrue(nexusOnly.isUsingVirtualThreadsOnNexusWorker()); + } + @Test public void verifyMaxTaskQueuePerSecondsDisablesEagerExecution() { // Verify that by default eager execution is enabled