{"record":{"id":"250de6e1dba74f41","repo":"risingwavelabs/risingwave","slug":"trigger-manual-compaction-no-compactor-is-availabl","errorCode":null,"errorMessage":"trigger_manual_compaction No compactor is available. compaction_group {}","messagePattern":"trigger_manual_compaction No compactor is available\\. compaction_group (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/meta/src/hummock/manager/compaction/mod.rs","lineNumber":1088,"sourceCode":"            self.try_send_compaction_request(compaction_group, compact_task::TaskType::Dynamic);\n        }\n        Ok(())\n    }\n\n    pub async fn trigger_manual_compaction(\n        &self,\n        compaction_group: CompactionGroupId,\n        manual_compaction_option: ManualCompactionOption,\n    ) -> Result<ManualCompactionTriggerResult> {\n        let start_time = Instant::now();\n        let exclusive = manual_compaction_option.exclusive;\n\n        // 1. Get idle compactor.\n        let compactor = match self.compactor_manager.next_compactor() {\n            Some(compactor) => compactor,\n            None => {\n                tracing::warn!(\"trigger_manual_compaction No compactor is available.\");\n                return Err(anyhow::anyhow!(\n                    \"trigger_manual_compaction No compactor is available. compaction_group {}\",\n                    compaction_group\n                )\n                .into());\n            }\n        };\n\n        // 2. Get manual compaction task.\n        let compact_task = self\n            .manual_get_compact_task_with_info(compaction_group, manual_compaction_option)\n            .await;\n        let (compact_task, blocked_by_pending) = match compact_task {\n            Ok((compact_task, blocked_by_pending)) => (compact_task, blocked_by_pending),\n            Err(err) => {\n                tracing::warn!(error = %err.as_report(), \"Failed to get compaction task\");\n                if matches!(err, Error::InvalidManualCompactionOption(_)) {\n                    return Err(err);\n                }","sourceCodeStart":1070,"sourceCodeEnd":1106,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/hummock/manager/compaction/mod.rs#L1070-L1106","documentation":"trigger_manual_compaction requires an idle compactor to run the requested compaction task. When compactor_manager.next_compactor() returns None — no compactor is connected or idle — the request fails with this error naming the compaction group.","triggerScenarios":"Manual compaction issued (risectl/RPC) while no compactor workers are registered with the meta node, or all registered compactors are busy so next_compactor() has none available.","commonSituations":"Compactor deployment missing or crashed in the cluster; compactor unable to register (network/config); all compactors saturated by automatic compaction when a manual one is requested; scaling down compactor replicas to zero.","solutions":["Ensure compactor processes are running and registered (`risectl hummock list-compactor` / check meta logs for compactor registration)","Scale up compactor replicas or wait for running tasks to finish, then retry","Check compactor-to-meta connectivity and advertise address configuration","Retry the manual compaction after confirming an idle compactor is available"],"exampleFix":"// before\nrisectl hummock manual-compaction --group 1   // fails: no compactor\n// after\nrisedev d   # or deploy a compactor so it registers with meta\nrisectl hummock manual-compaction --group 1","handlingStrategy":"retry","validationCode":"// Check compactor availability before issuing manual compaction\nlet compactors = risectl::hummock::list_compactors()?;\nif compactors.is_empty() {\n    return Err(anyhow!(\"no compactor registered; start compactor first\"));\n}\n","typeGuard":"fn compactor_available(cm: &CompactorManager) -> bool { cm.next_compactor().is_some() }\n","tryCatchPattern":"match trigger_manual_compaction(group).await {\n    Err(e) if e.to_string().contains(\"No compactor is available\") => {\n        tracing::warn!(\"no idle compactor; retrying in 10s\");\n        tokio::time::sleep(Duration::from_secs(10));\n        // retry with backoff\n    }\n    other => other?,\n}\n","preventionTips":["Run enough compactor replicas and alert on zero registrations","Check compactor→meta connectivity and advertise addresses","Schedule manual compactions away from heavy automatic compaction windows","Add retry-with-backoff around manual compaction triggers"],"tags":["rust","hummock","compaction","compactor","availability"],"backgroundTag":"resource-not-found","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"}