risingwavelabs/risingwave · error · HummockError

CompactionExecutor error: {0}

Error message

CompactionExecutor error: {0}

What it means

A generic wrapper for failures inside the Hummock compaction executor — the component that merges SSTs, runs GC, and executes compaction/backup plans. Any error surfaced by the compaction task machinery (task panic-like conditions, plan execution failures, or explicit cancellations such as the string "Plan cancelled", matched in `src/storage/src/hummock/compactor/mod.rs:1621`) is stringified here via `HummockError::compaction_executor(error)` in src/storage/src/hummock/error.rs:157.

Source

Thrown at src/storage/src/hummock/error.rs:65

    #[error("Wait epoch error: {0}")]
    WaitEpoch(String),
    #[error("Next epoch error: {0}")]
    NextEpoch(String),
    #[error("Change log retention miss: table {table_id}, epoch {epoch}")]
    ChangeLogRetentionMiss { table_id: TableId, epoch: u64 },
    #[error("Time-travel version expired: table {table_id}, epoch {epoch}")]
    TimeTravelVersionExpired { table_id: TableId, epoch: u64 },
    #[error(
        "Committed epoch mismatch: table {table_id}, committed_epoch {committed_epoch}, read_epoch {read_epoch}"
    )]
    CommittedEpochMismatch {
        table_id: TableId,
        committed_epoch: u64,
        read_epoch: u64,
    },
    #[error("Barrier read is unavailable for now. Likely the cluster is recovering")]
    ReadCurrentEpoch,
    #[error("CompactionExecutor error: {0}")]
    CompactionExecutor(String),
    #[error("FileCache error: {0}")]
    FileCache(String),
    #[error("SstObjectIdTracker error: {0}")]
    SstObjectIdTrackerError(String),
    #[error("CompactionGroup error: {0}")]
    CompactionGroupError(String),
    #[error("SstableUpload error: {0}")]
    SstableUploadError(String),
    #[error("Read backup error: {0}")]
    ReadBackupError(String),
    #[error("Foyer error: {0}")]
    FoyerError(#[from] foyer::Error),
    #[error("Other error: {0}")]
    Other(String),
}

impl HummockError {

View on GitHub (pinned to 6469eb736d)

Solutions

  1. If the message is "Plan cancelled", treat it as a benign cancellation — the compaction plan was superseded or the compactor is stopping; no action needed.
  2. Inspect the wrapped message and compactor logs for the underlying cause (object-store errors, task panics) and fix that root cause.
  3. If compaction repeatedly fails, check object storage connectivity/credentials and compactor memory settings.
  4. If needed, re-trigger compaction for the affected compaction group after the compactor is healthy.

Example fix

// before: cancelling is surfaced as a real failure
if err.inner() == &HummockError::compaction_executor("Plan cancelled") { return Err(err); }
// after: ignore cancellation, propagate the rest
fn is_cancelled_iceberg_compaction_error(err: &HummockError) -> bool {
    matches!(err.inner(), HummockErrorInner::CompactionExecutor(message) if message == "Plan cancelled")
}
Defensive patterns

Strategy: try-catch

Type guard

fn is_plan_cancelled(err: &HummockError) -> bool {
    matches!(err.inner(), HummockErrorInner::CompactionExecutor(m) if m == "Plan cancelled")
}

Try / catch

match err.inner() {
    HummockErrorInner::CompactionExecutor(msg) if msg == "Plan cancelled" => {
        // benign: plan was superseded or compactor is stopping; ignore or log at info
    }
    HummockErrorInner::CompactionExecutor(msg) => {
        // inspect underlying compaction failure and surface it
    }
    _ => return Err(err),
}

Prevention

When it happens

Trigger: Compaction/backup/iceberg-compaction task execution fails or is cancelled; `HummockError::compaction_executor(err.to_string())` is called from compactor task code, including `"Plan cancelled"` messages when a compaction plan is aborted (e.g. during shutdown or plan replacement).

Common situations: Compactor shutdown or barrier-driven plan cancellation (benign "Plan cancelled"); S3/object-store I/O failures during compaction write/upload; compaction task crash or panic under memory pressure; an incompatible or corrupted SST input in a merge.

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/e87066c03b43d165. Report an issue: GitHub.