conductor-oss/conductor · error · TransientException

Error creating workflow definition: %s/%d

Error message

Error creating workflow definition: %s/%d

What it means

Thrown when the Cassandra driver raises a DriverException (connection loss, timeout, node unavailable, consistency not met, etc.) while createWorkflowDef executes its INSERT. The DAO wraps it in a TransientException, signalling the failure is retryable and not caused by bad input.

Source

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

                        "Workflow: %s, version: %s already exists!",
                        workflowDef.getName(), workflowDef.getVersion());
            }
            String workflowDefIndex =
                    getWorkflowDefIndexValue(workflowDef.getName(), workflowDef.getVersion());
            session.execute(
                    insertWorkflowDefVersionIndexStatement.bind(
                            workflowDefIndex, workflowDefIndex));
            recordCassandraDaoRequests("createWorkflowDef");
            recordCassandraDaoPayloadSize(
                    "createWorkflowDef", workflowDefinition.length(), "n/a", workflowDef.getName());
        } catch (DriverException e) {
            Monitors.error(CLASS_NAME, "createWorkflowDef");
            String errorMsg =
                    String.format(
                            "Error creating workflow definition: %s/%d",
                            workflowDef.getName(), workflowDef.getVersion());
            LOGGER.error(errorMsg, e);
            throw new TransientException(errorMsg, e);
        }
    }

    @Override
    public void updateWorkflowDef(WorkflowDef workflowDef) {
        try {
            String workflowDefinition = toJson(workflowDef);
            session.execute(
                    updateWorkflowDefStatement.bind(
                            workflowDefinition, workflowDef.getName(), workflowDef.getVersion()));
            String workflowDefIndex =
                    getWorkflowDefIndexValue(workflowDef.getName(), workflowDef.getVersion());
            session.execute(
                    insertWorkflowDefVersionIndexStatement.bind(
                            workflowDefIndex, workflowDefIndex));
            recordCassandraDaoRequests("updateWorkflowDef");
            recordCassandraDaoPayloadSize(
                    "updateWorkflowDef", workflowDefinition.length(), "n/a", workflowDef.getName());

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Verify Cassandra cluster health and that the conductor keyspace + workflow_def table exist (run the schema migration if missing).
  2. Check conductor.cassandra.* properties (hosts, port, keyspace, consistency levels).
  3. Retry the create call with backoff - TransientException is retryable by design.
  4. Increase write timeouts or lower write consistency if timeouts recur under load.

Example fix

// before: single shot, surfaces TransientException to caller
metadataDAO.createWorkflowDef(def);

// after: retry on TransientException with backoff
RetryUtils.retryOn(TransientException.class, 3, Duration.ofMillis(200),
    () -> metadataDAO.createWorkflowDef(def));
Defensive patterns

Strategy: retry

Validate before calling

// Pre-flight: ensure the Cassandra session is open before writing
if (cassandraSession.isClosed()) {
    throw new IllegalStateException("Cassandra session is closed; cannot create workflow def");
}

Try / catch

// Retry transient driver failures during create
int attempts = 0;
while (true) {
    try {
        metadataDAO.createWorkflowDef(def);
        break;
    } catch (TransientException e) {
        if (++attempts >= 3) throw e;
        Thread.sleep(200L * attempts);
    }
}

Prevention

When it happens

Trigger: session.execute(insertWorkflowDefStatement.bind(...)) throws a DriverException during workflow-definition creation - e.g. coordinator unavailable, write timeout, or the session being closed.

Common situations: Cassandra node down or restarting; network partition between Conductor and the cluster; keyspace/table not yet created (schema migration not run); connection pool exhausted under load; read/write timeout on a large payload.

Related errors


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