risingwavelabs/risingwave · error · Error
invalid manual compaction option: {0}
Error message
invalid manual compaction option: {0} What it means
HummockMetaError::InvalidManualCompactionOption wraps validation failures of the options supplied to a manual compaction request. The meta service rejects the request because the provided parameters (e.g. group id, SST id list, epoch range, levels) are empty or logically inconsistent.
Source
Thrown at src/meta/src/hummock/error.rs:48
#[error("failed to access meta store")]
MetaStore(
#[source]
#[backtrace]
anyhow::Error,
),
#[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,
),
}View on GitHub (pinned to 6469eb736d)
Solutions
- Check the manual compaction options: confirm the compaction group id exists (SELECT from hummock compaction groups / risectl list)
- Re-run with valid table ids/SST ids that belong to the target group
- Use risectl to list current compaction groups and levels before issuing the request
- If using scripts, fetch group ids dynamically instead of hardcoding
Example fix
// before risectl hummock manual-compaction --group 99 // after (list valid groups first, then use an existing id) risectl hummock list-compaction-group risectl hummock manual-compaction --group 1
Defensive patterns
Strategy: validation
Validate before calling
let groups = risectl::list_compaction_groups()?;
assert!(groups.contains(&opts.compaction_group_id), "unknown compaction group {}", opts.compaction_group_id);
Type guard
fn validate_manual_compaction_opts(opts: &ManualCompactionOption) -> Result<(), String> {
if opts.compaction_group_id == 0 { Err("compaction_group_id must be set".into()) } else { Ok(()) }
}
Try / catch
match trigger_manual_compaction(opts).await {
Err(e @ HummockMetaError::InvalidManualCompactionOption(_)) => eprintln!("bad options: {e}"),
other => other?,
}
Prevention
- List compaction groups before targeting one
- Fetch group ids dynamically, never hardcode
- Validate options client-side before sending
- Re-check group ids after config/migration changes
When it happens
Trigger: Calling trigger_manual_compaction (via RPC or risectl) with options that fail validation, such as an invalid compaction group id or invalid table/SST selection.
Common situations: Operator typo in risectl hummock manual-compaction arguments; targeting a compaction group that was renamed/removed; scripting compaction with stale group ids after config changes.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- invalid epoch range: {start_epoch}..={end_epoch}
- trigger_manual_compaction No compactor is available. compact
- Unsupported task type for copy-on-write iceberg compaction:
- Invalid value `{value}` for `{entry}`
- 'copy-on-write' mode is not supported for append-only iceber
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/43859d6d65e79c2d.
Report an issue: GitHub.