apache/cassandra · info

Overriding max local pause time from ms to ms

Error message

Overriding {} max local pause time from {}ms to {}ms

What it means

FailureDetector reads the max local pause time (cassandra.max_local_pause_in_ms, default 5000) at startup. If the value differs from the built-in default, it logs a warning that the operator is overriding how long local pauses (GC/scheduler stalls) are tolerated before phrasing nodes as failed. The value is converted to nanoseconds and used for phi/pause detection.

Solutions

  1. No action needed if the override is intentional — this is an informational warning confirming the custom value took effect.
  2. To silence the warning, remove the override so the default (5000ms) is used.
  3. Validate the chosen pause value against your JVM GC pause targets; too low causes spurious node flapping in gossip.

Example fix

// before (cassandra.yaml)
cassandra.max_local_pause_in_ms: 10000  // warns: overriding from 5000
// after
# remove the setting to use the default and silence the warning
# cassandra.max_local_pause_in_ms: 5000
Defensive patterns

Strategy: validation

Validate before calling

# Check whether the override is intentional before starting the node
grep 'cassandra.max_local_pause_in_ms' /etc/cassandra/cassandra.yaml
# Compare with default 5000; if unset, expect no warning

Prevention

When it happens

Trigger: Setting cassandra.max_local_pause_in_ms in cassandra.yaml (or overriding the system property) to any value other than the default, then starting the node.

Common situations: Tuning failure detection on VMs or containers with expected long GC pauses; operators lowering or raising the pause budget without realizing the warning is informational.

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.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/85c40d9375f8a0f1. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/gms/FailureDetector.java:91

 * Check the paper and the <i>IFailureDetector</i> interface for details.
 */
public class FailureDetector implements IFailureDetector, FailureDetectorMBean
{
    private static final Logger logger = LoggerFactory.getLogger(FailureDetector.class);
    public static final String MBEAN_NAME = "org.apache.cassandra.net:type=FailureDetector";
    private static final int SAMPLE_SIZE = 1000;
    protected static final long INITIAL_VALUE_NANOS = TimeUnit.NANOSECONDS.convert(getInitialValue(), TimeUnit.MILLISECONDS);
    private static final int DEBUG_PERCENTAGE = 80; // if the phi is larger than this percentage of the max, log a debug message
    private static final long MAX_LOCAL_PAUSE_IN_NANOS = getMaxLocalPause();
    private long lastInterpret = preciseTime.now();
    private long lastPause = 0L;

    private static long getMaxLocalPause()
    {
        long pause = MAX_LOCAL_PAUSE_IN_MS.getLong();

        if (!String.valueOf(pause).equals(MAX_LOCAL_PAUSE_IN_MS.getDefaultValue()))
            logger.warn("Overriding {} max local pause time from {}ms to {}ms",
                        MAX_LOCAL_PAUSE_IN_MS.getKey(), MAX_LOCAL_PAUSE_IN_MS.getDefaultValue(), pause);

        return pause * 1000000L;
    }

    public static final IFailureDetector instance = newFailureDetector();
    public static final Predicate<InetAddressAndPort> isEndpointAlive = instance::isAlive;
    public static final Predicate<Replica> isReplicaAlive = r -> isEndpointAlive.test(r.endpoint());

    // this is useless except to provide backwards compatibility in phi_convict_threshold,
    // because everyone seems pretty accustomed to the default of 8, and users who have
    // already tuned their phi_convict_threshold for their own environments won't need to
    // change.
    private final double PHI_FACTOR = 1.0 / Math.log(10.0); // 0.434...

    private final ConcurrentHashMap<InetAddressAndPort, ArrivalWindow> arrivalSamples = new ConcurrentHashMap<>();
    private final List<IFailureDetectionEventListener> fdEvntListeners = new CopyOnWriteArrayList<>();

View on GitHub (pinned to 88fd0f6a0e)