apache/cassandra · info · SkipRepairException
Nothing to repair for
Error message
Nothing to repair for %s in %s - keypaces with MetaStrategy replication are not replicated to this node
What it means
RepairCoordinator throws a SkipRepairException when a repair is requested for a keyspace whose replicas do not include this node because the keyspace uses MetaStrategy replication (e.g. Accord/CMS metadata keyspace) and this node is not the CMS. SkipRepairException aborts this node's participation in the repair quietly rather than failing the whole session.
Solutions
- Verify the keyspace genuinely uses MetaStrategy and exclude it from repair ranges
- Run the repair from CMS nodes if MetaStrategy repair is intended
- Use --ignore-unreplicated-keyspaces (-r) so unreplicated keyspaces are skipped silently
- Confirm placement with `nodetool describecluster` / schema replication settings
Example fix
// before nodetool repair <meta_keyspace> // after nodetool repair -r <user_keyspace> // skip unreplicated/meta keyspaces
Defensive patterns
Strategy: validation
Validate before calling
KeyspaceMetadata ksm = Schema.instance.getKeyspaceMetadata(keyspace);
if (ksm != null && ksm.params.replication.klass.getSimpleName().equals("MetaStrategy") && !StorageService.instance.isCMS())
return; // skip repair for MetaStrategy keyspace this node doesn't replicate Prevention
- List keyspaces and their replication strategy before repairing
- Use --ignore-unreplicated-keyspaces (-r) when repairing all keyspaces
- Only run repair from nodes holding replicas of the target keyspace
When it happens
Trigger: Running `nodetool repair` (or StorageService.repairAsync) on a MetaStrategy-replicated keyspace from a node that is not the CMS; getNeighborsAndRanges hits the isMeta && !isCMS branch.
Common situations: Operators repairing all keyspaces (e.g. `nodetool repair -r`) on clusters using Accord/CMS metadata tables; nodes in a datacenter not hosting MetaStrategy ranges.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Nothing to repair for
- Can not alter a keyspace to use MetaReplicationStrategy
- Can not create a keyspace with MetaReplicationStrategy
- Cannot use keyspace inheriting fast path strategy with…
- Following datacenters have active nodes and must be present…
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/fed9b38453b772e9.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/repair/RepairCoordinator.java:445
{
throw RepairException.warn(String.format("Nothing to repair for %s in %s - aborting", range, state.keyspace));
}
}
addRangeToNeighbors(commonRanges, range, includeForRange);
includeNeighbors.addAll(includeForRange.endpoints());
}
if (includeNeighbors.isEmpty())
{
if (state.options.ignoreUnreplicatedKeyspaces())
{
throw new SkipRepairException(String.format("Nothing to repair for %s in %s - unreplicated keyspace is ignored since repair was called with --ignore-unreplicated-keyspaces",
state.options.getRanges(),
state.keyspace));
}
else if (isMeta && !isCMS)
{
throw new SkipRepairException(String.format("Nothing to repair for %s in %s - keypaces with MetaStrategy replication are not replicated to this node",
state.options.getRanges(),
state.keyspace));
}
}
boolean shouldExcludeDeadParticipants = state.options.isForcedRepair();
if (shouldExcludeDeadParticipants)
{
Set<InetAddressAndPort> actualNeighbors = Sets.newHashSet(Iterables.filter(includeNeighbors, ctx.failureDetector()::isAlive));
shouldExcludeDeadParticipants = !includeNeighbors.equals(actualNeighbors);
if (shouldExcludeDeadParticipants) includeNeighbors = actualNeighbors;
else logger.info("{} all replicas {} considered up and healthy; clearing force flag for this job", state.id, includeNeighbors);
}
return new NeighborsAndRanges(shouldExcludeDeadParticipants, includeNeighbors.containsAll(allNeighbors), includeNeighbors, commonRanges);
}
private void maybeStoreParentRepairStart(String[] cfnames)View on GitHub (pinned to 88fd0f6a0e)