conductor-oss/conductor · error · IllegalStateException

Invalid / Unsupported sink specified: %s

Error message

Invalid / Unsupported sink specified: %s

What it means

Thrown by Event.computeQueueName() when the sink value starts with 'conductor' but is neither exactly 'conductor' nor starts with 'conductor:'. The EVENT task supports sinks prefixed with 'conductor' (internal queue), 'sqs:', 'amqp:', etc. via registered providers. A sink like 'conductorXYZ' or 'conductor_bad' falls into the else branch and throws IllegalStateException. This indicates a malformed sink string.

Source

Thrown at core/src/main/java/com/netflix/conductor/core/execution/tasks/Event.java:148

        String sinkValue = (String) replaced.get("sink");
        String queueName = sinkValue;

        if (sinkValue.startsWith("conductor")) {
            if ("conductor".equals(sinkValue)) {
                queueName =
                        sinkValue
                                + ":"
                                + workflow.getWorkflowName()
                                + ":"
                                + task.getReferenceTaskName();
            } else if (sinkValue.startsWith("conductor:")) {
                queueName =
                        "conductor:"
                                + workflow.getWorkflowName()
                                + ":"
                                + sinkValue.replaceAll("conductor:", "");
            } else {
                throw new IllegalStateException(
                        "Invalid / Unsupported sink specified: " + sinkValue);
            }
        }
        return queueName;
    }

    @VisibleForTesting
    ObservableQueue getQueue(String queueName, String taskId) {
        try {
            return eventQueues.getQueue(queueName);
        } catch (IllegalArgumentException e) {
            throw new IllegalStateException(
                    "Error loading queue:"
                            + queueName
                            + ", for task:"
                            + taskId
                            + ", error: "
                            + e.getMessage());

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Use the correct sink format: 'conductor' (alone), 'conductor:queueName', or an external sink like 'sqs:queueName'.
  2. If the sink is dynamically generated, verify the expression produces a valid prefix.
  3. Check for typos — the prefix must be exactly 'conductor' or 'conductor:' followed by the queue identifier.
  4. Ensure the sink value is lowercase — 'Conductor' will not match.

Example fix

// before
"inputParameters": {
  "sink": "conductor_event"
}

// after
"inputParameters": {
  "sink": "conductor:event"
}
Defensive patterns

Strategy: validation

Validate before calling

// Validate EVENT task sink format
String sink = (String) task.getInputData().get("sink");
if (sink != null && sink.toLowerCase().startsWith("conductor")
        && !sink.equals("conductor") && !sink.startsWith("conductor:")) {
    throw new IllegalStateException(
        "Invalid conductor sink: " + sink + ". Use 'conductor' or 'conductor:queueName'");
}

Prevention

When it happens

Trigger: An EVENT task's sink input parameter resolves to a value like 'conductorABC', 'conductor_event', or 'Conductor' (wrong case) at runtime. The sink parameter uses an underscore or hyphen instead of a colon after 'conductor'.

Common situations: Workflow designer wrote 'conductor_event' instead of 'conductor:event'. The sink value is built dynamically by an expression that produces a malformed string. Case sensitivity issue: 'Conductor' vs 'conductor'.

Related errors


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