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

  1. Identify RF=1 keyspaces (SELECT keyspace_name FROM system_schema.keyspaces / DESC KEYSPACES) and raise RF to >= 2-3, then repair.
  2. Restore the down replica from backup before completing the topology operation.
  3. Rebuild the new node or run a repair/re-stream for the affected keyspace once the replica is back.
  4. 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

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


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/f2fa6c9b8fcab6bd. Report an issue: GitHub.