Skip to content

Commit f083055

Browse files
authored
feat: Add graceful shutdown (#747)
* feat: Add graceful shutdown * chore: Update CRD documentation * chore: Add changelog entry * chore: Bump bytes crate to 1.11.1 Fixes RUSTSEC-2026-0007. * chore: Bump git2 crate to 0.20.4 Fixes RUSTSEC-2026-0008.
1 parent 8a6ab18 commit f083055

7 files changed

Lines changed: 63 additions & 53 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@ All notable changes to this project will be documented in this file.
1010
See [objectOverrides concepts page](https://docs.stackable.tech/home/nightly/concepts/overrides/#object-overrides) for details ([#741]).
1111
- Enable the [restart-controller](https://docs.stackable.tech/home/nightly/commons-operator/restarter/), so that the Pods are automatically restarted on config changes ([#743]).
1212

13+
### Changed
14+
15+
- Gracefully shutdown all concurrent tasks by forwarding the SIGTERM signal ([#747]).
16+
1317
### Fixed
1418

1519
- Previously, some shell output of init-containers was not logged properly and therefore not aggregated, which is fixed now ([#746]).
1620

1721
[#741]: https://github.com/stackabletech/hdfs-operator/pull/741
1822
[#743]: https://github.com/stackabletech/hdfs-operator/pull/743
1923
[#746]: https://github.com/stackabletech/hdfs-operator/pull/746
24+
[#747]: https://github.com/stackabletech/hdfs-operator/pull/747
2025

2126
## [25.11.0] - 2025-11-07
2227

Cargo.lock

Lines changed: 14 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.nix

Lines changed: 23 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ repository = "https://github.com/stackabletech/hdfs-operator"
1111

1212
[workspace.dependencies]
1313
product-config = { git = "https://github.com/stackabletech/product-config.git", tag = "0.8.0" }
14-
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.102.0", features = ["telemetry", "versioned"] }
14+
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.105.0", features = ["telemetry", "versioned"] }
1515

1616
anyhow = "1.0"
1717
built = { version = "0.8", features = ["chrono", "git2"] }

crate-hashes.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/helm/hdfs-operator/crds/crds.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ spec:
490490
default: {}
491491
description: |-
492492
In the `podOverrides` property you can define a
493-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
493+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
494494
to override any property that can be set on a Kubernetes Pod.
495495
Read the
496496
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -855,7 +855,7 @@ spec:
855855
default: {}
856856
description: |-
857857
In the `podOverrides` property you can define a
858-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
858+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
859859
to override any property that can be set on a Kubernetes Pod.
860860
Read the
861861
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -1240,7 +1240,7 @@ spec:
12401240
default: {}
12411241
description: |-
12421242
In the `podOverrides` property you can define a
1243-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
1243+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
12441244
to override any property that can be set on a Kubernetes Pod.
12451245
Read the
12461246
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -1589,7 +1589,7 @@ spec:
15891589
default: {}
15901590
description: |-
15911591
In the `podOverrides` property you can define a
1592-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
1592+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
15931593
to override any property that can be set on a Kubernetes Pod.
15941594
Read the
15951595
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -1924,7 +1924,7 @@ spec:
19241924
default: {}
19251925
description: |-
19261926
In the `podOverrides` property you can define a
1927-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
1927+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
19281928
to override any property that can be set on a Kubernetes Pod.
19291929
Read the
19301930
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -2279,7 +2279,7 @@ spec:
22792279
default: {}
22802280
description: |-
22812281
In the `podOverrides` property you can define a
2282-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
2282+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
22832283
to override any property that can be set on a Kubernetes Pod.
22842284
Read the
22852285
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)

rust/operator-binary/src/main.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use stackable_operator::{
3030
logging::controller::report_controller_reconciled,
3131
shared::yaml::SerializeOptions,
3232
telemetry::Tracing,
33+
utils::signal::SignalWatcher,
3334
};
3435
use tracing::info_span;
3536
use tracing_futures::Instrument;
@@ -91,9 +92,13 @@ async fn main() -> anyhow::Result<()> {
9192
description = built_info::PKG_DESCRIPTION
9293
);
9394

95+
// Watches for the SIGTERM signal and sends a signal to all receivers, which gracefully
96+
// shuts down all concurrent tasks below (EoS checker, controller).
97+
let sigterm_watcher = SignalWatcher::sigterm()?;
98+
9499
let eos_checker =
95100
EndOfSupportChecker::new(built_info::BUILT_TIME_UTC, maintenance.end_of_support)?
96-
.run()
101+
.run(sigterm_watcher.handle())
97102
.map(anyhow::Ok);
98103

99104
let product_config = product_config.load(&[
@@ -152,7 +157,6 @@ async fn main() -> anyhow::Result<()> {
152157
watch_namespace.get_api::<DeserializeGuard<ConfigMap>>(&client),
153158
watcher::Config::default(),
154159
)
155-
.shutdown_on_signal()
156160
.watches(
157161
watch_namespace.get_api::<DeserializeGuard<ConfigMap>>(&client),
158162
watcher::Config::default(),
@@ -164,6 +168,7 @@ async fn main() -> anyhow::Result<()> {
164168
.map(|hdfs| reflector::ObjectRef::from_obj(&*hdfs))
165169
},
166170
)
171+
.graceful_shutdown_on(sigterm_watcher.handle())
167172
.run(
168173
hdfs_controller::reconcile_hdfs,
169174
hdfs_controller::error_policy,

0 commit comments

Comments
 (0)