apache/cassandra · warning · SkipRepairException
Nothing to repair for
Error message
Nothing to repair for %s in %s - unreplicated keyspace is ignored since repair was called with --ignore-unreplicated-keyspaces
What it means
During repair setup, if the set of neighbors (ranges replicated to this node) is empty and the caller passed --ignore-unreplicated-keyspaces, the coordinator throws SkipRepairException: an unreplicated (single-replica) keyspace has nothing to repair and was explicitly requested to be ignored.
Solutions
- Treat SkipRepairException as an expected no-op when using --ignore-unreplicated-keyspaces.
- Increase the keyspace's replication factor if the data actually needs multi-node repair.
- Run the repair on a node that holds replicas for the keyspace, or restrict the repair to replicated keyspaces.
Example fix
// before
nodetool repair my_rf1_ks --ignore-unreplicated-keyspaces
// after
// skip RF=1 keyspaces, or raise RF:
ALTER KEYSPACE my_rf1_ks WITH replication = {'class':'NetworkTopologyStrategy','dc1':3}; Defensive patterns
Strategy: try-catch
Validate before calling
boolean hasLocalReplica = StorageService.instance.getLocalRanges(ks).iterator().hasNext();
Try / catch
try { repairAsync(ks, optsWithIgnoreUnreplicated); } catch (SkipRepairException e) { logger.info("Nothing to repair: {}", e.getMessage()); } Prevention
- Only pass --ignore-unreplicated-keyspaces when skipping RF=1 keyspaces is intended
- Check keyspace replication strategy before repair automation
- Repair RF=1 keyspaces without that flag or raise their replication factor
When it happens
Trigger: Running repair with --ignore-unreplicated-keyspaces on a keyspace whose data is not replicated to this node (includeNeighbors empty), e.g. a keyspace with replication factor 1 or no local replicas.
Common situations: Repairing all keyspaces cluster-wide while some use SimpleStrategy RF=1; running repair on a node that holds no replicas for the target keyspace.
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
- Nothing to repair for
- Empty keyspace, skipping repair
- A repair_session_space of
- A repair_session_space of
- An incremental repair with session id
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/7ad3a5171e523865.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/repair/RepairCoordinator.java:439
else if (isMeta && !isCMS)
{
logger.info("{} Repair requested for keyspace {}, which is only replicated by CMS members - ignoring", state.id, state.keyspace);
continue;
}
else
{
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;View on GitHub (pinned to 88fd0f6a0e)