apache/cassandra · error · IllegalStateException

Stream Session & SSTable

Error message

Stream Session & SSTable (%s) pendingRepair UUID mismatch.

What it means

In CassandraEntireSSTableStreamReader's constructor, the pendingRepair UUID on the stream message header does not match the session's pendingRepair ID. Entire-SSTable streaming of an incremental-repair session requires exact match; mismatch means stale or misrouted stream data, so construction fails before reading.

Solutions

  1. Verify pendingRepair IDs on sender and receiver match; restart the stream with consistent repair state
  2. Abort the incremental repair session that produced the mismatch and re-run the repair
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/java/org/apache/cassandra/db/streaming/CassandraEntireSSTableStreamReader.java:74 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at src/java/org/apache/cassandra/db/streaming/CassandraEntireSSTableStreamReader.java:74

 * CassandraEntireSSTableStreamReader reads SSTable off the wire and writes it to disk.
 */
public class CassandraEntireSSTableStreamReader implements IStreamReader
{
    private static final Logger logger = LoggerFactory.getLogger(CassandraEntireSSTableStreamReader.class);

    private final TableId tableId;
    private final StreamSession session;
    private final StreamMessageHeader messageHeader;
    private final CassandraStreamHeader header;
    private final int fileSequenceNumber;

    public CassandraEntireSSTableStreamReader(StreamMessageHeader messageHeader, CassandraStreamHeader streamHeader, StreamSession session)
    {
        if (session.getPendingRepair() != null)
        {
            // we should only ever be streaming pending repair sstables if the session has a pending repair id
            if (!session.getPendingRepair().equals(messageHeader.pendingRepair))
                throw new IllegalStateException(format("Stream Session & SSTable (%s) pendingRepair UUID mismatch.", messageHeader.tableId));
        }

        this.header = streamHeader;
        this.session = session;
        this.messageHeader = messageHeader;
        this.tableId = messageHeader.tableId;
        this.fileSequenceNumber = messageHeader.sequenceNumber;
    }

    /**
     * @param in where this reads data from
     * @return SSTable transferred
     * @throws IOException if reading the remote sstable fails. Will throw an RTE if local write fails.
     */
    @Override
    public SSTableMultiWriter read(DataInputPlus in) throws IOException
    {
        ColumnFamilyStore cfs = ColumnFamilyStore.getIfExists(tableId);

View on GitHub (pinned to 88fd0f6a0e)