{"record":{"id":"541ad8f25541c0d2","repo":"apache/cassandra","slug":"token-ranges-must-be-specified-when-performing-pul","errorCode":null,"errorMessage":"Token ranges must be specified when performing pull repair. Please specify at least one token range which both hosts have in common.","messagePattern":"Token ranges must be specified when performing pull repair\\. Please specify at least one token range which both hosts have in common\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/repair/messages/RepairOption.java","lineNumber":301,"sourceCode":"            throw new IllegalArgumentException(\"Too many job threads. Max is \" + MAX_JOB_THREADS);\n        }\n        if (!dataCenters.isEmpty() && !hosts.isEmpty())\n        {\n            throw new IllegalArgumentException(\"Cannot combine -dc and -hosts options.\");\n        }\n        if (primaryRange && ((!dataCenters.isEmpty() && !option.isInLocalDCOnly()) || !hosts.isEmpty()))\n        {\n            throw new IllegalArgumentException(\"You need to run primary range repair on all nodes in the cluster.\");\n        }\n        if (pullRepair)\n        {\n            if (hosts.size() != 2)\n            {\n                throw new IllegalArgumentException(\"Pull repair can only be performed between two hosts. Please specify two hosts, one of which must be this host.\");\n            }\n            else if (ranges.isEmpty())\n            {\n                throw new IllegalArgumentException(\"Token ranges must be specified when performing pull repair. Please specify at least one token range which both hosts have in common.\");\n            }\n        }\n\n        return option;\n    }\n\n    private final RepairParallelism parallelism;\n    private final boolean primaryRange;\n    private final boolean incremental;\n    private final boolean trace;\n    private final int jobThreads;\n    private final boolean pullRepair;\n    private final boolean forceRepair;\n    private final PreviewKind previewKind;\n    private final boolean optimiseStreams;\n    private final boolean ignoreUnreplicatedKeyspaces;\n    private final boolean repairData;\n    private final boolean repairPaxos;","sourceCodeStart":283,"sourceCodeEnd":319,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/repair/messages/RepairOption.java#L283-L319","documentation":"Pull repair streams only explicit token ranges, so RepairOption.parse requires at least one range when --pull is used. With no ranges supplied there is nothing to pull and the request is rejected with IllegalArgumentException.","triggerScenarios":"nodetool repair --pull -hosts h1,h2 without any -st/-et (start/end token) range arguments, leaving the ranges list empty.","commonSituations":"Operators forgetting that pull repair is range-based (unlike normal repair which can repair everything); automation building pull-repair commands that drop empty range args.","solutions":["Add at least one common token range via -st/-et pairs shared by both hosts","Compute ranges from the ring (e.g. nodetool ring / describering) and pass the overlapping ones","Drop --pull and use a standard repair if you want full-range repair"],"exampleFix":"// before\nnodetool repair --pull -hosts 10.0.0.1,10.0.0.2 keyspace1\n// after\nnodetool repair --pull -hosts 10.0.0.1,10.0.0.2 -st -9223372036854775808 -et -3074457345618258602 keyspace1","handlingStrategy":"validation","validationCode":"if (pullRepair && (ranges == null || ranges.isEmpty()))\n    throw new IllegalArgumentException(\"pull repair requires at least one token range (-st/-et)\");","typeGuard":null,"tryCatchPattern":"try { RepairOption.parse(opts); } catch (IllegalArgumentException e) { if (e.getMessage().contains(\"Token ranges must be specified\")) { /* derive ranges from ring and retry */ } else throw e; }","preventionTips":["Derive token ranges from nodetool describering instead of hardcoding","Never pass --pull without explicit range arguments","Verify the chosen ranges are common to both hosts"],"tags":["repair","cli","missing-argument"],"backgroundTag":"missing-required-argument","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}