apache/cassandra · warning
property for check_data_resurrection startup check is not…
Error message
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.
What it means
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.
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
Defensive patterns
Strategy: validation
Validate before calling
// validate before startup
long thresholdMs = Long.parseLong(System.getProperty("cassandra.check_data_resurrection.minimum_threshold_ms", "0"));
long minGcGrace = tables.stream().mapToLong(t -> t.gcGraceSeconds()).min().orElse(0);
if (thresholdMs == 0 || thresholdMs < minGcGrace)
throw new IllegalArgumentException("Set check_data_resurrection threshold above the smallest gc_grace_seconds"); Prevention
- 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
When it happens
Trigger: 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).
Common situations: 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.
Understand the failure class
Background: "missing required config value" errors: why libraries refuse to start when a configuration key is empty, unset, or blank — this error's family across 48 libraries.
Related errors
- ERR_WRONG_MACHINE_STATE
- The JVM is not configured to stop on OutOfMemoryError which…
- Unable to parse property for check_data_resurrection…
- 32bit JVM detected. It is recommended to run Cassandra on…
- a hints file cannot be configured for both compression and…
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/0487780e19c07167.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/service/DataResurrectionCheck.java:186
{
try
{
minimumThresholdInMs = new DurationSpec.LongSecondsBound(minimumThresholdConfigValue).to(MILLISECONDS);
}
catch (Throwable t)
{
throw new IllegalArgumentException("Unable to parse " + MINIMUM_THRESHOLD_CONFIG_PROPERTY
+ " property for check_data_resurrection startup check.");
}
}
else
{
minimumThresholdInMs = 0;
}
if (minimumThresholdInMs == 0)
{
LOGGER.warn(MINIMUM_THRESHOLD_CONFIG_PROPERTY + " 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.");
}
return minimumThresholdInMs;
}
@Override
public boolean isConfigurable()
{
return true;
}
@Override
public String name()
{
return "check_data_resurrection";View on GitHub (pinned to 88fd0f6a0e)