{"record":{"id":"7a406352062efd9b","repo":"apache/cassandra","slug":"durability-refusing-to-report-a-faile","errorCode":null,"errorMessage":"{} durability: refusing to report {} ({}): a failed update blocks progress for {}","messagePattern":"(.+?) durability: refusing to report (.+?) \\((.+?)\\): a failed update blocks progress for (.+?)","errorType":"console","errorClass":"InconsistentEntryException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/service/accord/AccordCommandStore.java","lineNumber":702,"sourceCode":"        logger.debug(\"{} durability: ensuring for {} ({})\", this, onCommandStoreDurable, reportId);\n        executor().afterSubmittedAndConsequences(() -> {\n            logger.debug(\"{} durability: saving intersecting keys ({})\", this, reportId);\n            class Ready extends CountingResult implements BiConsumer<Void, Throwable>\n            {\n                public Ready() { super(1); }\n\n                @Override\n                public void accept(Void success, Throwable failure)\n                {\n                    if (failure == null) decrement();\n                    else tryFailure(failure);\n                }\n\n                void maybeFlush(ExclusiveCaches caches, AccordCacheEntry<RoutingKey, CommandsForKey, ?> e)\n                {\n                    if (e.isInconsistent())\n                    {\n                        noSpamLogger.warn(\"{} durability: refusing to report {} ({}): a failed update blocks progress for {}\",\n                                          AccordCommandStore.this, onCommandStoreDurable, reportId, e.key());\n                        throw new InconsistentEntryException(e.key());\n                    }\n\n                    if (e.isModified())\n                    {\n                        increment();\n                        caches.global().saveWhenReadyExclusive(e, this);\n                    }\n                }\n            }\n\n            Ready ready = new Ready();\n            try (ExclusiveCaches caches = lockCaches())\n            {\n                int count = 0;\n                if (ranges == null)\n                {","sourceCodeStart":684,"sourceCodeEnd":720,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/service/accord/AccordCommandStore.java#L684-L720","documentation":"Accord durability reporting refuses to report a cache entry as durable when the entry is 'inconsistent' (a failed update), because acknowledging durability would block progress for that key. It throws InconsistentEntryException instead of reporting a false durable state.","triggerScenarios":"maybeFlush during journal durability processing encounters a CommandsForKey cache entry marked inconsistent (a failed update) that is the report target.","commonSituations":"Accord transactions that partially failed leaving inconsistent journal entries; nodes recovering from crashes with failed writes in the durability pipeline.","solutions":["Inspect the failing key's journal state; let Accord retry/reconcile the failed update","Restart the node so the entry is reloaded from the journal rather than the cache","If persistent, report to the project - may indicate a journal consistency bug"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"catch (InconsistentEntryException e) { /* let Accord retry the key's updates; do not treat as fatal */ }","preventionTips":["Avoid killing the node mid-transaction to prevent failed-update entries","Monitor Accord journal for inconsistent entries","Keep nodes on stable disks to reduce partial-write scenarios"],"tags":["accord","durability","journal","consistency"],"backgroundTag":"internal-invariant-violation","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}