{"record":{"id":"0487780e19c07167","repo":"apache/cassandra","slug":"property-for-check-data-resurrection-startup-chec","errorCode":null,"errorMessage":" property for check_data_resurrection startup check is not set or is set to 0s. Consider increasing the default value as the startup check might prevent the startup of the node when gc_grace_seconds for user tables is set very low and the node is restarted.","messagePattern":" property for check_data_resurrection startup check is not set or is set to 0s\\. Consider increasing the default value as the startup check might prevent the startup of the node when gc_grace_seconds for user tables is set very low and the node is restarted\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/service/DataResurrectionCheck.java","lineNumber":186,"sourceCode":"        {\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    }\n\n    @Override\n    public boolean isConfigurable()\n    {\n        return true;\n    }\n\n    @Override\n    public String name()\n    {\n        return \"check_data_resurrection\";","sourceCodeStart":168,"sourceCodeEnd":204,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/service/DataResurrectionCheck.java#L168-L204","documentation":"The check_data_resurrection startup check warns when its minimum-threshold config property (MINIMUM_THRESHOLD_CONFIG_PROPERTY, e.g. cassandra.check_data_resurrection.minimum_threshold) is unset or 0s. With a 0 threshold the check compares tombstone/gc_grace data without a safety margin and can block node startup when tables use very low gc_grace_seconds.","triggerScenarios":"getMinimumThresholdMillis() reads the configured duration and finds it absent or parsed to 0; the check then runs with minimumThresholdInMs = 0 during node startup (Heartbeat-based data-resurrection validation).","commonSituations":"Fresh installs without the property; operators explicitly setting it to 0s to disable the margin; clusters with tables at gc_grace_seconds=0 that then fail startup after restarts.","solutions":["Set the property to a sensible duration (e.g. greater than your smallest gc_grace_seconds, commonly hours) in cassandra.yaml / startup-check configuration","If intentionally accepting the risk, document it and ensure no user tables use very low gc_grace_seconds","Review table schemas: raise gc_grace_seconds on user tables below the threshold so the startup check won't block restarts"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// validate before startup\nlong thresholdMs = Long.parseLong(System.getProperty(\"cassandra.check_data_resurrection.minimum_threshold_ms\", \"0\"));\nlong minGcGrace = tables.stream().mapToLong(t -> t.gcGraceSeconds()).min().orElse(0);\nif (thresholdMs == 0 || thresholdMs < minGcGrace)\n    throw new IllegalArgumentException(\"Set check_data_resurrection threshold above the smallest gc_grace_seconds\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set the minimum-threshold property explicitly in config on every install","Audit user tables for gc_grace_seconds near 0 and align the threshold","Document the property in your cassandra.yaml template so upgrades keep it"],"tags":["startup-check","gc-grace","configuration"],"backgroundTag":"missing-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"}