conductor-oss/conductor · error · TransientException

Error updating task: %s in workflow: %s

Error message

Error updating task: %s in workflow: %s

What it means

Thrown by CassandraExecutionDAO.updateTask when updating a task row fails. DriverException during session.execute (task payload update, plus rate-limit bookkeeping) is wrapped in TransientException. Reports taskId and workflowInstanceId.

Source

Thrown at cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java:285

                    if (nextIds != null && !nextIds.isEmpty()) {
                        LOGGER.debug(
                                "Concurrency slot freed for {}, releasing postponed task {}",
                                task.getTaskDefName(),
                                nextIds.get(0));
                        queueDAO.resetOffsetTime(queueName, nextIds.get(0));
                    }
                } else if (task.getStatus() == TaskModel.Status.IN_PROGRESS) {
                    addTaskToLimit(task);
                }
            }
        } catch (DriverException e) {
            Monitors.error(CLASS_NAME, "updateTask");
            String errorMsg =
                    String.format(
                            "Error updating task: %s in workflow: %s",
                            task.getTaskId(), task.getWorkflowInstanceId());
            LOGGER.error(errorMsg, e);
            throw new TransientException(errorMsg, e);
        }
    }

    /**
     * This is a dummy implementation and this feature is not implemented for Cassandra backed
     * Conductor
     */
    @Override
    public boolean exceedsLimit(TaskModel task) {
        Optional<TaskDef> taskDefinition = task.getTaskDefinition();
        if (taskDefinition.isEmpty()) {
            return false;
        }
        int limit = taskDefinition.get().concurrencyLimit();
        if (limit <= 0) {
            return false;
        }

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Verify the task's workflowInstanceId is a valid UUID.
  2. Confirm Cassandra health and retry the update.
  3. If rate-limit counters are involved, ensure the task_def_rate_limit table schema is intact.
  4. Inspect driver logs for the specific DriverException subtype (timeout vs unavailable).
Defensive patterns

Strategy: validation

Validate before calling

// Validate task id fields before updateTask
if (!isUuid(task.getWorkflowInstanceId()) || isBlank(task.getTaskId()))
    throw new IllegalArgumentException("invalid task identity");

Type guard

static boolean isUuid(String s) {
    try { java.util.UUID.fromString(s); return true; } catch (IllegalArgumentException e) { return false; }
}

Try / catch

try {
    dao.updateTask(task);
} catch (TransientException e) {
    log.warn("Transient updateTask failure for {}; retrying", task.getTaskId());
    throw e;

Prevention

When it happens

Trigger: Calling updateTask(TaskModel) when Cassandra is unavailable, the task's workflowId is not a valid UUID, or the write times out. Also when addTaskToLimit / rate-limit bookkeeping fails inside the same try block.

Common situations: Cassandra connectivity loss. Non-UUID workflow ID. Write timeout under load. Concurrent rate-limit counter contention.

Related errors


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