{"record":{"id":"3842e8a6681acbed","repo":"apache/cassandra","slug":"hint-dispatch-was-interrupted","errorCode":null,"errorMessage":"Hint dispatch was interrupted","messagePattern":"Hint dispatch was interrupted","errorType":"console","errorClass":null,"httpStatus":null,"severity":"info","filePath":"src/java/org/apache/cassandra/hints/HintsDispatcher.java","lineNumber":477,"sourceCode":"        {\n            this.to = to != null ? to : ACCORD_HINT_ENDPOINT;\n            this.hintCreationNanoTime = approxTime.translate().fromMillisSinceEpoch(hintCreationTimeMillisSinceEpoch);\n            if (accordTxnResult != null)\n                accordTxnResult.addCallback(this);\n            else\n                accordOutcome = SUCCESS;\n        }\n\n        Outcome await()\n        {\n            boolean timedOut;\n            try\n            {\n                timedOut = !condition.awaitUntil(HINT_REQ.expiresAtNanos(start));\n            }\n            catch (InterruptedException e)\n            {\n                logger.warn(\"Hint dispatch was interrupted\", e);\n                return INTERRUPTED;\n            }\n            normalOutcome = timedOut ? TIMEOUT : normalOutcome;\n\n            return outcome();\n        }\n\n        private Outcome outcome()\n        {\n            checkState((normalOutcome != null && accordOutcome != null) || (normalOutcome != SUCCESS || accordOutcome != SUCCESS), \"Outcome for both normal and accord hint delivery should be known\");\n            if (normalOutcome == RETRY_DIFFERENT_SYSTEM || accordOutcome == RETRY_DIFFERENT_SYSTEM)\n                return RETRY_DIFFERENT_SYSTEM;\n            if (normalOutcome == TIMEOUT || accordOutcome == TIMEOUT)\n                return TIMEOUT;\n            if (normalOutcome == FAILURE || accordOutcome == FAILURE)\n                return FAILURE;\n            checkState(normalOutcome == SUCCESS && accordOutcome == SUCCESS, \"Hint delivery should have been successful\");\n            return SUCCESS;","sourceCodeStart":459,"sourceCodeEnd":495,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/hints/HintsDispatcher.java#L459-L495","documentation":"HintsDispatcher's dispatch task waits (awaitUntil) for an outstanding hint delivery to complete. If the waiting thread is interrupted, it logs 'Hint dispatch was interrupted' and returns INTERRUPTED as the dispatch outcome; the hint will be retried later rather than lost.","triggerScenarios":"Thread interruption during hint delivery wait: node shutdown/decommission draining hint dispatch, hints service stop, or interruptible internal task cancellation.","commonSituations":"Graceful node shutdown or restart while hints were being dispatched to a recovered peer; decommission/operation mode changes cancelling the hints dispatcher.","solutions":["No action needed during planned shutdown — hints remain queued and are redelivered after restart.","If it appears without a shutdown, check for something calling Thread.interrupt() on executor threads; review executor shutdown hooks andrecent restarts.","Verify the target host recovered and hints eventually flushed: nodetool statushints / check hints directory backlog."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Internal path; for operators, treat INTERRUPTED outcome as retryable:\n// hints are persisted and redelivered automatically; monitor backlog instead of code\n// nodetool statusbackup / hints metrics: org.apache.cassandra.hints HintsService backlog size","preventionTips":["Schedule shutdowns/maintenance to allow hint dispatch to drain beforehand.","Monitor hints backlog metrics to detect repeated interrupted dispatches.","Avoid frequent operation-mode changes on nodes with large hint backlogs.","Ensure target nodes recover promptly so hints don't pile up during flapping."],"tags":["cassandra","hints","interrupt","shutdown"],"backgroundTag":"thread-interrupted","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}