conductor-oss/conductor · error · IllegalArgumentException
There is no queue for handling %s status
Error message
There is no queue for handling %s status
What it means
DefaultEventQueueProcessor.update looks up an ObservableQueue by task Status in the `queues` map and throws IllegalArgumentException when none is registered for that status. The processor only holds queues for the statuses it was constructed with; publishing an update for any other status is a configuration gap.
Source
Thrown at core/src/main/java/com/netflix/conductor/core/events/queue/DefaultEventQueueProcessor.java:227
update(externalIdMap, output, status);
}
private void update(
Map<String, Object> externalIdMap, Map<String, Object> output, Status status)
throws Exception {
Map<String, Object> outputMap = new HashMap<>();
outputMap.put("externalId", objectMapper.writeValueAsString(externalIdMap));
outputMap.putAll(output);
Message msg =
new Message(
UUID.randomUUID().toString(),
objectMapper.writeValueAsString(outputMap),
null);
ObservableQueue queue = queues.get(status);
if (queue == null) {
throw new IllegalArgumentException(
"There is no queue for handling " + status.toString() + " status");
}
queue.publish(Collections.singletonList(msg));
}
}
View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Check which Status values DefaultEventQueueProcessor was constructed with and ensure the caller only publishes those.
- Register a queue for the missing status at construction time if that status should be published.
- Filter or short-circuit upstream before calling update for statuses that have no queue.
- Validate the status against the registered set before invoking update.
Defensive patterns
Strategy: validation
Validate before calling
// Before publishing, ensure a queue is registered for the status.
if (!registeredStatuses.contains(status)) {
LOGGER.warn("No queue registered for status {}; skipping publish", status);
return;
} Try / catch
try {
eventQueueProcessor.updateByTaskId(workflowId, taskId, output, status);
} catch (IllegalArgumentException e) {
LOGGER.error("No queue for status {}: {}", status, e.getMessage());
} Prevention
- Wire a queue for every status you intend to publish at construction time.
- Gate upstream callers to only emit statuses that have a registered queue.
- Document the registered status set for operators.
When it happens
Trigger: Calling updateByTaskId/updateByTaskRefName with a Status that has no corresponding queue (e.g. CANCELED, ROLLED_BACK, or a custom status the processor was not wired to handle).
Common situations: A workflow emits a terminal status (like CANCELED) for which no sink queue is configured in the event-queue processor; misconfiguration of the status→queue wiring at startup; using a Status enum value added in a newer version.
Related errors
- Exchange name is undefined
- Exchange type is undefined
- Queue name is undefined
- Workflow message queue for workflowId={} has reached the max
- Illegal event {}
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/2377ab1cf384cfa0.
Report an issue: GitHub.