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
- Use the correct sink format: 'conductor' (alone), 'conductor:queueName', or an external sink like 'sqs:queueName'.
- If the sink is dynamically generated, verify the expression produces a valid prefix.
- Check for typos — the prefix must be exactly 'conductor' or 'conductor:' followed by the queue identifier.
- 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
- Use 'conductor' (alone) or 'conductor:queueName' for internal sinks.
- For external sinks, use registered prefixes like 'sqs:', 'amqp:'.
- Validate sink strings in workflow definitions before registration.
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
- Error loading queue: %s, for task: %s, error: %s
- Skill registry is not available
- Exchange name is undefined
- Exchange type is undefined
- Queue name is undefined
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/e11427eab9674c34.
Report an issue: GitHub.