From 1ebb612138a377c26345b6d0ab2c691c36187265 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Wed, 7 Jan 2026 12:55:27 +0100 Subject: [PATCH 1/3] fix/webhook): Don't crash on dropped initial_reconcile_tx channel --- .../src/webhooks/conversion_webhook.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/crates/stackable-webhook/src/webhooks/conversion_webhook.rs b/crates/stackable-webhook/src/webhooks/conversion_webhook.rs index 31f099e5f..fdb75f63e 100644 --- a/crates/stackable-webhook/src/webhooks/conversion_webhook.rs +++ b/crates/stackable-webhook/src/webhooks/conversion_webhook.rs @@ -18,7 +18,7 @@ use kube::{ Api, Client, ResourceExt, api::{Patch, PatchParams}, }; -use snafu::{ResultExt, Snafu, ensure}; +use snafu::{ResultExt, Snafu}; use tokio::sync::oneshot; use tracing::instrument; @@ -27,9 +27,6 @@ use crate::WebhookServerOptions; #[derive(Debug, Snafu)] pub enum ConversionWebhookError { - #[snafu(display("failed to send initial CRD reconcile heartbeat"))] - SendInitialReconcileHeartbeat, - #[snafu(display("failed to patch CRD {crd_name:?}"))] PatchCrd { source: kube::Error, @@ -262,10 +259,8 @@ where // After the reconciliation of the CRDs, the initial reconcile heartbeat is sent out // via the oneshot channel. if let Some(initial_reconcile_tx) = self.initial_reconcile_tx.take() { - ensure!( - initial_reconcile_tx.send(()).is_ok(), - SendInitialReconcileHeartbeatSnafu - ); + // TODO Some docs why we ignore errors + let _ = initial_reconcile_tx.send(()); } Ok(()) From ff80cd50b00d22f4416cc831cbc80c71137ba2fc Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Wed, 7 Jan 2026 13:09:38 +0100 Subject: [PATCH 2/3] changelog --- crates/stackable-webhook/CHANGELOG.md | 4 ++++ crates/stackable-webhook/src/webhooks/conversion_webhook.rs | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/stackable-webhook/CHANGELOG.md b/crates/stackable-webhook/CHANGELOG.md index dc659f8aa..0cec81be9 100644 --- a/crates/stackable-webhook/CHANGELOG.md +++ b/crates/stackable-webhook/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Fixed + +- Don't error in case the `initial_reconcile` Receiver is dropped ([#XXXX]). + ## [0.8.0] - 2025-12-32 ### Added diff --git a/crates/stackable-webhook/src/webhooks/conversion_webhook.rs b/crates/stackable-webhook/src/webhooks/conversion_webhook.rs index fdb75f63e..0e779ee4e 100644 --- a/crates/stackable-webhook/src/webhooks/conversion_webhook.rs +++ b/crates/stackable-webhook/src/webhooks/conversion_webhook.rs @@ -259,7 +259,8 @@ where // After the reconciliation of the CRDs, the initial reconcile heartbeat is sent out // via the oneshot channel. if let Some(initial_reconcile_tx) = self.initial_reconcile_tx.take() { - // TODO Some docs why we ignore errors + // This call will (only) error in case the receiver is dropped, so we need to ignore + // failures. let _ = initial_reconcile_tx.send(()); } From bfdffa88381c572fff9d75fdc045680fa3eaaf80 Mon Sep 17 00:00:00 2001 From: Sebastian Bernauer Date: Wed, 7 Jan 2026 13:13:15 +0100 Subject: [PATCH 3/3] changelog --- crates/stackable-webhook/CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/stackable-webhook/CHANGELOG.md b/crates/stackable-webhook/CHANGELOG.md index 0cec81be9..2a5c3cda5 100644 --- a/crates/stackable-webhook/CHANGELOG.md +++ b/crates/stackable-webhook/CHANGELOG.md @@ -6,7 +6,9 @@ All notable changes to this project will be documented in this file. ### Fixed -- Don't error in case the `initial_reconcile` Receiver is dropped ([#XXXX]). +- Don't error in case the `initial_reconcile` Receiver is dropped ([#1133]). + +[#1133]: https://github.com/stackabletech/operator-rs/pull/1133 ## [0.8.0] - 2025-12-32