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

  1. Retry the call with backoff.
  2. Confirm cluster health and read consistency settings.
  3. Ensure the workflow_def_versions index table is initialized.
  4. 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

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


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