apache/cassandra · warning
Not running paxos repair for topology change because paxos r
Error message
Not running paxos repair for topology change because paxos repair has been disabled
What it means
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.
Source
Thrown at src/java/org/apache/cassandra/service/ActiveRepairService.java:1192
return sessions.size();
}
public Future<?> repairPaxosForTopologyChange(String ksName, Collection<Range<Token>> ranges, String reason)
{
List<Supplier<Future<?>>> work = repairPaxosForTopologyChangeAsync(ksName,ranges, reason);
List<Future<?>> futures = new ArrayList<>();
for (Supplier<Future<?>> futureSupplier : work)
futures.add(futureSupplier.get());
return FutureCombiner.allOf(futures);
}
public List<Supplier<Future<?>>> repairPaxosForTopologyChangeAsync(String ksName, Collection<Range<Token>> ranges, String reason)
{
if (!paxosRepairEnabled())
{
logger.warn("Not running paxos repair for topology change because paxos repair has been disabled");
return Collections.emptyList();
}
if (ranges.isEmpty())
{
logger.warn("Not running paxos repair for topology change because there are no ranges to repair");
return Collections.emptyList();
}
ClusterMetadata metadata = ClusterMetadata.current();
List<TableMetadata> tables = Lists.newArrayList(metadata.schema.getKeyspaces().getNullable(ksName).tables);
List<Supplier<Future<?>>> futures = new ArrayList<>(ranges.size() * tables.size());
Keyspace keyspace = Keyspace.open(ksName);
for (Range<Token> range: ranges)
{
for (TableMetadata table : tables)
{
View on GitHub (pinned to 88fd0f6a0e)
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.
Example fix
// before (cassandra.yaml) consistent_range_movement: false // after consistent_range_movement: true
Defensive patterns
Strategy: validation
Validate before calling
// guard: do not perform topology change with paxos repair disabled
if (!DatabaseDescriptor.paxosRepairEnabledForTopologyChange())
throw new IllegalStateException("Enable paxos repair (consistent_range_movement) before bootstrap/decommission"); Prevention
- 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.
When it happens
Trigger: 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.
Common situations: Operators disabling paxos repair to work around perf issues or older known bugs, then performing topology changes (bootstrap/decommission/move).
Related errors
- Not running paxos repair for topology change because there a
- Cannot perform LWT operation as there is more than one (%d)
- Cannot run paxos only repair on %s.%s, which isn't configure
- Cannot run paxos only repair on %s.%s, which isn't configure
- cannot repair paxos in a preview repair
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/f8cee623b80a05d5.
Report an issue: GitHub.