From 6a1428453120ec27b9d77baa3da1781006badf5e Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 5 Feb 2026 09:46:50 +0100 Subject: [PATCH 1/4] feat: Add graceful shutdown --- Cargo.lock | 26 +++++------ Cargo.nix | 46 +++++++++---------- Cargo.toml | 2 +- crate-hashes.json | 18 ++++---- rust/operator-binary/src/main.rs | 15 ++++-- .../src/restart_controller/pod.rs | 8 +++- .../src/restart_controller/statefulset.rs | 14 ++++-- 7 files changed, 74 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bfb7c87..90f7922 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1487,9 +1487,9 @@ dependencies = [ [[package]] name = "k8s-openapi" -version = "0.26.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06d9e5e61dd037cdc51da0d7e2b2be10f497478ea7e120d85dad632adb99882b" +checksum = "d13f06d5326a915becaffabdfab75051b8cdc260c2a5c06c0e90226ede89a692" dependencies = [ "base64", "chrono", @@ -1501,7 +1501,7 @@ dependencies = [ [[package]] name = "k8s-version" version = "0.1.3" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "darling 0.23.0", "regex", @@ -2780,7 +2780,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "stackable-certs" version = "0.4.0" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "const-oid", "ecdsa", @@ -2822,8 +2822,8 @@ dependencies = [ [[package]] name = "stackable-operator" -version = "0.101.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +version = "0.105.0" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "chrono", "clap", @@ -2862,7 +2862,7 @@ dependencies = [ [[package]] name = "stackable-operator-derive" version = "0.3.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "darling 0.23.0", "proc-macro2", @@ -2873,7 +2873,7 @@ dependencies = [ [[package]] name = "stackable-shared" version = "0.0.3" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "chrono", "k8s-openapi", @@ -2890,7 +2890,7 @@ dependencies = [ [[package]] name = "stackable-telemetry" version = "0.6.1" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "axum", "clap", @@ -2914,7 +2914,7 @@ dependencies = [ [[package]] name = "stackable-versioned" version = "0.8.3" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "schemars", "serde", @@ -2927,7 +2927,7 @@ dependencies = [ [[package]] name = "stackable-versioned-macros" version = "0.8.3" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "convert_case", "darling 0.23.0", @@ -2943,8 +2943,8 @@ dependencies = [ [[package]] name = "stackable-webhook" -version = "0.8.0" -source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#bac8ff44653d477deda650fbd5f690af042df6c2" +version = "0.9.0" +source = "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa" dependencies = [ "arc-swap", "async-trait", diff --git a/Cargo.nix b/Cargo.nix index 6157d4c..58f5f61 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -4704,10 +4704,10 @@ rec { }; "k8s-openapi" = rec { crateName = "k8s-openapi"; - version = "0.26.1"; + version = "0.26.0"; edition = "2021"; - links = "k8s-openapi-0.26.1"; - sha256 = "0aw8k7djlqxdbpc21qd7ir3rgx0hpsrf5mx03p2wsdyh3pkfbn86"; + links = "k8s-openapi-0.26.0"; + sha256 = "14m6i7g6w8lh1rnc19f2c31cvf2ia2vzmggsmzn5p4ba6bahcgyi"; libName = "k8s_openapi"; authors = [ "Arnav Singh " @@ -4758,8 +4758,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; libName = "k8s_version"; authors = [ @@ -9220,8 +9220,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; libName = "stackable_certs"; authors = [ @@ -9397,13 +9397,13 @@ rec { }; "stackable-operator" = rec { crateName = "stackable-operator"; - version = "0.101.1"; + version = "0.105.0"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; libName = "stackable_operator"; authors = [ @@ -9576,8 +9576,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; procMacro = true; libName = "stackable_operator_derive"; @@ -9611,8 +9611,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; libName = "stackable_shared"; authors = [ @@ -9693,8 +9693,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; libName = "stackable_telemetry"; authors = [ @@ -9803,8 +9803,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; libName = "stackable_versioned"; authors = [ @@ -9847,8 +9847,8 @@ rec { workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; procMacro = true; libName = "stackable_versioned_macros"; @@ -9906,13 +9906,13 @@ rec { }; "stackable-webhook" = rec { crateName = "stackable-webhook"; - version = "0.8.0"; + version = "0.9.0"; edition = "2024"; workspace_member = null; src = pkgs.fetchgit { url = "https://github.com/stackabletech/operator-rs.git"; - rev = "bac8ff44653d477deda650fbd5f690af042df6c2"; - sha256 = "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0"; + rev = "7bfcac5f6515c8b4c8cf8def2edfde5ed8621aaa"; + sha256 = "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd"; }; libName = "stackable_webhook"; authors = [ diff --git a/Cargo.toml b/Cargo.toml index 815e566..2ea237c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" repository = "https://github.com/stackabletech/commons-operator" [workspace.dependencies] -stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.101.1", features = ["telemetry", "webhook"] } +stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.105.0", features = ["telemetry", "webhook"] } anyhow = "1.0" built = { version = "0.8", features = ["chrono", "git2"] } diff --git a/crate-hashes.json b/crate-hashes.json index a5b16c5..f14e4bd 100644 --- a/crate-hashes.json +++ b/crate-hashes.json @@ -4,14 +4,14 @@ "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#kube-derive@2.0.1": "1a7bcl0w1jg71jc4iml0vjp8dpzy71mhxl012grxcy2xp5i6xvgf", "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#kube-runtime@2.0.1": "1a7bcl0w1jg71jc4iml0vjp8dpzy71mhxl012grxcy2xp5i6xvgf", "git+https://github.com/stackabletech/kube-rs?branch=2.0.1-fix-schema-hoisting#kube@2.0.1": "1a7bcl0w1jg71jc4iml0vjp8dpzy71mhxl012grxcy2xp5i6xvgf", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#k8s-version@0.1.3": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#stackable-certs@0.4.0": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#stackable-operator-derive@0.3.1": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#stackable-operator@0.101.1": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#stackable-shared@0.0.3": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#stackable-telemetry@0.6.1": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#stackable-versioned-macros@0.8.3": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#stackable-versioned@0.8.3": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", - "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.101.1#stackable-webhook@0.8.0": "0gz11ifcpa64sqyydyjlzdvsqvj0x8d4wmd1mnrx31hwxzyq2sw0", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#k8s-version@0.1.3": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#stackable-certs@0.4.0": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#stackable-operator-derive@0.3.1": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#stackable-operator@0.105.0": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#stackable-shared@0.0.3": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#stackable-telemetry@0.6.1": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#stackable-versioned-macros@0.8.3": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#stackable-versioned@0.8.3": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", + "git+https://github.com/stackabletech/operator-rs.git?tag=stackable-operator-0.105.0#stackable-webhook@0.9.0": "02z7c2kjhcwg153j74n52wwcr5x0z70hc21hlsrxyclmc8ps1lmd", "git+https://github.com/stackabletech/product-config.git?tag=0.8.0#product-config@0.8.0": "1dz70kapm2wdqcr7ndyjji0lhsl98bsq95gnb2lw487wf6yr7987" } \ No newline at end of file diff --git a/rust/operator-binary/src/main.rs b/rust/operator-binary/src/main.rs index 4e7fa4b..610e833 100644 --- a/rust/operator-binary/src/main.rs +++ b/rust/operator-binary/src/main.rs @@ -16,6 +16,7 @@ use stackable_operator::{ eos::EndOfSupportChecker, shared::yaml::SerializeOptions, telemetry::Tracing, + utils::signal::SignalWatcher, }; use webhook::create_webhook_server; @@ -90,9 +91,13 @@ async fn main() -> anyhow::Result<()> { description = built_info::PKG_DESCRIPTION ); + // Watches for the SIGTERM signal and sends a signal to all receivers, which gracefully + // shuts down all concurrent tasks below (EoS checker, controller). + let sigterm_watcher = SignalWatcher::sigterm()?; + let eos_checker = EndOfSupportChecker::new(built_info::BUILT_TIME_UTC, maintenance.end_of_support)? - .run() + .run(sigterm_watcher.handle()) .map(anyhow::Ok); let client = stackable_operator::client::initialize_operator( @@ -107,10 +112,13 @@ async fn main() -> anyhow::Result<()> { cm_store_tx, secret_store_tx, &watch_namespace, + sigterm_watcher.handle(), ) .map(anyhow::Ok); + let pod_restart_controller = - restart_controller::pod::start(&client, &watch_namespace).map(anyhow::Ok); + restart_controller::pod::start(&client, &watch_namespace, sigterm_watcher.handle()) + .map(anyhow::Ok); let webhook_server = create_webhook_server( ctx, @@ -119,8 +127,9 @@ async fn main() -> anyhow::Result<()> { client.as_kube_client(), ) .await?; + let webhook_server = webhook_server - .run() + .run(sigterm_watcher.handle()) .map_err(|err| anyhow!(err).context("failed to run webhook")); futures::try_join!( diff --git a/rust/operator-binary/src/restart_controller/pod.rs b/rust/operator-binary/src/restart_controller/pod.rs index a20b277..c04f333 100644 --- a/rust/operator-binary/src/restart_controller/pod.rs +++ b/rust/operator-binary/src/restart_controller/pod.rs @@ -1,4 +1,4 @@ -use std::{sync::Arc, time::Duration}; +use std::{future::Future, sync::Arc, time::Duration}; use futures::StreamExt; use http::StatusCode; @@ -70,7 +70,10 @@ impl ReconcilerError for Error { } } -pub async fn start(client: &Client, watch_namespace: &WatchNamespace) { +pub async fn start(client: &Client, watch_namespace: &WatchNamespace, shutdown_signal: F) +where + F: Future + Send + Sync + 'static, +{ let controller = Controller::new( watch_namespace.get_api::>(client), // TODO: Can we only watch a subset of Pods with a specify label, e.g. @@ -85,6 +88,7 @@ pub async fn start(client: &Client, watch_namespace: &WatchNamespace) { }, )); controller + .graceful_shutdown_on(shutdown_signal) .run( reconcile, error_policy, diff --git a/rust/operator-binary/src/restart_controller/statefulset.rs b/rust/operator-binary/src/restart_controller/statefulset.rs index 30b938d..2cbdd92 100644 --- a/rust/operator-binary/src/restart_controller/statefulset.rs +++ b/rust/operator-binary/src/restart_controller/statefulset.rs @@ -1,4 +1,4 @@ -use std::{collections::BTreeMap, sync::Arc, time::Duration}; +use std::{collections::BTreeMap, future::Future, sync::Arc, time::Duration}; use futures::{Stream, StreamExt, TryStream, stream}; use serde_json::json; @@ -92,12 +92,15 @@ pub fn create_context( (ctx, cm_store_tx, secret_store_tx) } -pub async fn start( +pub async fn start( ctx: Arc, cm_store_tx: Initializer>>, secret_store_tx: Initializer>>, watch_namespace: &WatchNamespace, -) { + shutdown_signal: F, +) where + F: Future, +{ let stses = watch_namespace.get_api::>(&ctx.client); let cms = watch_namespace.get_api::(&ctx.client); let secrets = watch_namespace.get_api::(&ctx.client); @@ -163,7 +166,10 @@ pub async fn start( .applied_objects(), (), ), - ), + ) + // This uses the same mechanism as kube's Controller does under the hood, see + // https://github.com/kube-rs/kube/blob/8bcdcb52e1e13c1c1ec59f6118fbed575ac10a4b/kube-runtime/src/controller/mod.rs#L1671 + .take_until(shutdown_signal), Config::default(), ) // We can let the reporting happen in the background From 3af446f6fc7f615523bbeadf7c9fdc2024c4d5fd Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 5 Feb 2026 09:47:22 +0100 Subject: [PATCH 2/4] chore: Bump bytes crate to 1.11.1 Fixes RUSTSEC-2026-0007. --- Cargo.lock | 4 ++-- Cargo.nix | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 90f7922..31ab267 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -296,9 +296,9 @@ checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytes" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "cc" diff --git a/Cargo.nix b/Cargo.nix index 58f5f61..3539117 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -941,9 +941,9 @@ rec { }; "bytes" = rec { crateName = "bytes"; - version = "1.11.0"; + version = "1.11.1"; edition = "2021"; - sha256 = "1cww1ybcvisyj8pbzl4m36bni2jaz0narhczp1348gqbvkxh8lmk"; + sha256 = "0czwlhbq8z29wq0ia87yass2mzy1y0jcasjb8ghriiybnwrqfx0y"; authors = [ "Carl Lerche " "Sean McArthur " From 2dd4468bcf6f7d5a34e0a28a957134f520a6552a Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 5 Feb 2026 09:48:04 +0100 Subject: [PATCH 3/4] chore: Bump git2 crate to 0.20.4 Fixes RUSTSEC-2026-0008. --- Cargo.lock | 4 ++-- Cargo.nix | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 31ab267..3170133 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1003,9 +1003,9 @@ dependencies = [ [[package]] name = "git2" -version = "0.20.3" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2b37e2f62729cdada11f0e6b3b6fe383c69c29fc619e391223e12856af308c" +checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b" dependencies = [ "bitflags", "libc", diff --git a/Cargo.nix b/Cargo.nix index 3539117..e9de3c9 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -3139,9 +3139,9 @@ rec { }; "git2" = rec { crateName = "git2"; - version = "0.20.3"; + version = "0.20.4"; edition = "2018"; - sha256 = "131hmxb2iq9328wrwqgw56fcd0z3dwxnn3hzl6nwsa97yvi3fary"; + sha256 = "0azykjpk3j6s354z23jkyq3r3pbmlw9ha1zsxkw5cnnpi1h2b23v"; authors = [ "Josh Triplett " "Alex Crichton " From 6c53e103f59ee1b5da709fb3bbf8a195e883846c Mon Sep 17 00:00:00 2001 From: Techassi Date: Thu, 5 Feb 2026 09:50:44 +0100 Subject: [PATCH 4/4] chore: Add changelog entry --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f7c9d3..2c65d93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Changed + +- Gracefully shutdown all concurrent tasks by forwarding the SIGTERM signal ([#396]). + ### Fixed - BREAKING: Prevent Pod 0 restart by utilizing a mutating webhook. @@ -13,6 +17,7 @@ All notable changes to this project will be documented in this file. env variable ([#387]). [#387]: https://github.com/stackabletech/commons-operator/pull/387 +[#396]: https://github.com/stackabletech/commons-operator/pull/396 ## [25.11.0] - 2025-11-07