{"record":{"id":"128f9edc33d4ba24","repo":"apache/cassandra","slug":"unable-to-parse-minimum-threshold-config-propert","errorCode":null,"errorMessage":"Unable to parse ${MINIMUM_THRESHOLD_CONFIG_PROPERTY} property for check_data_resurrection startup check.","messagePattern":"Unable to parse (.+?) property for check_data_resurrection startup check\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/service/DataResurrectionCheck.java","lineNumber":175,"sourceCode":"\n        LOGGER.trace(\"Resolved heartbeat file for data resurrection check: \" + heartbeatFile);\n\n        return heartbeatFile;\n    }\n\n    static long getMinimumThresholdMillis(Map<String, Object> config)\n    {\n        String minimumThresholdConfigValue = (String) config.get(MINIMUM_THRESHOLD_CONFIG_PROPERTY);\n        long minimumThresholdInMs;\n        if (minimumThresholdConfigValue != null)\n        {\n            try\n            {\n                minimumThresholdInMs = new DurationSpec.LongSecondsBound(minimumThresholdConfigValue).to(MILLISECONDS);\n            }\n            catch (Throwable t)\n            {\n                throw new IllegalArgumentException(\"Unable to parse \" + MINIMUM_THRESHOLD_CONFIG_PROPERTY\n                                                   + \" property for check_data_resurrection startup check.\");\n            }\n        }\n        else\n        {\n            minimumThresholdInMs = 0;\n        }\n\n        if (minimumThresholdInMs == 0)\n        {\n            LOGGER.warn(MINIMUM_THRESHOLD_CONFIG_PROPERTY + \" property for check_data_resurrection startup check \" +\n                        \"is not set or is set to 0s. Consider increasing the default value as the startup check \" +\n                        \"might prevent the startup of the node when gc_grace_seconds for user tables \" +\n                        \"is set very low and the node is restarted.\");\n        }\n\n        return minimumThresholdInMs;\n    }","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/service/DataResurrectionCheck.java#L157-L193","documentation":"IllegalArgumentException thrown by DataResurrectionCheck.getMinimumThresholdMillis when the value supplied for the check_data_resurrection startup-check property (MINIMUM_THRESHOLD_CONFIG_PROPERTY) cannot be parsed as a DurationSpec.LongSecondsBound. The startup check guards against data resurrection after node downtime, and the custom threshold must be a valid seconds-based duration.","triggerScenarios":"Setting the system property for the check_data_resurrection startup check to a non-numeric or non-duration value (e.g. '10m', 'fast', '100000000000000' overflowing the long seconds bound) so new DurationSpec.LongSecondsBound(value) throws, with value provided but unparseable.","commonSituations":"Typos in cassandra-env.jspublish/system properties when tuning the startup check; using duration units unsupported by LongSecondsBound (it expects seconds-formatted values); copy-pasting values from other tools that accept different duration syntax.","solutions":["Set the property to a plain number of seconds (e.g. 600) or a valid DurationSpec format such as '10m'/'1h' that LongSecondsBound accepts.","Remove the property entirely to fall back to the default (0 / gc_grace-only) behavior.","Check cassandra-env.sh / JVM options for the exact property name and value; fix the malformed entry and restart.","Consult DurationSpec documentation for accepted units and magnitudes to avoid bound overflow."],"exampleFix":"// before (in jvm-server options / system property)\n-Dcassandra.check_data_resurrection.minimum_threshold=10minutes\n// after\n-Dcassandra.check_data_resurrection.minimum_threshold=600","handlingStrategy":"validation","validationCode":"String v = System.getProperty(\"cassandra.check_data_resurrection.minimum_threshold\");\nif (v != null) {\n    try { new org.apache.cassandra.config.DurationSpec.LongSecondsBound(v); }\n    catch (Exception e) { throw new IllegalStateException(\"Invalid threshold value: \" + v, e); }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate duration properties against DurationSpec syntax before deploy.","Use plain seconds numbers to avoid unit syntax issues.","Smoke-test startup checks in a dev cluster after config changes."],"tags":["configuration","duration-parse","startup-check"],"backgroundTag":"invalid-config-value","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}