apache/cassandra · warning

Failed to send dictionary update notification to

Error message

Failed to send dictionary update notification to {}

What it means

When a new dictionary is trained, the manager notifies peer nodes over the internode messaging so they can pull it. If the send future reports failure, the handler logs this warning with the cause. The training itself succeeded; only peer notification failed, so peers may learn the dictionary later via the periodic scheduler instead.

Solutions

  1. Check the target node's status (nodetool status) and restart/rejoin it if down.
  2. Verify internode connectivity and logs on the target for the transport failure shown in future.cause().
  3. Rely on the periodic dictionary refresh scheduler to eventually pull the dictionary; monitor that the peer converges.
  4. If persistent, inspect network/firewall between nodes and rerun the training/notify cycle.
Defensive patterns

Strategy: retry

Try / catch

// message send already non-blocking; treat failure as transient
future.addListener(f -> { if (!f.isSuccess()) logAndSchedulePeerRefresh(f.cause()); });

Prevention

When it happens

Trigger: sendNotification (called from onNewDictionaryTrained) sends a dictionary-update message to a target and future.isSuccess() is false — unreachable peer, dropped message, or connection failure.

Common situations: A target node down or restarting during training; internode network issues/firewalls; cluster membership changes mid-notification.

Related errors


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

Appendix: source

Thrown at src/java/org/apache/cassandra/db/compression/CompressionDictionaryEventHandler.java:117

    }

    // Best effort to notify the peer regarding the new dictionary being available to pull.
    // If the request fails, each peer has periodic task scheduled to pull.
    private void sendNotification(InetAddressAndPort target, CompressionDictionaryUpdateMessage message)
    {
        logger.debug("Sending dictionary update notification for {} to {}", message.dictionaryId, target);

        Message<CompressionDictionaryUpdateMessage> msg = Message.out(Verb.DICTIONARY_UPDATE_REQ, message);
        MessagingService.instance()
                        .sendWithResponse(target, msg)
                        .addListener(future -> {
                            if (future.isSuccess())
                            {
                                logger.debug("Successfully sent dictionary update notification to {}", target);
                            }
                            else
                            {
                                logger.warn("Failed to send dictionary update notification to {}",
                                            target, future.cause());
                            }
                        });
    }
}

View on GitHub (pinned to 88fd0f6a0e)