{"record":{"id":"2abe7944f1bf3a02","repo":"risingwavelabs/risingwave","slug":"should-not-get-empty-row-when-decoding-stream-chun","errorCode":null,"errorMessage":"should not get empty row when decoding stream chunk. start seq id: {}, end seq id {}","messagePattern":"should not get empty row when decoding stream chunk\\. start seq id: (.+?), end seq id (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/stream/src/common/log_store_impl/kv_log_store/serde.rs","lineNumber":514,"sourceCode":"                    ops.push(Op::UpdateDelete);\n                    ops.push(Op::UpdateInsert);\n                    if ops.len() > size_bound {\n                        return Err(anyhow!(\n                            \"row count {} exceed size bound {}\",\n                            ops.len(),\n                            size_bound\n                        ));\n                    }\n                    assert!(data_chunk_builder.append_one_row(old_value).is_none());\n                    assert!(data_chunk_builder.append_one_row(new_value).is_none());\n                }\n                (_, LogStoreOp::Barrier { .. }) => {\n                    return Err(anyhow!(\"should not get barrier when decoding stream chunk\"));\n                }\n            }\n        }\n        if ops.is_empty() {\n            return Err(anyhow!(\n                \"should not get empty row when decoding stream chunk. start seq id: {}, end seq id {}\",\n                start_seq_id,\n                end_seq_id\n            ));\n        }\n        read_info.report(metrics);\n        Ok(StreamChunk::from_parts(\n            ops,\n            data_chunk_builder\n                .consume_all()\n                .expect(\"should not be empty\"),\n        ))\n    }\n}\n\n#[derive(Debug)]\nenum StreamState {\n    /// The stream has not emitted any row op yet.","sourceCodeStart":496,"sourceCodeEnd":532,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/common/log_store_impl/kv_log_store/serde.rs#L496-L532","documentation":"Guard in deserialize_stream_chunk: an empty row was decoded where a real row (old/new value of an update) was required. The start/end seq id range and the decoded content are inconsistent; decoding aborts with this error naming the seq id range.","triggerScenarios":"Thrown at src/stream/src/common/log_store_impl/kv_log_store/serde.rs:514 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["The decoder received an empty row within the requested seq-id range, indicating a hole or corruption in the KV log store between the start and end seq ids shown in the message.","Rebuild the affected range from a snapshot or re-execute the log store reads; report if reproducible."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}