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
- Ensure Cassandra is healthy and write consistency is reachable.
- Tune driver pool/timeout settings in cassandra.properties.
- Rely on the framework retry; inspect the logged DriverException for the underlying fault.
- 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
- Right-size the driver pool for concurrency-limited task throughput.
- Keep the task_def_limit table RF consistent with write consistency.
- Verify task definitions genuinely need a concurrency limit before scaling them.
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
- Failed to get workflow: %s
- Failed to add event execution for event: %s, handler: %s
- Failed to update event execution for event: %s, handler: %s
- Failed to remove event execution for event: %s, handler: %s
- Failed to fetch event executions for event: %s, handler: %s
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/ea16194b94830b05.
Report an issue: GitHub.