@@ -113,32 +113,40 @@ private function startWorkflow(
113113 $ workflowId = is_string ($ startTarget ['workflow_id ' ] ?? null )
114114 ? $ startTarget ['workflow_id ' ]
115115 : $ this ->workflowIdFor ($ adapter , $ idempotencyKey );
116- $ taskQueue = is_string ($ startTarget ['task_queue ' ] ?? null )
117- ? trim ($ startTarget ['task_queue ' ])
118- : null ;
119-
120- if ($ taskQueue !== null && $ taskQueue !== '' ) {
121- $ routingBlock = $ this ->taskQueueRoutingGate ->workflowStartBlock ((string ) $ namespace , $ taskQueue );
122-
123- if ($ routingBlock !== null ) {
124- return $ this ->rejected ($ request , $ adapter , 'start_workflow ' , $ idempotencyKey , 'task_queue_draining ' , array_filter ([
125- 'message ' => sprintf (
126- 'Task queue [%s] is draining and cannot accept new workflow starts until an active worker cohort is available. ' ,
127- $ taskQueue ,
128- ),
129- 'target ' => $ this ->redactedTarget ($ target + ['workflow_id ' => $ workflowId ]),
130- 'correlation ' => $ correlation ,
131- 'workflow_id ' => $ workflowId ,
132- 'workflow_type ' => $ startTarget ['workflow_type ' ],
133- 'task_queue ' => $ taskQueue ,
134- 'routing_status ' => $ routingBlock ['routing_status ' ],
135- 'active_worker_count ' => $ routingBlock ['active_worker_count ' ],
136- 'draining_worker_count ' => $ routingBlock ['draining_worker_count ' ],
137- 'stale_worker_count ' => $ routingBlock ['stale_worker_count ' ],
138- 'draining_build_ids ' => $ routingBlock ['draining_build_ids ' ],
139- 'drain_intent ' => 'draining ' ,
140- ], static fn (mixed $ value ): bool => $ value !== null ));
141- }
116+
117+ try {
118+ $ taskQueue = $ this ->workflowStartService ->resolveTaskQueue (
119+ $ startTarget ['workflow_type ' ],
120+ $ startTarget ['task_queue ' ] ?? null ,
121+ );
122+ } catch (LogicException $ exception ) {
123+ return $ this ->rejected ($ request , $ adapter , 'start_workflow ' , $ idempotencyKey , 'unknown_target ' , [
124+ 'message ' => $ exception ->getMessage (),
125+ 'target ' => $ this ->redactedTarget ($ target ),
126+ 'correlation ' => $ correlation ,
127+ ]);
128+ }
129+
130+ $ routingBlock = $ this ->taskQueueRoutingGate ->workflowStartBlock ((string ) $ namespace , $ taskQueue );
131+
132+ if ($ routingBlock !== null ) {
133+ return $ this ->rejected ($ request , $ adapter , 'start_workflow ' , $ idempotencyKey , 'task_queue_draining ' , array_filter ([
134+ 'message ' => sprintf (
135+ 'Task queue [%s] is draining and cannot accept new workflow starts until an active worker cohort is available. ' ,
136+ $ taskQueue ,
137+ ),
138+ 'target ' => $ this ->redactedTarget ($ target + ['workflow_id ' => $ workflowId ]),
139+ 'correlation ' => $ correlation ,
140+ 'workflow_id ' => $ workflowId ,
141+ 'workflow_type ' => $ startTarget ['workflow_type ' ],
142+ 'task_queue ' => $ taskQueue ,
143+ 'routing_status ' => $ routingBlock ['routing_status ' ],
144+ 'active_worker_count ' => $ routingBlock ['active_worker_count ' ],
145+ 'draining_worker_count ' => $ routingBlock ['draining_worker_count ' ],
146+ 'stale_worker_count ' => $ routingBlock ['stale_worker_count ' ],
147+ 'draining_build_ids ' => $ routingBlock ['draining_build_ids ' ],
148+ 'drain_intent ' => 'draining ' ,
149+ ], static fn (mixed $ value ): bool => $ value !== null ));
142150 }
143151
144152 try {
@@ -160,6 +168,7 @@ private function startWorkflow(
160168 'adapter ' => $ adapter ,
161169 'action ' => 'start_workflow ' ,
162170 'idempotency_key ' => $ idempotencyKey ,
171+ 'task_queue ' => $ taskQueue ,
163172 ],
164173 ),
165174 );
0 commit comments