apache/cassandra · error · IllegalArgumentException
Unable to parse property for check_data_resurrection…
Error message
Unable to parse ${MINIMUM_THRESHOLD_CONFIG_PROPERTY} property for check_data_resurrection startup check. What it means
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.
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.
Example fix
// before (in jvm-server options / system property) -Dcassandra.check_data_resurrection.minimum_threshold=10minutes // after -Dcassandra.check_data_resurrection.minimum_threshold=600
Defensive patterns
Strategy: validation
Validate before calling
String v = System.getProperty("cassandra.check_data_resurrection.minimum_threshold");
if (v != null) {
try { new org.apache.cassandra.config.DurationSpec.LongSecondsBound(v); }
catch (Exception e) { throw new IllegalStateException("Invalid threshold value: " + v, e); }
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- property for check_data_resurrection startup check is not…
- The JVM is not configured to stop on OutOfMemoryError which…
- 32bit JVM detected. It is recommended to run Cassandra on…
- a hints file cannot be configured for both compression and…
- A maximum number of tokens per node is supported
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/128f9edc33d4ba24.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/service/DataResurrectionCheck.java:175
LOGGER.trace("Resolved heartbeat file for data resurrection check: " + heartbeatFile);
return heartbeatFile;
}
static long getMinimumThresholdMillis(Map<String, Object> config)
{
String minimumThresholdConfigValue = (String) config.get(MINIMUM_THRESHOLD_CONFIG_PROPERTY);
long minimumThresholdInMs;
if (minimumThresholdConfigValue != null)
{
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;
}View on GitHub (pinned to 88fd0f6a0e)