conductor-oss/conductor · error · TransientException

Error updating taskDefLimit for task - %s:%s in workflow: %s

Error message

Error updating taskDefLimit for task - %s:%s in workflow: %s

What it means

addTaskToLimit wraps DriverException in a TransientException naming the task def and workflow instance. This maintains the task_def_limit table used for per-task-definition concurrency limiting; driver failures are retried by the framework RetryTemplate.

Source

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

    @Override
    public void addTaskToLimit(TaskModel task) {
        try {
            recordCassandraDaoRequests(
                    "addTaskToLimit", task.getTaskType(), task.getWorkflowType());
            session.execute(
                    updateTaskDefLimitStatement.bind(
                            UUID.fromString(task.getWorkflowInstanceId()),
                            task.getTaskDefName(),
                            UUID.fromString(task.getTaskId())));
        } catch (DriverException e) {
            Monitors.error(CLASS_NAME, "addTaskToLimit");
            String errorMsg =
                    String.format(
                            "Error updating taskDefLimit for task - %s:%s in workflow: %s",
                            task.getTaskDefName(), task.getTaskId(), task.getWorkflowInstanceId());
            LOGGER.error(errorMsg, e);
            throw new TransientException(errorMsg, e);
        }
    }

    @Override
    public void removeTaskFromLimit(TaskModel task) {
        try {
            recordCassandraDaoRequests(
                    "removeTaskFromLimit", task.getTaskType(), task.getWorkflowType());
            session.execute(
                    deleteTaskDefLimitStatement.bind(
                            task.getTaskDefName(), UUID.fromString(task.getTaskId())));
        } catch (DriverException e) {
            Monitors.error(CLASS_NAME, "removeTaskFromLimit");
            String errorMsg =
                    String.format(
                            "Error updating taskDefLimit for task - %s:%s in workflow: %s",
                            task.getTaskDefName(), task.getTaskId(), task.getWorkflowInstanceId());
            LOGGER.error(errorMsg, e);

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Ensure Cassandra is healthy and write consistency is reachable.
  2. Tune driver pool/timeout settings in cassandra.properties.
  3. Rely on the framework retry; inspect the logged DriverException for the underlying fault.
  4. Confirm task definitions actually require limiting before scaling concurrency-limited tasks.
Defensive patterns

Strategy: retry

Try / catch

RetryTemplate retry = RetryTemplate.builder().retryOn(TransientException.class).maxAttempts(3).noBackoff().build();
retry.execute(ctx -> { executionDAO.addTaskToLimit(task); return null; });

Prevention

When it happens

Trigger: Inserting a row into the task_def_limit table (when a task with a concurrencyLimit > 0 starts) fails at the driver level.

Common situations: Cluster instability under high concurrency-limited task throughput; driver pool exhaustion; consistency not met during a topology change.

Related errors


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