{"record":{"id":"dfea179a0127c7ab","repo":"apache/pulsar","slug":"metadatastoreconfig-query-parameter-key-must","errorCode":null,"errorMessage":"MetadataStoreConfig query parameter '${key}' must be true or false","messagePattern":"MetadataStoreConfig query parameter '(.+?)' must be true or false","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/MetadataStoreConfigQueryParams.java","lineNumber":83,"sourceCode":"    }\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(\n            String key, BiConsumer<MetadataStoreConfigBuilder, Integer> setter) {\n        return Map.entry(key, (builder, value) -> setter.accept(builder, parsePositiveInt(key, value)));\n    }\n\n    private static boolean parseBoolean(String key, String value) {\n        if (\"true\".equalsIgnoreCase(value)) {\n            return true;\n        } else if (\"false\".equalsIgnoreCase(value)) {\n            return false;\n        }\n        throw new IllegalArgumentException(\"MetadataStoreConfig query parameter '\" + key\n                + \"' must be true or false\");\n    }\n\n    private static int parseNonNegativeInt(String key, String value) {\n        int intValue = parseInt(key, value);\n        if (intValue < 0) {\n            throw new IllegalArgumentException(\"MetadataStoreConfig query parameter '\" + key\n                    + \"' must be greater than or equal to 0\");\n        }\n        return intValue;\n    }\n\n    private static int parsePositiveInt(String key, String value) {\n        int intValue = parseInt(key, value);\n        if (intValue <= 0) {\n            throw new IllegalArgumentException(\"MetadataStoreConfig query parameter '\" + key\n                    + \"' must be greater than 0\");\n        }","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/MetadataStoreConfigQueryParams.java#L65-L101","documentation":"parseBoolean() validates string values for boolean MetadataStoreConfig query parameters. If the value is neither 'true' nor 'false' (case-insensitive), it throws IllegalArgumentException naming the offending key.","triggerScenarios":"booleanParam(key, value) called from createConfig() when a boolean query parameter in the metadata store URL has a non-boolean value, e.g. ?allowReadOnlyOps=yes or ?enableDigestTypeVerification=1.","commonSituations":"Using shell-style or numeric booleans (yes/no, 1/0) in URLs; case-confusion is fine but format confusion is not; hand-edited broker.conf metadataUrl values.","solutions":["Change the value to exactly true or false (any case).","Validate all URL query values before starting the broker/bookie.","Check documentation for which parameters are boolean-typed."],"exampleFix":"// before\n?allowReadOnlyOps=yes\n// after\n?allowReadOnlyOps=true","handlingStrategy":"validation","validationCode":"if (!\"true\".equalsIgnoreCase(v) && !\"false\".equalsIgnoreCase(v))\n    throw new IllegalArgumentException(key + \" must be true or false\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use only literal true/false in URL query values","Never use yes/no or 1/0 for these params","Validate config values in a pre-startup check"],"tags":["configuration","validation","boolean","metadata-store"],"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"}