conductor-oss/conductor · critical · IllegalStateException
conductor.app.sweeper-thread-count must be greater than 0.
Error message
conductor.app.sweeper-thread-count must be greater than 0.
What it means
Thrown by the sweeperExecutor @Bean in SchedulerConfiguration during Spring context startup. The sweeper is the background pool that periodically re-evaluates in-flight workflows (the decider queue). The bean refuses to be created when conductor.app.sweeper-thread-count is zero or negative, because a zero-size fixed thread pool cannot run anything and would silently stall all workflow progress.
Source
Thrown at core/src/main/java/com/netflix/conductor/core/config/SchedulerConfiguration.java:59
* @see com.netflix.conductor.core.events.queue.ConductorObservableQueue
*/
@Bean
public Scheduler scheduler(ConductorProperties properties) {
ThreadFactory threadFactory =
new BasicThreadFactory.Builder()
.namingPattern("event-queue-poll-scheduler-thread-%d")
.build();
Executor executorService =
Executors.newFixedThreadPool(
properties.getEventQueueSchedulerPollThreadCount(), threadFactory);
return Schedulers.from(executorService);
}
@Bean(SWEEPER_EXECUTOR_NAME)
public Executor sweeperExecutor(ConductorProperties properties) {
if (properties.getSweeperThreadCount() <= 0) {
throw new IllegalStateException(
"conductor.app.sweeper-thread-count must be greater than 0.");
}
ThreadFactory threadFactory =
new BasicThreadFactory.Builder().namingPattern("sweeper-thread-%d").build();
return Executors.newFixedThreadPool(properties.getSweeperThreadCount(), threadFactory);
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(3); // equal to the number of scheduled jobs
threadPoolTaskScheduler.setThreadNamePrefix("scheduled-task-pool-");
threadPoolTaskScheduler.initialize();
taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Set conductor.app.sweeper-thread-count to a positive integer (e.g. the default of availableProcessors()*2, or at minimum 1).
- If the intent was to disable sweeping entirely rather than resize it, find the proper sweeper-enabled property for your version instead of zeroing the thread count.
- Verify no env var or profile overrides the value to 0 (grep for sweeper-thread-count across all active property sources).
Example fix
// before conductor.app.sweeper-thread-count=0 // after conductor.app.sweeper-thread-count=8
Defensive patterns
Strategy: validation
Validate before calling
// Validate sweeper thread count before relying on the bean
int count = properties.getSweeperThreadCount();
if (count <= 0) {
throw new IllegalStateException(
"conductor.app.sweeper-thread-count must be > 0; was " + count);
} Prevention
- Treat conductor.app.sweeper-thread-count as a required-positive property in your deployment manifests.
- Add a startup config check / unit test that asserts the property resolves to >= 1 across all profiles.
- Never set it to 0 to 'disable' sweeping — use the dedicated enabled flag instead.
When it happens
Trigger: Setting the property conductor.app.sweeper-thread-count=0 (or a negative value) in application.properties / env, or passing it via -Dconductor.app.sweeper-thread-count=0. The guard is properties.getSweeperThreadCount() <= 0 inside the sweeperExecutor(ConductorProperties) bean method, which fires at bean wiring time before the app boots.
Common situations: Operator tries to disable the sweeper by setting the count to 0 (wrong approach). Migration from an older version where the property had a different key. An env-var override that resolves to an empty string is coerced to 0. Note the default is availableProcessors()*2, so this only fires when explicitly misconfigured.
Related errors
- Cannot set event processor thread count to <=0. To disable e
- Missing property for connectionString OR endpoint
- Skill registry is not available
- llmProvider not specified: {name}
- no configuration found for: {name}
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/7265e09c314f91d3.
Report an issue: GitHub.