apache/cassandra · error · CorruptSSTableException

Corrupted

Error message

Corrupted: %s

What it means

In UnfilteredRowIterators' validation wrapper, Unfiltered.validateData raised MarshalException for a row/static-row/range-tombstone-marker being iterated. The code converts it to CorruptSSTableException(me, filename): the on-disk data violates the schema's type constraints, i.e. SSTable corruption, not a user error.

Solutions

  1. Run nodetool scrub or repair to remove/rebuild the corrupted rows
  2. Restore the affected SSTables from a backup or rebuild the node from replicas
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at src/java/org/apache/cassandra/db/rows/UnfilteredRowIterators.java:344 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/753dcf40929f8abe. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/db/rows/UnfilteredRowIterators.java:344

                return row;
            }

            @Override
            public RangeTombstoneMarker applyToMarker(RangeTombstoneMarker marker)
            {
                validate(marker);
                return marker;
            }

            private void validate(Unfiltered unfiltered)
            {
                try
                {
                    unfiltered.validateData(iterator.metadata());
                }
                catch (MarshalException me)
                {
                    throw new CorruptSSTableException(me, filename);
                }
            }
        }
        return Transformation.apply(iterator, new Validator());
    }

    /**
     * Wraps the provided iterator so it logs the returned atoms for debugging purposes.
     * <p>
     * Note that this is only meant for debugging as this can log a very large amount of
     * logging at INFO.
     */
    public static UnfilteredRowIterator loggingIterator(UnfilteredRowIterator iterator, final String id, final boolean fullDetails)
    {
        TableMetadata metadata = iterator.metadata();
        logger.info("[{}] Logging iterator on {}.{}, partition key={}, reversed={}, deletion={}",
                    id,
                    metadata.keyspace,

View on GitHub (pinned to 88fd0f6a0e)