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

  1. Check which Status values DefaultEventQueueProcessor was constructed with and ensure the caller only publishes those.
  2. Register a queue for the missing status at construction time if that status should be published.
  3. Filter or short-circuit upstream before calling update for statuses that have no queue.
  4. 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

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


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/2377ab1cf384cfa0. Report an issue: GitHub.