conductor-oss/conductor · error · TransientException

Error retrieving all workflow defs

Error message

Error retrieving all workflow defs

What it means

Thrown when a DriverException occurs while getAllWorkflowDefs scans the workflow-definition index and hydrates each entry via getWorkflowDef. Wrapped as TransientException - the listing could not be completed due to an infrastructure failure.

Source

Thrown at cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraMetadataDAO.java:296

                LOGGER.info("No workflow definitions were found.");
                return Collections.EMPTY_LIST;
            }
            return rows.stream()
                    .map(
                            row -> {
                                String defNameVersion =
                                        row.getString(WORKFLOW_DEF_NAME_VERSION_KEY);
                                var nameVersion = getWorkflowNameAndVersion(defNameVersion);
                                return getWorkflowDef(nameVersion.getLeft(), nameVersion.getRight())
                                        .orElse(null);
                            })
                    .filter(Objects::nonNull)
                    .collect(Collectors.toList());
        } catch (DriverException e) {
            Monitors.error(CLASS_NAME, "getAllWorkflowDefs");
            String errorMsg = "Error retrieving all workflow defs";
            LOGGER.error(errorMsg, e);
            throw new TransientException(errorMsg, e);
        }
    }

    @Override
    public List<WorkflowDef> getAllWorkflowDefsLatestVersions() {
        try {
            ResultSet resultSet =
                    session.execute(
                            selectAllWorkflowDefsLatestVersionsStatement.bind(
                                    WORKFLOW_DEF_INDEX_KEY));
            List<Row> rows = resultSet.all();
            if (rows.size() == 0) {
                LOGGER.info("No workflow definitions were found.");
                return Collections.EMPTY_LIST;
            }
            Map<String, PriorityQueue<WorkflowDef>> allWorkflowDefs = new HashMap<>();

            for (Row row : rows) {

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Retry the listing call with backoff.
  2. Verify cluster health and read consistency can be satisfied.
  3. For very large definition sets, prefer paginated/latest-version endpoints over the full scan.
  4. Inspect the wrapped DriverException for the root driver error.

Example fix

// before: one-shot full listing
List<WorkflowDef> all = metadataDAO.getAllWorkflowDefs();

// after: retry transient listing failures
List<WorkflowDef> all = RetryUtils.retryOn(TransientException.class, 3,
        Duration.ofMillis(200), metadataDAO::getAllWorkflowDefs);
Defensive patterns

Strategy: retry

Validate before calling

// Pre-flight: check session health before a full listing
if (cassandraSession.isClosed()) {
    throw new IllegalStateException("Cassandra session is closed; cannot list workflow defs");
}

Try / catch

// Retry the full listing on transient failure
try {
    return metadataDAO.getAllWorkflowDefs();
} catch (TransientException e) {
    return backoffAndRetry(metadataDAO::getAllWorkflowDefs, 3);
}

Prevention

When it happens

Trigger: The SELECT on the workflow_def index (selectAllWorkflowDefsStatement) or one of the per-entry getWorkflowDef reads raises a DriverException during the full listing.

Common situations: Large index scanned during a cluster degradation; read timeout because many rows must be hydrated; a single unavailable replica fails the read consistency.

Related errors


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