conductor-oss/conductor · error · TransientException
Error creating/updating task definition: %s
Error message
Error creating/updating task definition: %s
What it means
Thrown when a DriverException occurs in insertOrUpdateTaskDef while serializing a TaskDef to JSON and writing it to the task_def table. Wrapped as TransientException - the store could not complete due to an infrastructure-level driver failure.
Source
Thrown at cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraMetadataDAO.java:410
String errorMsg = String.format("Failed to get workflows defs for : %s", name);
LOGGER.error(errorMsg, e);
throw new TransientException(errorMsg, e);
}
}
private TaskDef insertOrUpdateTaskDef(TaskDef taskDef) {
try {
String taskDefinition = toJson(taskDef);
session.execute(insertTaskDefStatement.bind(taskDef.getName(), taskDefinition));
recordCassandraDaoRequests("storeTaskDef");
recordCassandraDaoPayloadSize(
"storeTaskDef", taskDefinition.length(), taskDef.getName(), "n/a");
} catch (DriverException e) {
Monitors.error(CLASS_NAME, "insertOrUpdateTaskDef");
String errorMsg =
String.format("Error creating/updating task definition: %s", taskDef.getName());
LOGGER.error(errorMsg, e);
throw new TransientException(errorMsg, e);
}
return taskDef;
}
@VisibleForTesting
String getWorkflowDefIndexValue(String name, int version) {
return name + INDEX_DELIMITER + version;
}
@VisibleForTesting
ImmutablePair<String, Integer> getWorkflowNameAndVersion(String nameVersionStr) {
int lastIndexOfDelimiter = nameVersionStr.lastIndexOf(INDEX_DELIMITER);
if (lastIndexOfDelimiter == -1) {
throw new IllegalStateException(
nameVersionStr
+ " is not in the 'workflowName"
+ INDEX_DELIMITERView on GitHub (pinned to cf7c3e4a8a)
Solutions
- Retry the store operation - TransientException is retryable.
- Verify the Cassandra cluster and task_def table are present.
- Review conductor.cassandra.writeConsistencyLevel and timeouts.
- Check the wrapped DriverException to distinguish timeout vs unavailable.
Example fix
// before: single write
metadataDAO.createTaskDef(taskDef);
// after: retry transient write failures
RetryUtils.retryOn(TransientException.class, 3, Duration.ofMillis(200),
() -> metadataDAO.createTaskDef(taskDef)); Defensive patterns
Strategy: retry
Validate before calling
// Pre-flight: verify session before writing a task def
if (cassandraSession.isClosed()) {
throw new IllegalStateException("Cassandra session is closed; cannot store task def");
} Try / catch
// Retry transient task-def store failures
try {
metadataDAO.createTaskDef(taskDef);
} catch (TransientException e) {
backoffAndRetry(() -> metadataDAO.createTaskDef(taskDef), 3);
} Prevention
- Wrap task-def stores in retry-with-backoff for TransientException.
- Ensure the task_def table exists before startup.
- Size write timeouts for the largest serialized TaskDef payload.
- Alert on recurring TransientException to catch cluster degradation.
When it happens
Trigger: session.execute(insertTaskDefStatement.bind(name, json)) raises a DriverException (write timeout, unavailable, closed session) during task-definition create/update.
Common situations: Registering/updating a task def during a node loss; keyspace/table missing after partial deploy; connection pool exhausted; large payload timing out.
Related errors
- Failed to get task def: %s
- Failed to get all task defs
- Failed to get workflow: %s
- Error creating workflow definition: %s/%d
- Error updating workflow definition: %s/%d
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/b958b5f18434b575.
Report an issue: GitHub.