{"record":{"id":"c08b854bc01183f8","repo":"apache/pulsar","slug":"metadatastoreconfig-query-parameter-key-must-c08b85","errorCode":null,"errorMessage":"MetadataStoreConfig query parameter '${key}' must be an integer","messagePattern":"MetadataStoreConfig query parameter '(.+?)' must be an integer","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/MetadataStoreConfigQueryParams.java","lineNumber":109,"sourceCode":"                    + \"' 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        }\n        return intValue;\n    }\n\n    private static int parseInt(String key, String value) {\n        try {\n            return Integer.parseInt(value);\n        } catch (NumberFormatException e) {\n            throw new IllegalArgumentException(\"MetadataStoreConfig query parameter '\" + key\n                    + \"' must be an integer\", e);\n        }\n    }\n}\n","sourceCodeStart":91,"sourceCodeEnd":114,"githubUrl":"https://github.com/apache/pulsar/blob/820761864ed8e2a7d2e52dd9763ad2ae117c1395/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/MetadataStoreConfigQueryParams.java#L91-L114","documentation":"parseInt() wraps NumberFormatException from Integer.parseInt into IllegalArgumentException 'MetadataStoreConfig query parameter <key> must be an integer'. Thrown when a numeric query parameter in the metadata store URL has a non-numeric value.","triggerScenarios":"Any integer-typed query parameter given a non-integer value, e.g. ?sessionTimeoutMillis=30s or ?sessionTimeoutMillis=abc.","commonSituations":"Including time units in values (30s, 500ms) when plain milliseconds are expected; quoted values from YAML leaking into the URL; whitespace or underscore-formatted numbers.","solutions":["Provide a plain decimal integer with no units or separators.","Use milliseconds for timeout parameters (e.g. 30000, not 30s).","Strip whitespace/quotes from templated values."],"exampleFix":"// before\n?sessionTimeoutMillis=30s\n// after\n?sessionTimeoutMillis=30000","handlingStrategy":"validation","validationCode":"try { Integer.parseInt(value); } catch (NumberFormatException e) {\n  throw new IllegalArgumentException(key + \" must be an integer\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never include units (s, ms) in numeric values","Strip quotes/whitespace from templated configs","Sanity-parse all numeric params before startup"],"tags":["configuration","validation","integer","number-format"],"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"}