risingwavelabs/risingwave · error
row count exceed size bound
Error message
row count {} exceed size bound {} What it means
Guard in deserialize_stream_chunk: the number of decoded ops exceeded the size bound computed from start/end seq ids. More rows were decoded than the sequence-id range can contain, meaning the stored range is inconsistent; decoding fails with this error.
Solutions
- The decoded stream chunk produced more ops than the allocated size bound, indicating log store read-window misalignment or corruption.
- Re-read with a corrected seq-id range or rebuild from snapshot; verify start/end seq id bookkeeping.
- If reproducible, report with the counts from the message.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at src/stream/src/common/log_store_impl/kv_log_store/serde.rs:472 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/283c9119e4c663de.
Report an issue: GitHub.
Appendix: source
Thrown at src/stream/src/common/log_store_impl/kv_log_store/serde.rs:472
);
pin_mut!(stream);
while let Some(row) = stream.try_next().await? {
let epoch = row.row_meta.epoch;
let op = row.op;
let row_size = row.row_meta.size;
match (epoch, op) {
(epoch, LogStoreOp::Row { op, row, .. }) => {
if epoch != expected_epoch {
return Err(anyhow!(
"decoded epoch {} not match expected epoch {}",
epoch,
expected_epoch
));
}
read_info.read_one_row(row_size);
ops.push(op);
if ops.len() > size_bound {
return Err(anyhow!(
"row count {} exceed size bound {}",
ops.len(),
size_bound
));
}
assert!(data_chunk_builder.append_one_row(row).is_none());
}
(
epoch,
LogStoreOp::Update {
new_value,
old_value,
..
},
) => {
if epoch != expected_epoch {
return Err(anyhow!(
"decoded epoch {} not match expected epoch {}",View on GitHub (pinned to 6469eb736d)