{"record":{"id":"7ad3a5171e523865","repo":"apache/cassandra","slug":"nothing-to-repair-for-s-in-s-unreplicated-keys","errorCode":null,"errorMessage":"Nothing to repair for %s in %s - unreplicated keyspace is ignored since repair was called with --ignore-unreplicated-keyspaces","messagePattern":"Nothing to repair for (.+?) in (.+?) - unreplicated keyspace is ignored since repair was called with --ignore-unreplicated-keyspaces","errorType":"exception","errorClass":"SkipRepairException","httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/repair/RepairCoordinator.java","lineNumber":439,"sourceCode":"                else if (isMeta && !isCMS)\n                {\n                    logger.info(\"{} Repair requested for keyspace {}, which is only replicated by CMS members - ignoring\", state.id, state.keyspace);\n                    continue;\n                }\n                else\n                {\n                    throw RepairException.warn(String.format(\"Nothing to repair for %s in %s - aborting\", range, state.keyspace));\n                }\n            }\n            addRangeToNeighbors(commonRanges, range, includeForRange);\n            includeNeighbors.addAll(includeForRange.endpoints());\n        }\n\n        if (includeNeighbors.isEmpty())\n        {\n            if (state.options.ignoreUnreplicatedKeyspaces())\n            {\n                throw new SkipRepairException(String.format(\"Nothing to repair for %s in %s - unreplicated keyspace is ignored since repair was called with --ignore-unreplicated-keyspaces\",\n                                                            state.options.getRanges(),\n                                                            state.keyspace));\n            }\n            else if (isMeta && !isCMS)\n            {\n                throw new SkipRepairException(String.format(\"Nothing to repair for %s in %s - keypaces with MetaStrategy replication are not replicated to this node\",\n                                                            state.options.getRanges(),\n                                                            state.keyspace));\n            }\n        }\n\n        boolean shouldExcludeDeadParticipants = state.options.isForcedRepair();\n\n        if (shouldExcludeDeadParticipants)\n        {\n            Set<InetAddressAndPort> actualNeighbors = Sets.newHashSet(Iterables.filter(includeNeighbors, ctx.failureDetector()::isAlive));\n            shouldExcludeDeadParticipants = !includeNeighbors.equals(actualNeighbors);\n            if (shouldExcludeDeadParticipants) includeNeighbors = actualNeighbors;","sourceCodeStart":421,"sourceCodeEnd":457,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/repair/RepairCoordinator.java#L421-L457","documentation":"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.","triggerScenarios":"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.","commonSituations":"Repairing all keyspaces cluster-wide while some use SimpleStrategy RF=1; running repair on a node that holds no replicas for the target keyspace.","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."],"exampleFix":"// before\nnodetool repair my_rf1_ks --ignore-unreplicated-keyspaces\n// after\n// skip RF=1 keyspaces, or raise RF:\nALTER KEYSPACE my_rf1_ks WITH replication = {'class':'NetworkTopologyStrategy','dc1':3};","handlingStrategy":"try-catch","validationCode":"boolean hasLocalReplica = StorageService.instance.getLocalRanges(ks).iterator().hasNext();\n","typeGuard":null,"tryCatchPattern":"try { repairAsync(ks, optsWithIgnoreUnreplicated); } catch (SkipRepairException e) { logger.info(\"Nothing to repair: {}\", e.getMessage()); }","preventionTips":["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"],"tags":["repair","skip","replication"],"backgroundTag":"empty-result-set","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}