apache/cassandra · warning

Partition starting at position

Error message

Partition starting at position %d is unreadable; skipping to next

What it means

When a partition read fails during BTI scrub and the index iterator is available, the scrubber counts the partition as bad, warns with the partition's data file start position, and seeks to the next indexed partition to continue scrubbing. If seeking fails or no index is available, scrubbing cannot reliably continue and the scrub aborts with an unrecoverable-error warning.

Solutions

  1. Let scrub complete; the bad partition is skipped and reported via badPartitions.
  2. Run `nodetool repair` to restore the skipped partition's data from replicas.
  3. Check hardware/filesystem health for the volume holding Data.db.
  4. Re-run scrub plus `nodetool verify` afterwards to confirm the remaining sstables are clean.

Example fix

// after scrub skips partitions:
$ nodetool scrub <keyspace> <table>
$ nodetool repair <keyspace> <table>
$ nodetool verify <keyspace> <table>
Defensive patterns

Strategy: fallback

Prevention

When it happens

Trigger: `nodetool scrub` hits an unreadable partition at dataStart while indexIterator != null — corrupt or truncated partition data at a known offset, with a usable index to skip past it.

Common situations: Isolated corrupt regions in Data.db from disk faults; crash-written partial partitions; sstables manually copied from a live node (not flushed/snapshotted).

Understand the failure class

Background: Checksum mismatch errors: "checksum verification failed", "digest mismatch", "expected vs actual checksum" — what they mean and how to fix them — this error's family across 41 libraries.

Related errors


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

Appendix: source

Thrown at src/java/org/apache/cassandra/io/sstable/format/bti/BtiTableScrubber.java:231

                    catch (Throwable th2)
                    {
                        throwIfFatal(th2);
                        throwIfCannotContinue(key, th2);

                        outputHandler.warn(th2, "Retry failed too. Skipping to next partition (retry's stacktrace follows)");
                        badPartitions++;
                        if (!seekToNextPartition())
                            break;
                    }
                }
                else
                {
                    throwIfCannotContinue(key, th);

                    badPartitions++;
                    if (indexIterator != null)
                    {
                        outputHandler.warn("Partition starting at position %d is unreadable; skipping to next", dataStart);
                        if (!seekToNextPartition())
                            break;
                    }
                    else
                    {
                        outputHandler.warn("Unrecoverable error while scrubbing %s." +
                                           "Scrubbing cannot continue. The sstable will be marked for deletion. " +
                                           "You can attempt manual recovery from the pre-scrub snapshot. " +
                                           "You can also run nodetool repair to transfer the data from a healthy replica, if any.",
                                           sstable);
                        // There's no way to resync and continue. Give up.
                        break;
                    }
                }
            }
        }
    }

View on GitHub (pinned to 88fd0f6a0e)