conductor-oss/conductor · error · TransientException
Failed to get workflows defs for : %s
Error message
Failed to get workflows defs for : %s
What it means
Thrown when a DriverException occurs in getAllWorkflowDefVersions while selecting all versions of a workflow by name and deserializing each from JSON. Wrapped as TransientException - an infrastructure read failure interrupted the version listing.
Source
Thrown at cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraMetadataDAO.java:394
session.execute(selectAllWorkflowDefVersionsByNameStatement.bind(name));
recordCassandraDaoRequests("getAllWorkflowDefVersions", "n/a", name);
List<Row> rows = resultSet.all();
if (rows.size() == 0) {
LOGGER.info("Not workflow definitions were found for : {}", name);
return null;
}
return rows.stream()
.map(
row ->
readValue(
row.getString(WORKFLOW_DEFINITION_KEY),
WorkflowDef.class))
.collect(Collectors.toList());
} catch (DriverException e) {
Monitors.error(CLASS_NAME, "getAllWorkflowDefVersions");
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;View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Retry the call with backoff.
- Confirm cluster health and read consistency settings.
- Ensure the workflow_def_versions index table is initialized.
- Inspect the wrapped DriverException for the root cause.
Example fix
// before: single attempt
List<WorkflowDef> versions = metadataDAO.getAllWorkflowDefVersions(name);
// after: retry transient failures
List<WorkflowDef> versions = RetryUtils.retryOn(TransientException.class, 3,
Duration.ofMillis(200),
() -> metadataDAO.getAllWorkflowDefVersions(name)); Defensive patterns
Strategy: retry
Validate before calling
// Pre-flight: confirm session before fetching versions
if (cassandraSession.isClosed()) {
throw new IllegalStateException("Cassandra session is closed; cannot list workflow versions");
} Try / catch
// Retry version listing on transient failure
try {
return metadataDAO.getAllWorkflowDefVersions(name);
} catch (TransientException e) {
return backoffAndRetry(() -> metadataDAO.getAllWorkflowDefVersions(name), 3);
} Prevention
- Retry getAllWorkflowDefVersions on TransientException.
- Ensure the versions index table is present and consistent.
- Cache the latest-version resolution to avoid repeated scans.
- Monitor driver timeouts during version-heavy workflows.
When it happens
Trigger: session.execute(selectAllWorkflowDefVersionsByNameStatement.bind(name)) raises a DriverException while fetching every version row for a given workflow name.
Common situations: Resolving the latest version during a Cassandra slowdown; read timeout on a workflow with many versions; replica unavailable; connection drop.
Related errors
- Error fetching workflow def: %s/%d
- Error creating workflow definition: %s/%d
- Error updating workflow definition: %s/%d
- Failed to remove workflow definition: %s/%d
- Error retrieving all workflow defs
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/90ce1ddceadca6e1.
Report an issue: GitHub.