conductor-oss/conductor · critical · IllegalStateException

Cannot set event processor thread count to <=0. To disable e

Error message

Cannot set event processor thread count to <=0. To disable event processing, set conductor.default-event-processor.enabled=false.

What it means

Thrown by the DefaultEventProcessor constructor when properties.getEventProcessorThreadCount() <= 0. The processor runs event-handler actions on a fixed thread pool; a non-positive size is invalid. The message itself tells you the supported way to disable the processor: set conductor.default-event-processor.enabled=false rather than zeroing the thread count.

Source

Thrown at core/src/main/java/com/netflix/conductor/core/events/DefaultEventProcessor.java:97

    public DefaultEventProcessor(
            ExecutionService executionService,
            MetadataService metadataService,
            ActionProcessor actionProcessor,
            JsonUtils jsonUtils,
            ConductorProperties properties,
            ObjectMapper objectMapper,
            Map<String, Evaluator> evaluators,
            @Qualifier("onTransientErrorRetryTemplate") RetryTemplate retryTemplate) {
        this.executionService = executionService;
        this.metadataService = metadataService;
        this.actionProcessor = actionProcessor;
        this.objectMapper = objectMapper;
        this.jsonUtils = jsonUtils;
        this.evaluators = evaluators;
        this.retryTemplate = retryTemplate;

        if (properties.getEventProcessorThreadCount() <= 0) {
            throw new IllegalStateException(
                    "Cannot set event processor thread count to <=0. To disable event "
                            + "processing, set conductor.default-event-processor.enabled=false.");
        }
        ThreadFactory threadFactory =
                new BasicThreadFactory.Builder()
                        .namingPattern("event-action-executor-thread-%d")
                        .build();
        eventActionExecutorService =
                Executors.newFixedThreadPool(
                        properties.getEventProcessorThreadCount(), threadFactory);

        this.isEventMessageIndexingEnabled = properties.isEventMessageIndexingEnabled();
        LOGGER.info("Event Processing is ENABLED");
    }

    public void handle(ObservableQueue queue, Message msg) {
        List<EventExecution> transientFailures = null;
        boolean executionFailed = false;

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. To disable event processing: set conductor.default-event-processor.enabled=false (do not zero the thread count).
  2. To keep it enabled: set conductor.app.event-processor-thread-count to a positive value (default 2).
  3. Verify no profile/env overrides force the count to 0 while the processor remains enabled.

Example fix

// before - breaks startup
conductor.app.event-processor-thread-count=0
// after - correctly disables the processor
conductor.default-event-processor.enabled=false
Defensive patterns

Strategy: validation

Validate before calling

// Validate before relying on the processor
int n = properties.getEventProcessorThreadCount();
if (n <= 0 && properties.isDefaultEventProcessorEnabled()) {
    throw new IllegalStateException(
        "Set conductor.default-event-processor.enabled=false to disable, "
            + "or event-processor-thread-count to > 0");
}

Prevention

When it happens

Trigger: Setting conductor.app.event-processor-thread-count=0 (or negative) while the default event processor bean is still being created (i.e. conductor.default-event-processor.enabled is not false). Fires at construction time during Spring startup.

Common situations: An operator tries to turn off event processing by setting the thread count to 0 instead of using the enabled flag. An env override coerces an empty value to 0. Note the default is 2, so this only fires on explicit misconfiguration.

Related errors


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