risingwavelabs/risingwave · error · Error

time travel

Error message

time travel

What it means

HummockMetaError::TimeTravel is a generic wrapper (with #[source]/#[backtrace]) around an anyhow::Error produced by time-travel subsystem operations. It carries the underlying cause (backtrace and source chain) for any failure while reading or resolving time-travel versions that is not covered by a more specific variant.

Source

Thrown at src/meta/src/hummock/error.rs:54

    #[error(transparent)]
    ObjectStore(
        #[from]
        #[backtrace]
        ObjectError,
    ),
    #[error("compactor {0} is disconnected")]
    CompactorUnreachable(HummockContextId),
    #[error("compaction group error: {0}")]
    CompactionGroup(String),
    #[error("SST {0} is invalid")]
    InvalidSst(HummockSstableObjectId),
    #[error("invalid manual compaction option: {0}")]
    InvalidManualCompactionOption(String),
    #[error("invalid epoch range: {start_epoch}..={end_epoch}")]
    InvalidEpochRange { start_epoch: u64, end_epoch: u64 },
    #[error("time-travel version expired: table {table_id}, epoch {epoch}")]
    TimeTravelVersionExpired { table_id: TableId, epoch: u64 },
    #[error("time travel")]
    TimeTravel(
        #[source]
        #[backtrace]
        anyhow::Error,
    ),
    #[error(transparent)]
    Internal(
        #[from]
        #[backtrace]
        anyhow::Error,
    ),
}

impl Error {
    pub fn retryable(&self) -> bool {
        matches!(self, Error::MetaStore(_))
    }
}

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Inspect the wrapped source chain and backtrace to find the root cause
  2. Check object store / meta connectivity and health
  3. Retry the operation if the underlying cause was transient
  4. If persistent, capture logs and the backtrace for a bug report
Defensive patterns

Strategy: try-catch

Type guard

fn is_time_travel_error(err: &HummockMetaError) -> bool {
    matches!(err, HummockMetaError::TimeTravel(_) | HummockMetaError::TimeTravelVersionExpired { .. })
}

Try / catch

match res {
    Err(e @ HummockMetaError::TimeTravel(src)) => {
        tracing::error!("time travel failed: {:#}", src);
        // inspect source chain / backtrace for root cause
    }
    other => other?,
}

Prevention

When it happens

Trigger: Time-travel APIs that return anyhow::Error internally (lookup of historical versions, interacting with version timeline storage) are converted into this variant via #[from]/map_err.

Common situations: Storage backend errors while reading historical version metadata; decode failures of time-travel records; network/object-store issues during a time-travel lookup.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/aeddffe51796f242. Report an issue: GitHub.