{"record":{"id":"a9a4a5f1ac5ba9af","repo":"risingwavelabs/risingwave","slug":"wait-epoch-error-0","errorCode":null,"errorMessage":"Wait epoch error: {0}","messagePattern":"Wait epoch error: (.+?)","errorType":"exception","errorClass":"HummockError","httpStatus":null,"severity":"warning","filePath":"src/storage/src/hummock/error.rs","lineNumber":47,"sourceCode":"    #[error(\"Checksum mismatch: expected {expected}, found: {found}\")]\n    ChecksumMismatch { expected: u64, found: u64 },\n    #[error(\"Invalid block\")]\n    InvalidBlock,\n    #[error(\"Encode error: {0}\")]\n    EncodeError(String),\n    #[error(\"Decode error: {0}\")]\n    DecodeError(String),\n    #[error(\"ObjectStore failed with IO error: {0}\")]\n    ObjectIoError(\n        #[from]\n        #[backtrace]\n        ObjectError,\n    ),\n    #[error(\"Meta error: {0}\")]\n    MetaError(String),\n    #[error(\"SharedBuffer error: {0}\")]\n    SharedBufferError(String),\n    #[error(\"Wait epoch error: {0}\")]\n    WaitEpoch(String),\n    #[error(\"Next epoch error: {0}\")]\n    NextEpoch(String),\n    #[error(\"Change log retention miss: table {table_id}, epoch {epoch}\")]\n    ChangeLogRetentionMiss { table_id: TableId, epoch: u64 },\n    #[error(\"Time-travel version expired: table {table_id}, epoch {epoch}\")]\n    TimeTravelVersionExpired { table_id: TableId, epoch: u64 },\n    #[error(\n        \"Committed epoch mismatch: table {table_id}, committed_epoch {committed_epoch}, read_epoch {read_epoch}\"\n    )]\n    CommittedEpochMismatch {\n        table_id: TableId,\n        committed_epoch: u64,\n        read_epoch: u64,\n    },\n    #[error(\"Barrier read is unavailable for now. Likely the cluster is recovering\")]\n    ReadCurrentEpoch,\n    #[error(\"CompactionExecutor error: {0}\")]","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/storage/src/hummock/error.rs#L29-L65","documentation":"A reader waited for Hummock's watermark/epoch to advance past a required epoch and the wait failed, with the reason in the String payload. This occurs in the epoch-based visibility machinery when a client waits for a safe read epoch. It signals the wait for the requested epoch could not complete.","triggerScenarios":"Calling Hummock read APIs that wait until a given epoch is available (watermark wait path) and the wait returns an error.","commonSituations":"Epoch/heartbeat timeout because the meta node or compute node was stalled; network partition between nodes; shutdown racing with a read that is waiting for the next epoch.","solutions":["Retry the read; transient epoch wait failures resolve once watermarks advance.","Check meta node and compactor health/logs for stalled heartbeat or epoch advancement.","Verify network connectivity between compute, meta, and storage nodes.","If it persists after restart, inspect watermark advancement for a stuck barrier and report to maintainers."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Rust\nmatch hummock_read_with_wait(...) {\n    Err(e) if e.to_string().starts_with(\"Wait epoch error\") => {\n        // retry with backoff; alert if watermark does not advance\n    }\n    r => r?,\n}","preventionTips":["Monitor meta node heartbeat/watermark advancement.","Keep network between compute/meta/storage nodes reliable.","Avoid issuing reads during cluster shutdown windows."],"tags":["storage","hummock","epoch","concurrency"],"backgroundTag":"request-timeout","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"}