apache/cassandra · error

Corrupt flags value for unfiltered partition (isStatic flag…

Error message

Corrupt flags value for unfiltered partition (isStatic flag set): %s

What it means

Fired in UnfilteredSerializer.deserializeOne when the flags byte read from disk has the isStatic bit set on a non-first unfiltered of a partition, which the format forbids. It signals byte-stream desynchronization or SSTable corruption and is surfaced as a corruption error while reading the partition.

Solutions

  1. Check the streaming/compression settings and versions on both endpoints match
  2. Run repair to re-stream the data; scrub the corrupted file if it is on disk
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java:495 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/90d19c4efeb02b46. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java:495

        // It wouldn't be wrong per-se to use an unsorted builder, but it would be inefficient so make sure we don't do it by mistake
        assert builder.isSorted();

        int flags = in.readUnsignedByte();
        if (isEndOfPartition(flags))
            return null;

        int extendedFlags = readExtendedFlags(in, flags);

        if (kind(flags) == Unfiltered.Kind.RANGE_TOMBSTONE_MARKER)
        {
            ClusteringBoundOrBoundary<byte[]> bound = ClusteringBoundOrBoundary.serializer.deserialize(in, helper.version, header.clusteringTypes());
            return deserializeMarkerBody(in, header, bound);
        }
        else
        {
            // deserializeStaticRow should be used for that.
            if (isStatic(extendedFlags))
                throw new IOException("Corrupt flags value for unfiltered partition (isStatic flag set): " + flags);

            builder.newRow(Clustering.serializer.deserialize(in, helper.version, header.clusteringTypes()));
            return deserializeRowBody(in, header, helper, flags, extendedFlags, builder);
        }
    }

    public Unfiltered deserializeTombstonesOnly(FileDataInput in, SerializationHeader header, DeserializationHelper helper)
    throws IOException
    {
        while (true)
        {
            int flags = in.readUnsignedByte();
            if (isEndOfPartition(flags))
                return null;

            int extendedFlags = readExtendedFlags(in, flags);

            if (kind(flags) == Unfiltered.Kind.RANGE_TOMBSTONE_MARKER)

View on GitHub (pinned to 88fd0f6a0e)