{"record":{"id":"fcdca776c44f913c","repo":"apache/cassandra","slug":"failed-to-send-dictionary-update-notification-to","errorCode":null,"errorMessage":"Failed to send dictionary update notification to {}","messagePattern":"Failed to send dictionary update notification to (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/db/compression/CompressionDictionaryEventHandler.java","lineNumber":117,"sourceCode":"    }\n\n    // Best effort to notify the peer regarding the new dictionary being available to pull.\n    // If the request fails, each peer has periodic task scheduled to pull.\n    private void sendNotification(InetAddressAndPort target, CompressionDictionaryUpdateMessage message)\n    {\n        logger.debug(\"Sending dictionary update notification for {} to {}\", message.dictionaryId, target);\n\n        Message<CompressionDictionaryUpdateMessage> msg = Message.out(Verb.DICTIONARY_UPDATE_REQ, message);\n        MessagingService.instance()\n                        .sendWithResponse(target, msg)\n                        .addListener(future -> {\n                            if (future.isSuccess())\n                            {\n                                logger.debug(\"Successfully sent dictionary update notification to {}\", target);\n                            }\n                            else\n                            {\n                                logger.warn(\"Failed to send dictionary update notification to {}\",\n                                            target, future.cause());\n                            }\n                        });\n    }\n}\n","sourceCodeStart":99,"sourceCodeEnd":123,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/compression/CompressionDictionaryEventHandler.java#L99-L123","documentation":"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.","triggerScenarios":"sendNotification (called from onNewDictionaryTrained) sends a dictionary-update message to a target and future.isSuccess() is false — unreachable peer, dropped message, or connection failure.","commonSituations":"A target node down or restarting during training; internode network issues/firewalls; cluster membership changes mid-notification.","solutions":["Check the target node's status (nodetool status) and restart/rejoin it if down.","Verify internode connectivity and logs on the target for the transport failure shown in future.cause().","Rely on the periodic dictionary refresh scheduler to eventually pull the dictionary; monitor that the peer converges.","If persistent, inspect network/firewall between nodes and rerun the training/notify cycle."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// message send already non-blocking; treat failure as transient\nfuture.addListener(f -> { if (!f.isSuccess()) logAndSchedulePeerRefresh(f.cause()); });","preventionTips":["Ensure all peers are UP before triggering dictionary training.","Monitor internode connectivity; rely on periodic refresh as the fallback path."],"tags":["compression","dictionary","internode-messaging","network"],"backgroundTag":"network-request-failed","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}