{"record":{"id":"4466897007931ddf","repo":"apache/pulsar","slug":"the-shared-resource-doesn-t-support-thread-pool-c","errorCode":null,"errorMessage":"The shared resource  doesn't support thread pool configuration","messagePattern":"The shared resource  doesn't support thread pool configuration","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"pulsar-client/src/main/java/org/apache/pulsar/client/impl/PulsarClientSharedResourcesBuilderImpl.java","lineNumber":291,"sourceCode":"                case ThreadPool:\n                    return new ThreadPoolResourceConfig();\n                case Timer:\n                    return new TimerResourceConfig();\n                case MemoryLimitController:\n                    return new MemoryLimitResourceConfig();\n                case OpenTelemetry:\n                    return new OpenTelemetryResourceConfig();\n                default:\n                    throw new IllegalArgumentException(\"Unknown resource type: \" + sharedResource.getType());\n            }\n        });\n    }\n\n    @Override\n    public PulsarClientSharedResourcesBuilder configureThreadPool(\n            PulsarClientSharedResources.SharedResource sharedResource, Consumer<ThreadPoolConfig<?>> configurer) {\n        if (sharedResource.getType() != PulsarClientSharedResources.SharedResourceType.ThreadPool) {\n            throw new IllegalArgumentException(\"The shared resource \" + sharedResource + \" doesn't support thread pool\"\n                    + \" configuration\");\n        }\n        configurer.accept(getOrCreateConfig(sharedResource));\n        return this;\n    }\n\n    @Override\n    public PulsarClientSharedResourcesBuilder configureEventLoop(Consumer<EventLoopGroupConfig> configurer) {\n        configurer.accept(getOrCreateConfig(PulsarClientSharedResources.SharedResource.EventLoopGroup));\n        return this;\n    }\n\n    @Override\n    public PulsarClientSharedResourcesBuilder configureDnsResolver(Consumer<DnsResolverConfig> configurer) {\n        configurer.accept(getOrCreateConfig(PulsarClientSharedResources.SharedResource.DnsResolver));\n        return this;\n    }\n","sourceCodeStart":273,"sourceCodeEnd":309,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PulsarClientSharedResourcesBuilderImpl.java#L273-L309","documentation":"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.","triggerScenarios":"Calling configureThreadPool(sharedResource, configurer) with a SharedResource whose type is not SharedResourceType.ThreadPool, e.g. PulsarClientSharedResources.SharedResource.IO.","commonSituations":"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.","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"],"exampleFix":"// before\nbuilder.configureThreadPool(PulsarClientSharedResources.SharedResource.IO, cfg -> cfg.setThreads(8));\n// after\nbuilder.configureThreadPool(PulsarClientSharedResources.SharedResource.ThreadPool, cfg -> cfg.setThreads(8));","handlingStrategy":"validation","validationCode":"if (sharedResource.getType() == PulsarClientSharedResources.SharedResourceType.ThreadPool) {\n    builder.configureThreadPool(sharedResource, cfg -> cfg.setThreads(8));\n}","typeGuard":"boolean supportsThreadPoolConfig(PulsarClientSharedResources.SharedResource r) {\n    return r.getType() == PulsarClientSharedResources.SharedResourceType.ThreadPool;\n}","tryCatchPattern":"try {\n    builder.configureThreadPool(sharedResource, cfg -> cfg.setThreads(8));\n} catch (IllegalArgumentException e) {\n    log.warn(\"Resource {} does not support thread pool config: {}\", sharedResource, e.getMessage());\n}","preventionTips":["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"],"tags":["java","pulsar-client","configuration","illegal-argument"],"backgroundTag":"invalid-argument-for-resource-type","analyzedSha":"820761864ed8e2a7d2e52dd9763ad2ae117c1395","analyzedAt":"2026-09-06T00:14:20.138Z","contentChangedAt":"2026-09-06T00:14:20.138Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}