apache/cassandra · error
Unable to find sufficient sources for streaming range {} in
Error message
Unable to find sufficient sources for streaming range {} in keyspace {} with RF=1. Keyspace might be missing data. What it means
Same code path as the strict case in RangeStreamer.calculateRangesToFetchWithPreferredEndpoints, but for RF=1 keyspaces without strict consistency: instead of failing, it logs 'Unable to find sufficient sources for streaming range {range} in keyspace {ks} with RF=1. Keyspace might be missing data.' and continues, leaving that range unfetched. The bootstrapped node will simply lack data for that range.
Source
Thrown at src/java/org/apache/cassandra/dht/RangeStreamer.java:576
* and the other is a transient replica. So we must need fetch from two places in that case for the full range we gain.
* For a transient range we only need to fetch from one.
*/
if (useStrictConsistency && addressList.size() > 1 && (addressList.filter(Replica::isFull).size() > 1 || addressList.filter(Replica::isTransient).size() > 1))
throw new IllegalStateException(String.format("Multiple strict sources found for %s, sources: %s", toFetch, addressList));
//We must have enough stuff to fetch from
if (!any(addressList, isSufficient))
{
if (strat.getReplicationFactor().allReplicas == 1)
{
if (useStrictConsistency)
{
logger.warn("A node required to move the data consistently is down");
throw new IllegalStateException("Unable to find sufficient sources for streaming range " + toFetch + " in keyspace " + keyspace + " with RF=1. " +
"Ensure this keyspace contains replicas in the source datacenter.");
}
else
logger.warn("Unable to find sufficient sources for streaming range {} in keyspace {} with RF=1. " +
"Keyspace might be missing data.", toFetch, keyspace);
}
else
{
if (useStrictConsistency)
logger.warn("A node required to move the data consistently is down");
throw new IllegalStateException("Unable to find sufficient sources for streaming range " + toFetch + " in keyspace " + keyspace);
}
}
}
return rangesToFetchWithPreferredEndpoints.build();
}
/**
* The preferred endpoint list is the wrong format because it is keyed by Replica (this node) rather than the source
* endpoint we will fetch from which streaming wants.
*/
public static Multimap<InetAddressAndPort, FetchReplica> convertPreferredEndpointsToWorkMap(EndpointsByReplica preferredEndpoints)View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Identify RF=1 keyspaces (SELECT keyspace_name FROM system_schema.keyspaces / DESC KEYSPACES) and raise RF to >= 2-3, then repair.
- Restore the down replica from backup before completing the topology operation.
- Rebuild the new node or run a repair/re-stream for the affected keyspace once the replica is back.
- Accept and document the data gap if the keyspace is disposable; drop it to silence the warning.
Example fix
// find and fix RF=1 keyspaces
cqlsh> ALTER KEYSPACE legacy_ks WITH replication = {'class':'NetworkTopologyStrategy','dc1':3};
$ nodetool repair -full legacy_ks
$ nodetool cleanup Defensive patterns
Strategy: retry
Validate before calling
// detect RF=1 keyspaces before topology operations
session.execute("SELECT keyspace_name FROM system_schema.keyspaces").all().stream()
.filter(r -> rfOf(r) == 1)
.forEach(r -> log.warn("RF=1 keyspace {} risks missing data during streaming", r)); Prevention
- Audit keyspaces for RF=1 before any node join/leave.
- After the warning, run repair/rebuild for the affected keyspace once its replica returns.
- Keep verified backups of single-replica keyspaces.
When it happens
Trigger: Bootstrap/range fetch where the single replica of an RF=1 keyspace range is dead or filtered out as a source, and useStrictConsistency is false; the range is skipped with this warning.
Common situations: Bootstrapping replacement nodes in clusters with legacy RF=1 keyspaces; a dead sole replica during topology expansion; operators unaware RF=1 keyspaces exist until a node joins/leaves.
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
- A node required to move the data consistently is down
- Unable to find sufficient sources for streaming range " + tr
- Unable to find sufficient sources for streaming range " + ra
- Keyspace is already added to fetch map
- Unable to find sufficient sources for streaming range in ke
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/f2fa6c9b8fcab6bd.
Report an issue: GitHub.