conductor-oss/conductor · error · TransientException
Error creating workflow: %s
Error message
Error creating workflow: %s
What it means
Thrown by CassandraExecutionDAO.createWorkflow when inserting a new workflow row fails. DriverException during the insert (plus toJson serialization of the workflow) is wrapped in TransientException. Reports the workflowId.
Source
Thrown at cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java:433
List<TaskModel> tasks = workflow.getTasks();
workflow.setTasks(new LinkedList<>());
String payload = toJson(workflow);
recordCassandraDaoRequests("createWorkflow", "n/a", workflow.getWorkflowName());
recordCassandraDaoPayloadSize(
"createWorkflow", payload.length(), "n/a", workflow.getWorkflowName());
session.execute(
insertWorkflowStatement.bind(
UUID.fromString(workflow.getWorkflowId()), 1, "", payload, 0, 1));
workflow.setTasks(tasks);
return workflow.getWorkflowId();
} catch (DriverException e) {
Monitors.error(CLASS_NAME, "createWorkflow");
String errorMsg =
String.format("Error creating workflow: %s", workflow.getWorkflowId());
LOGGER.error(errorMsg, e);
throw new TransientException(errorMsg, e);
}
}
@Override
public String updateWorkflow(WorkflowModel workflow) {
try {
List<TaskModel> tasks = workflow.getTasks();
workflow.setTasks(new LinkedList<>());
String payload = toJson(workflow);
recordCassandraDaoRequests("updateWorkflow", "n/a", workflow.getWorkflowName());
recordCassandraDaoPayloadSize(
"updateWorkflow", payload.length(), "n/a", workflow.getWorkflowName());
session.execute(
updateWorkflowStatement.bind(
payload, UUID.fromString(workflow.getWorkflowId())));
workflow.setTasks(tasks);
return workflow.getWorkflowId();
} catch (DriverException e) {View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Ensure workflow.getWorkflowId() is a valid UUID.
- Confirm Cassandra is reachable and the workflows table exists.
- Retry — TransientException is retryable; ensure createWorkflow is idempotent on the workflowId before retrying.
- Inspect the wrapped DriverException for timeout vs unavailable.
Defensive patterns
Strategy: validation
Validate before calling
// Ensure workflow id is a UUID before createWorkflow
if (!isUuid(workflow.getWorkflowId()))
throw new IllegalArgumentException("non-UUID workflow id: " + workflow.getWorkflowId()); Type guard
static boolean isUuid(String s) {
try { java.util.UUID.fromString(s); return true; } catch (IllegalArgumentException e) { return false; }
} Try / catch
try {
return dao.createWorkflow(workflow);
} catch (TransientException e) {
log.warn("Transient createWorkflow failure for {}; retrying idempotently", workflow.getWorkflowId());
throw e; Prevention
- Validate the workflow ID is a UUID before create.
- Keep createWorkflow idempotent on workflowId so retries are safe.
- Confirm Cassandra health and retry TransientException with backoff.
When it happens
Trigger: Calling createWorkflow(WorkflowModel) when Cassandra is unavailable, the workflowId is not a valid UUID (UUID.fromString inside the try), toJson fails, or the write times out.
Common situations: Cassandra connectivity loss. Non-UUID workflow ID from a custom generator. Write timeout. Schema drift in the workflows table.
Related errors
- Failed to update workflow: %s
- Error creating/updating event handler: %s/%s
- Error creating %d tasks for workflow: %s
- Error updating task: %s in workflow: %s
- Failed to remove workflow: %s
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/1137d48796ed4575.
Report an issue: GitHub.