{"record":{"id":"90d19c4efeb02b46","repo":"apache/cassandra","slug":"corrupt-flags-value-for-unfiltered-partition-isst","errorCode":null,"errorMessage":"Corrupt flags value for unfiltered partition (isStatic flag set): %s","messagePattern":"Corrupt flags value for unfiltered partition \\(isStatic flag set\\): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java","lineNumber":495,"sourceCode":"        // 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\n        assert builder.isSorted();\n\n        int flags = in.readUnsignedByte();\n        if (isEndOfPartition(flags))\n            return null;\n\n        int extendedFlags = readExtendedFlags(in, flags);\n\n        if (kind(flags) == Unfiltered.Kind.RANGE_TOMBSTONE_MARKER)\n        {\n            ClusteringBoundOrBoundary<byte[]> bound = ClusteringBoundOrBoundary.serializer.deserialize(in, helper.version, header.clusteringTypes());\n            return deserializeMarkerBody(in, header, bound);\n        }\n        else\n        {\n            // deserializeStaticRow should be used for that.\n            if (isStatic(extendedFlags))\n                throw new IOException(\"Corrupt flags value for unfiltered partition (isStatic flag set): \" + flags);\n\n            builder.newRow(Clustering.serializer.deserialize(in, helper.version, header.clusteringTypes()));\n            return deserializeRowBody(in, header, helper, flags, extendedFlags, builder);\n        }\n    }\n\n    public Unfiltered deserializeTombstonesOnly(FileDataInput in, SerializationHeader header, DeserializationHelper helper)\n    throws IOException\n    {\n        while (true)\n        {\n            int flags = in.readUnsignedByte();\n            if (isEndOfPartition(flags))\n                return null;\n\n            int extendedFlags = readExtendedFlags(in, flags);\n\n            if (kind(flags) == Unfiltered.Kind.RANGE_TOMBSTONE_MARKER)","sourceCodeStart":477,"sourceCodeEnd":513,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java#L477-L513","documentation":"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.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java:495 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the streaming/compression settings and versions on both endpoints match","Run repair to re-stream the data; scrub the corrupted file if it is on disk"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}