{"record":{"id":"f8cee623b80a05d5","repo":"apache/cassandra","slug":"not-running-paxos-repair-for-topology-change-becau","errorCode":null,"errorMessage":"Not running paxos repair for topology change because paxos repair has been disabled","messagePattern":"Not running paxos repair for topology change because paxos repair has been disabled","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/service/ActiveRepairService.java","lineNumber":1192,"sourceCode":"        return sessions.size();\n    }\n\n    public Future<?> repairPaxosForTopologyChange(String ksName, Collection<Range<Token>> ranges, String reason)\n    {\n        List<Supplier<Future<?>>> work = repairPaxosForTopologyChangeAsync(ksName,ranges, reason);\n        List<Future<?>> futures = new ArrayList<>();\n\n        for (Supplier<Future<?>> futureSupplier : work)\n            futures.add(futureSupplier.get());\n\n        return FutureCombiner.allOf(futures);\n    }\n\n    public List<Supplier<Future<?>>> repairPaxosForTopologyChangeAsync(String ksName, Collection<Range<Token>> ranges, String reason)\n    {\n        if (!paxosRepairEnabled())\n        {\n            logger.warn(\"Not running paxos repair for topology change because paxos repair has been disabled\");\n            return Collections.emptyList();\n        }\n\n        if (ranges.isEmpty())\n        {\n            logger.warn(\"Not running paxos repair for topology change because there are no ranges to repair\");\n            return Collections.emptyList();\n        }\n        ClusterMetadata metadata = ClusterMetadata.current();\n        List<TableMetadata> tables = Lists.newArrayList(metadata.schema.getKeyspaces().getNullable(ksName).tables);\n        List<Supplier<Future<?>>> futures = new ArrayList<>(ranges.size() * tables.size());\n        Keyspace keyspace = Keyspace.open(ksName);\n\n        for (Range<Token> range: ranges)\n        {\n            for (TableMetadata table : tables)\n            {\n","sourceCodeStart":1174,"sourceCodeEnd":1210,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/service/ActiveRepairService.java#L1174-L1210","documentation":"repairPaxosForTopologyChangeAsync normally runs Paxos repairs for ranges affected by topology changes to guarantee consistent LWT commits. When paxos_repair (consistency) is disabled via config, it logs this warning and returns an empty future list, skipping the safety repair. This weakens the guarantee that Paxos state is consistent after range movements.","triggerScenarios":"Calling repairPaxosForTopologyChangeAsync (e.g. during range move/decommission) when paxosRepairEnabled() is false, i.e. consistent_range_movement / paxos repair disabled in cassandra.yaml or via the config.","commonSituations":"Operators disabling paxos repair to work around perf issues or older known bugs, then performing topology changes (bootstrap/decommission/move).","solutions":["Re-enable paxos repair (consistent_range_movement / repair enabled) before topology changes.","If intentionally disabled, accept the weaker LWT guarantees, or manually run repair after the topology change.","Check cassandra.yaml for the paxos repair/consistent range movement setting and nodetool settraceprobability-style toggles that may have disabled it at runtime."],"exampleFix":"// before (cassandra.yaml)\nconsistent_range_movement: false\n// after\nconsistent_range_movement: true","handlingStrategy":"validation","validationCode":"// guard: do not perform topology change with paxos repair disabled\nif (!DatabaseDescriptor.paxosRepairEnabledForTopologyChange())\n    throw new IllegalStateException(\"Enable paxos repair (consistent_range_movement) before bootstrap/decommission\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep consistent_range_movement enabled in production unless a known bug forces it off.","Re-enable it promptly after any temporary workaround and before the next topology change.","Audit cassandra.yaml in config management so paxos repair settings do not drift."],"tags":["paxos","repair","topology-change","lightweight-transactions"],"backgroundTag":"feature-not-enabled","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"}