risingwavelabs/risingwave · error · SinkError::Mongodb
bulk write write errors
Error message
bulk write write errors
What it means
After running the bulk write command, the response document's 'ok' field was present but not equal to 1, meaning MongoDB reports the command itself did not succeed. The sink returns a generic 'bulk write write errors' Mongodb error.
Source
Thrown at src/connector/src/sink/mongodb.rs:89
if let Some(delete) = delete {
send_bulk_write_command(db, delete).await?;
}
Ok(())
}
}
async fn send_bulk_write_command(db: Database, command: Document) -> Result<()> {
let result = db.run_command(command).await.map_err(|err| {
SinkError::Mongodb(anyhow!(err).context(format!(
"sending bulk write command failed, database: {}",
db.name()
)))
})?;
if let Ok(ok) = result.get_i32("ok")
&& ok != 1
{
return Err(SinkError::Mongodb(anyhow!("bulk write write errors")));
}
if let Ok(write_errors) = result.get_array("writeErrors") {
return Err(SinkError::Mongodb(anyhow!(
"bulk write respond with write errors: {:?}",
write_errors,
)));
}
if let Ok(write_concern_error) = result.get_array("writeConcernError") {
return Err(SinkError::Mongodb(anyhow!(
"bulk write respond with write errors: {:?}",
write_concern_error,
)));
}
Ok(())
}View on GitHub (pinned to 6469eb736d)
Solutions
- Grant the sink user write privileges (dbAdmin/write role) on the target database.
- Check the server's full response by enabling driver command logging to see the actual errmsg.
- Verify the MongoDB deployment supports the bulk write command (version/compatibility).
- Retry if the server reported a transient internal error.
Example fix
// before: generic error loses the server message
return Err(SinkError::Mongodb(anyhow!("bulk write write errors")));
// after: include server errmsg for diagnosability
let msg = result.get_str("errmsg").unwrap_or("unknown");
return Err(SinkError::Mongodb(anyhow!("bulk write failed: ok != 1 ({msg})"))); Defensive patterns
Strategy: validation
Validate before calling
// verify sink user permissions before writing
mongosh "$MONGO_URI" --eval "db.runCommand({connectionStatus: 1, showPrivileges: true})"
Try / catch
// surface errmsg from the response instead of failing blind
if ok != 1 {
let msg = result.get_str("errmsg").unwrap_or("unknown");
return Err(SinkError::Mongodb(anyhow!("bulk write failed: {msg}")));
} Prevention
- Grant the sink user write roles on the target database.
- Confirm the deployment supports the bulkWrite command (server version check).
- Test the same command via mongosh as the sink user.
- Review sharded-cluster/Atlas tier restrictions on write commands.
When it happens
Trigger: result.get_i32("ok") yields ok != 1: the server rejected the bulk write command, e.g. unauthorized, command not supported, or an internal server error returned without a detailed writeErrors array.
Common situations: Sink user lacking write role on the target database, mongos/sharded cluster rejecting the command, or server-side errors like command-not-allowed on restricted deployments (e.g. Atlas free tier limits).
Related errors
- bulk write respond with write errors: {:?}
- sending bulk write command failed, database: {}
- end of stream
- should have meta client
- should get metadata on checkpoint barrier
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/023ddce87fd9bf50.
Report an issue: GitHub.