{"record":{"id":"d24bbd9b934d54ff","repo":"apache/pulsar","slug":"unsupported-metadatastoreconfig-query-parameter","errorCode":null,"errorMessage":"Unsupported MetadataStoreConfig query parameter '${key}'. Supported parameters are ${supported}","messagePattern":"Unsupported MetadataStoreConfig query parameter '(.+?)'\\. Supported parameters are (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/MetadataStoreConfigQueryParams.java","lineNumber":54,"sourceCode":"            positiveIntParam(\"numSerDesThreads\", MetadataStoreConfigBuilder::numSerDesThreads),\n            positiveIntParam(\"sessionTimeoutMillis\", MetadataStoreConfigBuilder::sessionTimeoutMillis));\n\n    private MetadataStoreConfigQueryParams() {\n    }\n\n    static boolean contains(String key) {\n        return PARAM_SETTERS.containsKey(key);\n    }\n\n    @SuppressWarnings(\"rawtypes\")\n    static MetadataStoreConfig createConfig(AbstractConfiguration conf, Map<String, String> configParams) {\n        MetadataStoreConfigBuilder builder = MetadataStoreConfig.builder()\n                .sessionTimeoutMillis(conf.getZkTimeout())\n                .metadataStoreName(MetadataStoreConfig.METADATA_STORE);\n        configParams.forEach((key, value) -> {\n            BiConsumer<MetadataStoreConfigBuilder, String> setter = PARAM_SETTERS.get(key);\n            if (setter == null) {\n                throw new IllegalArgumentException(\"Unsupported MetadataStoreConfig query parameter '\" + key\n                        + \"'. Supported parameters are \" + PARAM_SETTERS.keySet());\n            }\n            setter.accept(builder, value);\n        });\n        return builder.build();\n    }\n\n    private static Map.Entry<String, BiConsumer<MetadataStoreConfigBuilder, String>> booleanParam(\n            String key, BiConsumer<MetadataStoreConfigBuilder, Boolean> setter) {\n        return Map.entry(key, (builder, value) -> setter.accept(builder, parseBoolean(key, value)));\n    }\n\n    private static Map.Entry<String, BiConsumer<MetadataStoreConfigBuilder, String>> nonNegativeIntParam(\n            String key, BiConsumer<MetadataStoreConfigBuilder, Integer> setter) {\n        return Map.entry(key, (builder, value) -> setter.accept(builder, parseNonNegativeInt(key, value)));\n    }\n\n    private static Map.Entry<String, BiConsumer<MetadataStoreConfigBuilder, String>> positiveIntParam(","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/MetadataStoreConfigQueryParams.java#L36-L72","documentation":"MetadataStoreConfigQueryParams.createConfig() maps known query-parameter keys from a metadata store URL (e.g. metadata-store-url?metadataStoreName=...&sessionTimeoutMillis=...) to MetadataStoreConfigBuilder setters. An unknown key that is recognized as a config param domain but has no registered setter throws IllegalArgumentException listing the supported keys.","triggerScenarios":"Passing an unrecognized key=value pair in the MetadataStoreConfig portion of a metadata store URL, e.g. a misspelled key like 'sessionTimoutMillis' or a key not in PARAM_SETTERS.","commonSituations":"Typos in metadata-store-url query strings; copy-pasting parameters valid in another Pulsar version; documentation drift between versions (a parameter was renamed or removed).","solutions":["Correct the key to one listed in the error message (PARAM_SETTERS keySet: sessionTimeoutMillis, metadataStoreName, etc.).","Check the parameter name against the docs for your exact Pulsar version.","Remove the unknown parameter if it is obsolete.","Put unrecognized (provider-specific) params before the config section or ensure the URL parser routes them to providerParams."],"exampleFix":"// before\nmetadata-store-url: zk+tls://zk1:2181/my/ledgers?sessionTimoutMillis=30000\n// after\nmetadata-store-url: zk+tls://zk1:2181/my/ledgers?sessionTimeoutMillis=30000","handlingStrategy":"validation","validationCode":"Set<String> supported = Set.of(\"sessionTimeoutMillis\",\"metadataStoreName\");\nfor (String key : params.keySet()) {\n  if (!supported.contains(key)) throw new IllegalArgumentException(\"unsupported param: \" + key);\n}","typeGuard":"boolean isSupportedParam(String key) { return MetadataStoreConfigQueryParams.contains(key); }","tryCatchPattern":null,"preventionTips":["Validate URL query keys against supported list before startup","Pin parameter names to your Pulsar version's docs","Lint metadataStoreUrl values in config CI"],"tags":["configuration","illegal-argument","metadata-store","url"],"backgroundTag":"invalid-config-parameter","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"}