{"record":{"id":"ae25a2044bf85680","repo":"risingwavelabs/risingwave","slug":"insert-error-error-url","errorCode":null,"errorMessage":"Insert error: {:?}, error url: {:?}","messagePattern":"Insert error: (.+?), error url: (.+?)","errorType":"exception","errorClass":"SinkError","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/doris.rs","lineNumber":665,"sourceCode":"    pub async fn write(&mut self, data: Bytes) -> Result<()> {\n        let mut data_build = BytesMut::new();\n        if self.is_first_record {\n            self.is_first_record = false;\n        } else {\n            data_build.put_slice(\"\\n\".as_bytes());\n        }\n        data_build.put_slice(&data);\n        self.insert.write(data_build.into()).await?;\n        Ok(())\n    }\n\n    pub async fn finish(self) -> Result<DorisInsertResultResponse> {\n        let raw = self.insert.finish().await?;\n        let res: DorisInsertResultResponse = serde_json::from_slice(&raw)\n            .map_err(|err| SinkError::DorisStarrocksConnect(err.into()))?;\n\n        if !DORIS_SUCCESS_STATUS.contains(&res.status.as_str()) {\n            return Err(SinkError::DorisStarrocksConnect(anyhow::anyhow!(\n                \"Insert error: {:?}, error url: {:?}\",\n                res.message,\n                res.err_url\n            )));\n        };\n        Ok(res)\n    }\n}\n","sourceCodeStart":647,"sourceCodeEnd":674,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/doris.rs#L647-L674","documentation":"After a Doris stream-load insert finishes, the response JSON is parsed into DorisInsertResultResponse and its `status` field is checked against DORIS_SUCCESS_STATUS. A non-success status raises this error with the failure message and the error URL where Doris stores detailed logs.","triggerScenarios":"A stream-load batch insert whose result status is not in DORIS_SUCCESS_STATUS (e.g. 'Fail'), typically due to schema mismatch, bad data format, or load limit violations.","commonSituations":"Column count/type mismatch between RisingWave and the Doris table; malformed rows failing parsing; exceeding max_filter_ratio with too many error rows; Doris tablet/BE issues.","solutions":["Open the error URL printed in the message to inspect per-row failure reasons from Doris.","Align the RisingWave sink schema with the Doris table (names, order, types).","Increase `max_filter_ratio` only if tolerable, or clean the offending data.","Retry the sink after fixing; transient BE issues may also cause Fail status."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// precheck schema alignment\n// ensure RisingWave sink columns match Doris table columns in name, order, and type","typeGuard":null,"tryCatchPattern":"match inserter.finish().await {\n    Err(SinkError::DorisStarrocksConnect(e)) if e.to_string().contains(\"Insert error\") => {\n        if let Some(url) = extract_err_url(&e.to_string()) {\n            eprintln!(\"doris load failed, details at: {url}\");\n        }\n    }\n    other => other?,\n}","preventionTips":["Keep RisingWave and Doris schemas in sync (names, types, order).","Read the error URL from the message for per-row failure details.","Set a sane max_filter_ratio and monitor rejected-row counts.","Retest with a small batch before reopening full traffic."],"tags":["rust","sink","doris","http","insert"],"backgroundTag":"api-error-response","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}