risingwavelabs/risingwave · error
should not get barrier when decoding stream chunk
Error message
should not get barrier when decoding stream chunk
What it means
Guard in deserialize_stream_chunk: a barrier item was encountered while decoding a stream chunk. Barriers belong to a separate decoding path; seeing one in the row-stream means the read range mixed barrier and row entries, which is invalid, so decoding aborts.
Solutions
- A barrier row was encountered while decoding a data stream chunk, meaning the reader mixed barrier and row streams. Check the stream selection/keying of the KV log store reader.
- Ensure barriers are read through the barrier stream path, not the chunk decoder.
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at src/stream/src/common/log_store_impl/kv_log_store/serde.rs:509 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/a7d9e05b81c3f0e1.
Report an issue: GitHub.
Appendix: source
Thrown at src/stream/src/common/log_store_impl/kv_log_store/serde.rs:509
epoch,
expected_epoch
));
}
read_info.read_update(row_size);
ops.push(Op::UpdateDelete);
ops.push(Op::UpdateInsert);
if ops.len() > size_bound {
return Err(anyhow!(
"row count {} exceed size bound {}",
ops.len(),
size_bound
));
}
assert!(data_chunk_builder.append_one_row(old_value).is_none());
assert!(data_chunk_builder.append_one_row(new_value).is_none());
}
(_, LogStoreOp::Barrier { .. }) => {
return Err(anyhow!("should not get barrier when decoding stream chunk"));
}
}
}
if ops.is_empty() {
return Err(anyhow!(
"should not get empty row when decoding stream chunk. start seq id: {}, end seq id {}",
start_seq_id,
end_seq_id
));
}
read_info.report(metrics);
Ok(StreamChunk::from_parts(
ops,
data_chunk_builder
.consume_all()
.expect("should not be empty"),
))
}View on GitHub (pinned to 6469eb736d)