risingwavelabs/risingwave · error · Error
Other error
Error message
Other error: {0} What it means
The in-memory object store returns Error::Other for any failure that is not a missing key — e.g. I/O errors surfaced while operating on the memory store. It is a generic fallback variant converted into ObjectError for callers.
Solutions
- Inspect the embedded message for the underlying cause
- If running under madsim, check simulated failure injection settings
- Re-run the test or workload — transient simulated faults may not recur
- Report a bug if the mem store (which should not fail) returns Other in normal use
Example fix
// before: ignoring the distinction between variants
Err(e) => return Err(e.into()),
// after: branch on the known variants
Err(e @ crate::object::mem::Error::NotFound(_)) => { /* handle absence */ }
Err(e) => return Err(ObjectError::internal(e.to_string())), Defensive patterns
Strategy: try-catch
Validate before calling
null
Type guard
fn is_other_mem_error(e: &crate::object::mem::Error) -> bool {
matches!(e, crate::object::mem::Error::Other(_))
} Try / catch
match mem_store.read(key, None).await {
Ok(d) => d,
Err(e @ crate::object::mem::Error::NotFound(_)) => { /* absence path */ }
Err(e) => return Err(ObjectError::internal(format!("mem store: {}", e))),
} Prevention
- Match explicitly on the mem::Error enum rather than string matching
- Log the embedded message — it carries the underlying cause
- Report upstream if the pure in-memory store returns Other in normal operation
When it happens
Trigger: Any mem-store operation failing for reasons other than absence of the key, such as wrapped IO errors or unexpected state in test/madsim environments.
Common situations: Test harness bugs, simulated IO failures in madsim, or misuse of the mem store API outside its supported behavior.
Related errors
- NotFound error
- (dataset guard acquisition error)
- Internal error
- Passing s3-compatible is not supported, please modify the…
- remote object store only supports s3, minio, gcs, oss, cos…
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/82a1b7b515dfb44a.
Report an issue: GitHub.
Appendix: source
Thrown at src/object_store/src/object/mem.rs:38
use bytes::{BufMut, Bytes, BytesMut};
use fail::fail_point;
use futures::Stream;
use itertools::Itertools;
use risingwave_common::range::RangeBoundsExt;
use thiserror::Error;
use tokio::sync::Mutex;
use super::{
ObjectError, ObjectMetadata, ObjectRangeBounds, ObjectResult, ObjectStore, StreamingUploader,
};
use crate::object::{ObjectDataStream, ObjectMetadataIter};
#[derive(Error, Debug)]
pub enum Error {
#[error("NotFound error: {0}")]
NotFound(String),
#[error("Other error: {0}")]
Other(String),
}
impl Error {
pub fn is_object_not_found_error(&self) -> bool {
matches!(self, Error::NotFound(_))
}
}
impl Error {
fn not_found(msg: impl ToString) -> Self {
Error::NotFound(msg.to_string())
}
fn other(msg: impl ToString) -> Self {
Error::Other(msg.to_string())
}
}View on GitHub (pinned to 6469eb736d)