{"record":{"id":"0d4bd399f5343e90","repo":"apache/cassandra","slug":"unable-to-deserialize-payload-for-minimum-client-d","errorCode":null,"errorMessage":"Unable to deserialize payload for minimum_client_driver_versions_warned: ","messagePattern":"Unable to deserialize payload for minimum_client_driver_versions_warned: ","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/guardrails/Guardrails.java","lineNumber":1958,"sourceCode":"        }\n        catch (Throwable t)\n        {\n            throw new RuntimeException(\"Unable to serialize minimum_client_driver_versions_disallowed configuration: \" + t.getMessage());\n        }\n    }\n\n    @Override\n    public void setMinimumClientDriverVersionsWarned(String value)\n    {\n        try\n        {\n            Map<String, String> map = JsonUtils.JSON_OBJECT_MAPPER.readValue(value, new TypeReference<>() {});\n            GuardrailsOptions.validateAndSanitizeClientDriverVersions(map, \"minimum_client_driver_versions_warned\");\n            DEFAULT_CONFIG.setMinimumClientDriverVersionsWarned(map);\n        }\n        catch (JsonProcessingException t)\n        {\n            throw new RuntimeException(\"Unable to deserialize payload for minimum_client_driver_versions_warned: \" + t.getMessage());\n        }\n    }\n\n    @Override\n    public void setMinimumClientDriverVersionsDisallowed(String value)\n    {\n        try\n        {\n            Map<String, String> map = JsonUtils.JSON_OBJECT_MAPPER.readValue(value, new TypeReference<>() {});\n            GuardrailsOptions.validateAndSanitizeClientDriverVersions(map, \"minimum_client_driver_versions_disallowed\");\n            DEFAULT_CONFIG.setMinimumClientDriverVersionsDisallowed(map);\n        }\n        catch (JsonProcessingException t)\n        {\n            throw new RuntimeException(\"Unable to deserialize minimum_client_driver_versions_disallowed: \" + t.getMessage());\n        }\n    }\n","sourceCodeStart":1940,"sourceCodeEnd":1976,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/guardrails/Guardrails.java#L1940-L1976","documentation":"This error is thrown when the guardrail config property 'minimum_client_driver_versions_warned' cannot be parsed from its JSON string form into a Map<String,String> by Jackson. Cassandra wraps the Jackson JsonProcessingException in a RuntimeException including only the Jackson message. It means the value supplied via JMX/nodetool or config is not valid JSON matching the expected map shape.","triggerScenarios":"Calling setMinimumClientDriverVersionsWarned(String) with malformed JSON, valid JSON that is not an object of string-to-string (e.g. an array, number, or nested object), or a payload that fails GuardrailsOptions.validateAndSanitizeClientDriverVersions producing a JsonProcessingException.","commonSituations":"Operators passing nodetool/JMX values with unquoted keys, single quotes instead of double quotes, trailing commas, or shell-mangled quoting when setting guardrail thresholds for client driver versions.","solutions":["Validate the JSON payload with a parser before calling the setter (must be a JSON object with string keys and string values)","Correct quoting when passing through shell: wrap the value in single quotes and use double quotes inside, e.g. '{\"3.0.0\":\"cassandra-driver\"}'","Read the embedded Jackson message after the colon; it pinpoints the exact character/position of the parse failure","Use the version from a config file (cassandra.yaml) instead of an inline JMX string to avoid quoting issues"],"exampleFix":"// before\nsetMinimumClientDriverVersionsWarned(\"{'4.11.0':'java-driver'}\");\n// after\nsetMinimumClientDriverVersionsWarned(\"{\\\"4.11.0\\\":\\\"java-driver\\\"}\");","handlingStrategy":"validation","validationCode":"String v = \"{\\\"4.11.0\\\":\\\"java-driver\\\"}\";\ntry (var p = new com.fasterxml.jackson.core.JsonFactory().createParser(v)) {\n    while (p.nextToken() != null) { }\n}\n// additionally verify top-level object with string values before calling the setter","typeGuard":"boolean isValidVersionsJson(String s) {\n    try {\n        java.util.Map<String,String> m = JsonUtils.JSON_OBJECT_MAPPER.readValue(s, new com.fasterxml.jackson.core.type.TypeReference<java.util.Map<String,String>>() {});\n        return m != null;\n    } catch (Exception e) { return false; }\n}","tryCatchPattern":"try {\n    guardrails.setMinimumClientDriverVersionsWarned(json);\n} catch (RuntimeException e) {\n    if (e.getMessage().startsWith(\"Unable to deserialize payload for minimum_client_driver_versions_warned\")) {\n        // log Jackson message after the colon, correct the JSON, retry\n    } else throw e;\n}","preventionTips":["Always test the JSON string with a parser before applying guardrail setters","Use double quotes for JSON keys and values; single-quote the whole payload in shells","Prefer cassandra.yaml config over inline JMX strings to avoid quoting issues"],"tags":["json","guardrails","deserialization","config"],"backgroundTag":"json-unmarshal-failed","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}