{"record":{"id":"6fc441a1851c4ed1","repo":"apache/cassandra","slug":"error-building-row-with-data-deserialized-from-s","errorCode":null,"errorMessage":"Error building row with data deserialized from %s","messagePattern":"Error building row with data deserialized from (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java","lineNumber":651,"sourceCode":"                columns.apply(UnfilteredSerializer::readColumn, helper);\n            }\n            catch (WrappedException e)\n            {\n                if (e.getCause() instanceof IOException)\n                    throw (IOException) e.getCause();\n\n                throw e;\n            }\n\n            return builder.build();\n        }\n        catch (RuntimeException | AssertionError e)\n        {\n            // Corrupted data could be such that it triggers an assertion in the row Builder, or break one of its assumption.\n            // Of course, a bug in said builder could also trigger this, but it's impossible a priori to always make the distinction\n            // between a real bug and data corrupted in just the bad way. Besides, re-throwing as an IOException doesn't hide the\n            // exception, it just make we catch it properly and mark the sstable as corrupted.\n            throw new IOException(\"Error building row with data deserialized from \" + in, e);\n        }\n    }\n\n    private static void readColumn(DeserializationHelper helper, ColumnMetadata column)\n    {\n        try\n        {\n            if (column.isSimple())\n                readSimpleColumn(column, helper.in, helper.header, helper, helper.builder, helper.livenessInfo);\n            else\n                readComplexColumn(column, helper.in, helper.header, helper, helper.hasComplexDeletion, helper.builder, helper.livenessInfo);\n        }\n        catch (IOException e)\n        {\n            throw new WrappedException(e);\n        }\n    }\n","sourceCodeStart":633,"sourceCodeEnd":669,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java#L633-L669","documentation":"In UnfilteredSerializer.deserializeRowBody, deserialized data triggered a RuntimeException/AssertionError inside the row Builder (e.g. a builder invariant broken by corrupt bytes). The code wraps it with 'Error building row with data deserialized from %s' to preserve the corruption context rather than failing with a bare assertion.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java:651 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Run nodetool scrub on the table to discard corrupted rows","Repair the node so missing/corrupt data is re-streamed from healthy replicas"],"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"}