apache/cassandra · error
Error building row with data deserialized from
Error message
Error building row with data deserialized from %s
What it means
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.
Solutions
- Run nodetool scrub on the table to discard corrupted rows
- Repair the node so missing/corrupt data is re-streamed from healthy replicas
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java:651 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/6fc441a1851c4ed1.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/db/rows/UnfilteredSerializer.java:651
columns.apply(UnfilteredSerializer::readColumn, helper);
}
catch (WrappedException e)
{
if (e.getCause() instanceof IOException)
throw (IOException) e.getCause();
throw e;
}
return builder.build();
}
catch (RuntimeException | AssertionError e)
{
// Corrupted data could be such that it triggers an assertion in the row Builder, or break one of its assumption.
// Of course, a bug in said builder could also trigger this, but it's impossible a priori to always make the distinction
// between a real bug and data corrupted in just the bad way. Besides, re-throwing as an IOException doesn't hide the
// exception, it just make we catch it properly and mark the sstable as corrupted.
throw new IOException("Error building row with data deserialized from " + in, e);
}
}
private static void readColumn(DeserializationHelper helper, ColumnMetadata column)
{
try
{
if (column.isSimple())
readSimpleColumn(column, helper.in, helper.header, helper, helper.builder, helper.livenessInfo);
else
readComplexColumn(column, helper.in, helper.header, helper, helper.hasComplexDeletion, helper.builder, helper.livenessInfo);
}
catch (IOException e)
{
throw new WrappedException(e);
}
}
View on GitHub (pinned to 88fd0f6a0e)