conductor-oss/conductor · error · TransientException
Failed to add event execution for event: %s, handler: %s
Error message
Failed to add event execution for event: %s, handler: %s
What it means
addEventExecution wraps any DriverException in a TransientException with a message naming the event and handler. Event execution insert failures (timeouts, unavailability) are treated as retriable, so the framework RetryTemplate retries up to 3 times before propagating.
Source
Thrown at cassandra-persistence/src/main/java/com/netflix/conductor/cassandra/dao/CassandraExecutionDAO.java:660
String jsonPayload = toJson(eventExecution);
recordCassandraDaoEventRequests("addEventExecution", eventExecution.getEvent());
recordCassandraDaoPayloadSize(
"addEventExecution", jsonPayload.length(), eventExecution.getEvent(), "n/a");
return session.execute(
insertEventExecutionStatement.bind(
eventExecution.getMessageId(),
eventExecution.getName(),
eventExecution.getId(),
jsonPayload))
.wasApplied();
} catch (DriverException e) {
Monitors.error(CLASS_NAME, "addEventExecution");
String errorMsg =
String.format(
"Failed to add event execution for event: %s, handler: %s",
eventExecution.getEvent(), eventExecution.getName());
LOGGER.error(errorMsg, e);
throw new TransientException(errorMsg);
}
}
@Override
public void updateEventExecution(EventExecution eventExecution) {
try {
String jsonPayload = toJson(eventExecution);
recordCassandraDaoEventRequests("updateEventExecution", eventExecution.getEvent());
recordCassandraDaoPayloadSize(
"updateEventExecution", jsonPayload.length(), eventExecution.getEvent(), "n/a");
session.execute(
updateEventExecutionStatement.bind(
eventExecutionsTTL,
jsonPayload,
eventExecution.getMessageId(),
eventExecution.getName(),
eventExecution.getId()));
} catch (DriverException e) {View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Verify Cassandra cluster health and that write consistency is satisfiable by live replicas.
- Tune driver connection pool size and write timeouts via cassandra.properties.
- Rely on the built-in retry; if it persists, inspect the logged DriverException cause.
- Reduce event handler burst rate or increase RF for the events table.
Defensive patterns
Strategy: retry
Try / catch
// Framework RetryTemplate handles TransientException. For a manual call site:
RetryTemplate retry = RetryTemplate.builder().retryOn(TransientException.class).maxAttempts(3).noBackoff().build();
retry.execute(ctx -> { executionDAO.addEventExecution(eventExecution); return null; }); Prevention
- Ensure the events table RF satisfies the write consistency under node loss.
- Size the driver connection pool for peak event-handler throughput.
- Alert on DriverException rates to catch cluster degradation early.
When it happens
Trigger: Inserting an EventExecution row (event handler dispatch) fails at the driver level — Cassandra node down, write timeout, consistency not met, connection pool exhausted.
Common situations: High event-handler throughput saturating the driver pool; cluster degradation during a topology change; RF too low for the configured write consistency.
Related errors
- 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
- Failed to get workflow: %s
- Error updating taskDefLimit for task - %s:%s in workflow: %s
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/bcf232a6b1259849.
Report an issue: GitHub.