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

  1. 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.
  2. 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)