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

  1. Verify Cassandra cluster health and that write consistency is satisfiable by live replicas.
  2. Tune driver connection pool size and write timeouts via cassandra.properties.
  3. Rely on the built-in retry; if it persists, inspect the logged DriverException cause.
  4. 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

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


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