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

  1. The decoded stream chunk produced more ops than the allocated size bound, indicating log store read-window misalignment or corruption.
  2. Re-read with a corrected seq-id range or rebuild from snapshot; verify start/end seq id bookkeeping.
  3. 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)