Skip to content

Commit 22eb5b8

Browse files
authored
throw start workflow with queue options and no queue (#365)
Fixes #353
1 parent 19f7e8b commit 22eb5b8

3 files changed

Lines changed: 71 additions & 26 deletions

File tree

transact/src/main/java/dev/dbos/transact/execution/DBOSExecutor.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1484,6 +1484,29 @@ private <T, E extends Exception> WorkflowHandle<T, E> executeWorkflow(
14841484
return new WorkflowHandleDBPoll<>(this, workflowId);
14851485
}
14861486

1487+
var badOptionList = new ArrayList<String>();
1488+
if (options.deduplicationId() != null) {
1489+
badOptionList.add("deduplicationId");
1490+
}
1491+
1492+
if (options.priority() != null) {
1493+
badOptionList.add("priority");
1494+
}
1495+
1496+
if (options.queuePartitionKey() != null) {
1497+
badOptionList.add("queuePartitionKey");
1498+
}
1499+
1500+
if (options.delay() != null) {
1501+
badOptionList.add("delay");
1502+
}
1503+
1504+
if (!badOptionList.isEmpty()) {
1505+
throw new IllegalArgumentException(
1506+
"%s invalid options without a queue name: %s"
1507+
.formatted(workflow.fullyQualifiedName(), String.join(", ", badOptionList)));
1508+
}
1509+
14871510
logger.debug("executeWorkflow {}({}) {}", workflow.fullyQualifiedName(), args, options);
14881511

14891512
WorkflowInitResult initResult =

transact/src/test/java/dev/dbos/transact/invocation/StartWorkflowTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,54 @@ void invalidPartitionKey() throws Exception {
147147
() -> dbos.startWorkflow(() -> proxy.simpleWorkflow(), options));
148148
}
149149

150+
@Test
151+
void deduplicationIdWithoutQueue() {
152+
var options = new StartWorkflowOptions().withDeduplicationId("dedupe-id");
153+
assertThrows(
154+
IllegalArgumentException.class,
155+
() -> dbos.startWorkflow(() -> proxy.simpleWorkflow(), options));
156+
}
157+
158+
@Test
159+
void priorityWithoutQueue() {
160+
var options = new StartWorkflowOptions().withPriority(5);
161+
assertThrows(
162+
IllegalArgumentException.class,
163+
() -> dbos.startWorkflow(() -> proxy.simpleWorkflow(), options));
164+
}
165+
166+
@Test
167+
void queuePartitionKeyWithoutQueue() {
168+
var options = new StartWorkflowOptions().withQueuePartitionKey("partition-key");
169+
assertThrows(
170+
IllegalArgumentException.class,
171+
() -> dbos.startWorkflow(() -> proxy.simpleWorkflow(), options));
172+
}
173+
174+
@Test
175+
void delayWithoutQueue() {
176+
var options = new StartWorkflowOptions().withDelay(Duration.ofSeconds(5));
177+
assertThrows(
178+
IllegalArgumentException.class,
179+
() -> dbos.startWorkflow(() -> proxy.simpleWorkflow(), options));
180+
}
181+
182+
@Test
183+
void multipleQueueOptionsWithoutQueue() {
184+
var options =
185+
new StartWorkflowOptions()
186+
.withDeduplicationId("dedupe-id")
187+
.withPriority(1)
188+
.withDelay(Duration.ofSeconds(5));
189+
var ex =
190+
assertThrows(
191+
IllegalArgumentException.class,
192+
() -> dbos.startWorkflow(() -> proxy.simpleWorkflow(), options));
193+
assertTrue(ex.getMessage().contains("deduplicationId"));
194+
assertTrue(ex.getMessage().contains("priority"));
195+
assertTrue(ex.getMessage().contains("delay"));
196+
}
197+
150198
@Test
151199
void startWorkflowWithDelayManualTransition() throws Exception {
152200
var qs = DBOSTestAccess.getQueueService(dbos);

transact/src/test/java/dev/dbos/transact/queue/QueuesTest.java

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
44
import static org.junit.jupiter.api.Assertions.assertEquals;
5-
import static org.junit.jupiter.api.Assertions.assertNotNull;
65
import static org.junit.jupiter.api.Assertions.assertNull;
76
import static org.junit.jupiter.api.Assertions.assertThrows;
87
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -557,31 +556,6 @@ public void testGlobalConcurrency() throws Exception {
557556
assertEquals(2, idsToRun.size());
558557
}
559558

560-
@Test
561-
public void testQueueOptionsNotWrittenWhenNotEnqueued() throws Exception {
562-
var impl = new PartitionsTestServiceImpl();
563-
var proxy = dbos.registerProxy(PartitionsTestService.class, impl);
564-
dbos.launch();
565-
566-
var options =
567-
new StartWorkflowOptions()
568-
.withDeduplicationId("dedupe")
569-
.withDelay(Duration.ofSeconds(10))
570-
.withPriority(100)
571-
.withQueuePartitionKey("partition-1");
572-
var handle = dbos.startWorkflow(() -> proxy.normalWorkflow(), options);
573-
var result = handle.getResult();
574-
assertEquals(handle.workflowId(), result);
575-
576-
var row = DBUtils.getWorkflowRow(dataSource, handle.workflowId());
577-
assertNotNull(row);
578-
assertNull(row.queueName());
579-
assertNull(row.deduplicationId());
580-
assertNull(row.queuePartitionKey());
581-
assertEquals(0, row.priority());
582-
assertNull(row.delayUntilEpochMs());
583-
}
584-
585559
@Test
586560
public void testenQueueWF() throws Exception {
587561

0 commit comments

Comments
 (0)