apache/cassandra · warning
Not running paxos repair for topology change because there a
Error message
Not running paxos repair for topology change because there are no ranges to repair
What it means
repairPaxosForTopologyChangeAsync checks that there are actual token ranges to repair for the given keyspace before scheduling Paxos repairs. When the ranges collection is empty, it warns and returns an empty list - nothing to repair, which may indicate the keyspace has no data or the caller passed no ranges.
Source
Thrown at src/java/org/apache/cassandra/service/ActiveRepairService.java:1198
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)
{
ReplicationParams replication = keyspace.getMetadata().params.replication;
// Special case meta keyspace as it uses a custom partitioner/tokens, but the paxos table and repairs
// are based on the system partitioner
EndpointsForRange endpoints = replication.isMeta()
? ClusterMetadata.current().fullCMSMembersAsReplicas()
: ClusterMetadata.current().placement(replication).reads.forRange(range).get();View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Verify the keyspace name and its replication strategy (does it own any ranges here?).
- Check the caller that computed the ranges (topology change logic) to confirm the empty set is expected.
- If the keyspace should own ranges, inspect cluster metadata (nodetool describering) to see token ownership.
Defensive patterns
Strategy: validation
Validate before calling
// check keyspace owns ranges before requesting paxos repair
List<Range<Token>> ranges = StorageService.instance.getLocalRanges(ksName);
if (ranges == null || ranges.isEmpty())
logger.info("Keyspace {} owns no local ranges; skipping paxos repair", ksName); Prevention
- Double-check keyspace names in scripted topology operations (typos yield empty ranges).
- Confirm replication factor and token ownership with nodetool describering before moves.
- Treat the empty-ranges warning as a signal to verify the caller's range computation.
When it happens
Trigger: Calling repairPaxosForTopologyChangeAsync(ksName, ranges, reason) with ranges.isEmpty() true - e.g. topology change operation computed no owned ranges for the keyspace, or keyspace has no tables/ranges owned.
Common situations: Decommission/move on a keyspace with no replicas on this node; programmatic callers passing an empty range set; keyspace name typo yielding no ranges.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- Not running paxos repair for topology change because paxos r
- 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/ce95cba2f36621ff.
Report an issue: GitHub.