risingwavelabs/risingwave · error

trigger_manual_compaction report not accepted. task_id

Error message

trigger_manual_compaction report not accepted. task_id {}

What it means

The compactor did report back for the manual compaction task, but the report was not accepted (report_result.reported == false), meaning the manager rejected the result — typically because the task is no longer tracked (e.g. cancelled, already handled after failover, or the waiter was removed).

Solutions

  1. Retry the manual compaction to get a fresh task and report cycle.
  2. Check meta logs for why the task's report was rejected (unknown task id / cancelled).
  3. After meta failover, wait for the compactor to re-register and purge in-flight tasks before triggering manual compaction.

Example fix

// before
if !report_result.reported {
    return Err(anyhow!("trigger_manual_compaction report not accepted. task_id {}", report_result.task_id));
}
// after
if !report_result.reported {
    warn!(task_id = %report_result.task_id, "manual compaction report rejected; retrying trigger");
    return self.trigger_manual_compaction(manual_compaction_option).await; // bounded retries
}
Defensive patterns

Strategy: retry

Validate before calling

// verify the manager still tracks manual compaction tasks (no recent failover) before triggering
if meta_recently_failed_over() { wait_until_stable(); }

Try / catch

match trigger_manual_compaction(opt).await {
    Err(e) if e.to_string().contains("report not accepted") => {
        // task was rejected (failover/cancel); re-trigger with a fresh task id
        retry_with_backoff();
    },
    other => other?,
}

Prevention

When it happens

Trigger: Calling trigger_manual_compaction where the compactor's report_compact_task RPC returns reported=false: task id unknown to the manager after meta failover, the task was cancelled, or a duplicate/stale report from a previous attempt.

Common situations: Meta node restart/failover while the compactor was still working; manual compaction cancelled by another call; compactor retrying an old task after reconnecting; split-brain between an old compactor and a new meta leader.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


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

Appendix: source

Thrown at src/meta/src/hummock/manager/compaction/mod.rs:1166

            })
        {
            self.remove_compaction_task_report_waiter(task_id);
            return Err(err.into());
        }

        let report_result = match report_rx.await {
            Ok(result) => result,
            Err(_) => {
                self.remove_compaction_task_report_waiter(task_id);
                return Err(anyhow::anyhow!(
                    "trigger_manual_compaction wait report failed. compaction_group {}",
                    compaction_group
                )
                .into());
            }
        };
        if !report_result.reported {
            return Err(anyhow::anyhow!(
                "trigger_manual_compaction report not accepted. task_id {}",
                report_result.task_id
            )
            .into());
        }

        if report_result.task_status == TaskStatus::NoAvailCpuResourceCanceled
            || report_result.task_status == TaskStatus::NoAvailMemoryResourceCanceled
        {
            return Ok(ManualCompactionTriggerResult::Retry);
        }

        tracing::info!(
            ?report_result,
            duration = ?start_time.elapsed(),
            "Completed manual compaction task."
        );

View on GitHub (pinned to 6469eb736d)