{"record":{"id":"a8b5113d1627b87f","repo":"risingwavelabs/risingwave","slug":"iceberg-compaction-send-task-fail","errorCode":null,"errorMessage":"iceberg_compaction_send_task_fail","messagePattern":"iceberg_compaction_send_task_fail","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/meta/src/hummock/compactor_manager.rs","lineNumber":504,"sourceCode":"        self.inner.read().get_progress()\n    }\n}\n\nimpl IcebergCompactor {\n    pub fn new(\n        context_id: HummockContextId,\n        sender: IcebergCompactorSubscribeStreamSender,\n    ) -> Self {\n        Self { context_id, sender }\n    }\n\n    pub fn context_id(&self) -> HummockContextId {\n        self.context_id\n    }\n\n    pub fn send_event(&self, event: IcebergCompactorSubscribeResponseEvent) -> MetaResult<()> {\n        fail_point!(\"iceberg_compaction_send_task_fail\", |_| Err(\n            anyhow::anyhow!(\"iceberg_compaction_send_task_fail\").into()\n        ));\n\n        self.sender\n            .send(Ok(SubscribeIcebergCompactionEventResponse {\n                create_at: SystemTime::now()\n                    .duration_since(SystemTime::UNIX_EPOCH)\n                    .expect(\"Clock may have gone backwards\")\n                    .as_millis() as u64,\n                event: Some(event),\n            }))\n            .map_err(|e| anyhow::anyhow!(e))?;\n\n        Ok(())\n    }\n\n    pub fn cancel_task(&self, task_id: IcebergCompactionTaskId) -> MetaResult<()> {\n        self.send_event(IcebergResponseEvent::CancelCompactTask(\n            IcebergCancelCompactTask { task_id },","sourceCodeStart":486,"sourceCodeEnd":522,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/hummock/compactor_manager.rs#L486-L522","documentation":"This is a fail-point (fault-injection) error inside `IcebergCompactorManager::send_event` (src/meta/src/hummock/compactor_manager.rs:504). `fail_point!(\"iceberg_compaction_send_task_fail\")` makes the meta node return an artificial error whenever the fail point is activated, simulating a failure to send a subscribe-response event to the iceberg compaction task. It is a testing hook: in production, send_event normally just pushes the event into a channel and cannot fail with this message.","triggerScenarios":"The fail point is enabled (via the FAIL_POINTS env/config mechanism, e.g. in tests or `risedev` fault-injection runs) while an iceberg compactor reports an event through `send_event`, called e.g. from `cancel_task` or the compactor subscribe-response handler.","commonSituations":"Only occurs during chaos/fault-injection testing or when a developer has explicitly armed this fail point; seeing it in a normal deployment means a test configuration leaked into production.","solutions":["Disable the `iceberg_compaction_send_task_fail` fail point in the runtime configuration/environment","If it appears unintentionally, check FAIL_POINTS / fail-point configuration inherited from test runs","Retry the iceberg compaction task; the error is synthetic, not a real channel failure","If testing, use the fail point's configured closure behavior to control recovery"],"exampleFix":"// before (env with fail point armed)\nFAIL_POINTS=iceberg_compaction_send_task_fail ./risedev d\n// after\nunset FAIL_POINTS  # or remove the fail point entry before running","handlingStrategy":"fallback","validationCode":"// Only run with fail points armed in test environments\nassert!(cfg!(debug_assertions) || env::var(\"FAIL_POINTS\").is_err(),\n    \"fail points must not be armed in production\");","typeGuard":"fn is_fail_point_error(e: &MetaError) -> bool {\n    e.to_string().contains(\"iceberg_compaction_send_task_fail\")\n}","tryCatchPattern":"match send_event_result {\n    Err(e) if e.to_string().contains(\"fail\") => {\n        tracing::warn!(\"fail-point triggered send_event error; retrying\");\n        retry(send_event)\n    }\n    other => other,\n}","preventionTips":["Never ship FAIL_POINTS/fault-injection env config to production","Scope fail points to test profiles only (risedev test profiles)","Treat this error as synthetic: retry rather than escalate"],"tags":["fail-point","fault-injection","iceberg","compaction","testing"],"backgroundTag":"feature-not-enabled","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}