apache/pulsar · error · IllegalArgumentException
The shared resource doesn't support thread pool configurati
Error message
The shared resource doesn't support thread pool configuration
What it means
PulsarClientSharedResourcesBuilder.configureThreadPool() only accepts the ThreadPool shared resource. If you pass any other SharedResource (e.g. IO or Memory), the builder throws this IllegalArgumentException because thread-pool sizing semantics do not apply to those resource types.
Source
Thrown at pulsar-client/src/main/java/org/apache/pulsar/client/impl/PulsarClientSharedResourcesBuilderImpl.java:291
case ThreadPool:
return new ThreadPoolResourceConfig();
case Timer:
return new TimerResourceConfig();
case MemoryLimitController:
return new MemoryLimitResourceConfig();
case OpenTelemetry:
return new OpenTelemetryResourceConfig();
default:
throw new IllegalArgumentException("Unknown resource type: " + sharedResource.getType());
}
});
}
@Override
public PulsarClientSharedResourcesBuilder configureThreadPool(
PulsarClientSharedResources.SharedResource sharedResource, Consumer<ThreadPoolConfig<?>> configurer) {
if (sharedResource.getType() != PulsarClientSharedResources.SharedResourceType.ThreadPool) {
throw new IllegalArgumentException("The shared resource " + sharedResource + " doesn't support thread pool"
+ " configuration");
}
configurer.accept(getOrCreateConfig(sharedResource));
return this;
}
@Override
public PulsarClientSharedResourcesBuilder configureEventLoop(Consumer<EventLoopGroupConfig> configurer) {
configurer.accept(getOrCreateConfig(PulsarClientSharedResources.SharedResource.EventLoopGroup));
return this;
}
@Override
public PulsarClientSharedResourcesBuilder configureDnsResolver(Consumer<DnsResolverConfig> configurer) {
configurer.accept(getOrCreateConfig(PulsarClientSharedResources.SharedResource.DnsResolver));
return this;
}
View on GitHub (pinned to 820761864e)
Solutions
- Pass only PulsarClientSharedResources.SharedResource.ThreadPool to configureThreadPool
- Use the correct configure method for the resource type (e.g. the IO or memory-specific configurers)
- Check sharedResource.getType() before invoking configureThreadPool in generic configuration code
Example fix
// before builder.configureThreadPool(PulsarClientSharedResources.SharedResource.IO, cfg -> cfg.setThreads(8)); // after builder.configureThreadPool(PulsarClientSharedResources.SharedResource.ThreadPool, cfg -> cfg.setThreads(8));
Defensive patterns
Strategy: validation
Validate before calling
if (sharedResource.getType() == PulsarClientSharedResources.SharedResourceType.ThreadPool) {
builder.configureThreadPool(sharedResource, cfg -> cfg.setThreads(8));
} Type guard
boolean supportsThreadPoolConfig(PulsarClientSharedResources.SharedResource r) {
return r.getType() == PulsarClientSharedResources.SharedResourceType.ThreadPool;
} Try / catch
try {
builder.configureThreadPool(sharedResource, cfg -> cfg.setThreads(8));
} catch (IllegalArgumentException e) {
log.warn("Resource {} does not support thread pool config: {}", sharedResource, e.getMessage());
} Prevention
- Always switch on SharedResourceType when applying configurers generically
- Keep per-resource-type configuration in separate typed builder calls
- Unit-test the configuration code with each SharedResource enum value
When it happens
Trigger: Calling configureThreadPool(sharedResource, configurer) with a SharedResource whose type is not SharedResourceType.ThreadPool, e.g. PulsarClientSharedResources.SharedResource.IO.
Common situations: Configuring multiple shared client resources in a loop and applying the thread-pool configurer to every resource instead of only the ThreadPool one; copy-pasting a memory/IO configuration block and adding a pool configurer to it.
Related errors
- No resources have been configured while using shareConfigure
- configuredService should not be an instance of SystemTopicBa
- Ranges must be [0, 65535] but provided range is
- Key hash ranges with overlap between and
- Invalid value %s for the position. Allowed values are [lates
AI-assisted analysis of apache/pulsar@820761864e (2026-09-06).
Data as JSON: /api/errors/4466897007931ddf.
Report an issue: GitHub.