apache/cassandra · error

has dropped hints, because node is down past configured…

Error message

{} has {} dropped hints, because node is down past configured hint window.

What it means

HintedHandoffMetrics.log warns, once per logged interval, that hints destined for a node were discarded because the node was down longer than max_hint_window_in_ms. The data those hints would have carried must be repaired by other means.

Solutions

  1. Run repair (e.g. nodetool repair) on the affected ranges to restore consistency.
  2. Increase max_hint_window_in_ms if long planned outages should keep hints.
  3. Investigate why the endpoint was down past the hint window.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at src/java/org/apache/cassandra/metrics/HintedHandoffMetrics.java:73 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at src/java/org/apache/cassandra/metrics/HintedHandoffMetrics.java:73

    public void incrCreatedHints(InetAddressAndPort address)
    {
        createdHintCounts.get(address).inc();
    }

    public void incrPastWindow(InetAddressAndPort address)
    {
        notStored.get(address).mark();
    }

    public void log()
    {
        for (Entry<InetAddressAndPort, DifferencingCounter> entry : notStored.asMap().entrySet())
        {
            long difference = entry.getValue().difference();
            if (difference == 0)
                continue;
            logger.warn("{} has {} dropped hints, because node is down past configured hint window.", entry.getKey(), difference);
            SystemKeyspace.updateHintsDropped(entry.getKey(), nextTimeUUID(), (int) difference);
        }
    }

    public static class DifferencingCounter
    {
        private final Counter meter;
        private long reported = 0;

        public DifferencingCounter(InetAddressAndPort address)
        {
            //This changes the name of the metric, people can update their monitoring when upgrading?
            this.meter = Metrics.counter(factory.createMetricName("Hints_not_stored-" + address.toString().replace(':', '.')));
        }

        public long difference()
        {
            long current = meter.getCount();

View on GitHub (pinned to 88fd0f6a0e)