Skip to content

Commit b883f5c

Browse files
authored
feat: Add graceful shutdown (#730)
* feat: Add graceful shutdown * chore: Update CRD documentation * chore: Add changelog entry
1 parent 141f5d2 commit b883f5c

7 files changed

Lines changed: 46 additions & 39 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
### Changed
1616

17+
- Gracefully shutdown all concurrent tasks by forwarding the SIGTERM signal ([#730]).
1718
- Bump testing-tools to `0.3.0-stackable0.0.0-dev` ([#724]).
1819

1920
### Removed
@@ -26,6 +27,7 @@
2627
[#725]: https://github.com/stackabletech/hbase-operator/pull/725
2728
[#727]: https://github.com/stackabletech/hbase-operator/pull/727
2829
[#729]: https://github.com/stackabletech/hbase-operator/pull/729
30+
[#730]: https://github.com/stackabletech/hbase-operator/pull/730
2931

3032
## [25.11.0] - 2025-11-07
3133

Cargo.lock

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

Cargo.nix

Lines changed: 15 additions & 15 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/hbase-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/hbase-operator/crds/crds.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ spec:
452452
default: {}
453453
description: |-
454454
In the `podOverrides` property you can define a
455-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
455+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
456456
to override any property that can be set on a Kubernetes Pod.
457457
Read the
458458
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -761,7 +761,7 @@ spec:
761761
default: {}
762762
description: |-
763763
In the `podOverrides` property you can define a
764-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
764+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
765765
to override any property that can be set on a Kubernetes Pod.
766766
Read the
767767
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -1093,7 +1093,7 @@ spec:
10931093
default: {}
10941094
description: |-
10951095
In the `podOverrides` property you can define a
1096-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
1096+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
10971097
to override any property that can be set on a Kubernetes Pod.
10981098
Read the
10991099
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -1438,7 +1438,7 @@ spec:
14381438
default: {}
14391439
description: |-
14401440
In the `podOverrides` property you can define a
1441-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
1441+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
14421442
to override any property that can be set on a Kubernetes Pod.
14431443
Read the
14441444
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -1720,7 +1720,7 @@ spec:
17201720
default: {}
17211721
description: |-
17221722
In the `podOverrides` property you can define a
1723-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
1723+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
17241724
to override any property that can be set on a Kubernetes Pod.
17251725
Read the
17261726
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides)
@@ -2029,7 +2029,7 @@ spec:
20292029
default: {}
20302030
description: |-
20312031
In the `podOverrides` property you can define a
2032-
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core)
2032+
[PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core)
20332033
to override any property that can be set on a Kubernetes Pod.
20342034
Read the
20352035
[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
@@ -28,6 +28,7 @@ use stackable_operator::{
2828
logging::controller::report_controller_reconciled,
2929
shared::yaml::SerializeOptions,
3030
telemetry::Tracing,
31+
utils::signal::SignalWatcher,
3132
};
3233

3334
use crate::crd::{HbaseCluster, HbaseClusterVersion, v1alpha1};
@@ -87,9 +88,13 @@ async fn main() -> anyhow::Result<()> {
8788
description = built_info::PKG_DESCRIPTION
8889
);
8990

91+
// Watches for the SIGTERM signal and sends a signal to all receivers, which gracefully
92+
// shuts down all concurrent tasks below (EoS checker, controller).
93+
let sigterm_watcher = SignalWatcher::sigterm()?;
94+
9095
let eos_checker =
9196
EndOfSupportChecker::new(built_info::BUILT_TIME_UTC, maintenance.end_of_support)?
92-
.run()
97+
.run(sigterm_watcher.handle())
9398
.map(anyhow::Ok);
9499

95100
let product_config = product_config.load(&[
@@ -124,7 +129,6 @@ async fn main() -> anyhow::Result<()> {
124129
watch_namespace.get_api::<StatefulSet>(&client),
125130
watcher::Config::default(),
126131
)
127-
.shutdown_on_signal()
128132
.watches(
129133
watch_namespace.get_api::<DeserializeGuard<ConfigMap>>(&client),
130134
watcher::Config::default(),
@@ -136,6 +140,7 @@ async fn main() -> anyhow::Result<()> {
136140
.map(|hbase| ObjectRef::from_obj(&*hbase))
137141
},
138142
)
143+
.graceful_shutdown_on(sigterm_watcher.handle())
139144
.run(
140145
hbase_controller::reconcile_hbase,
141146
hbase_controller::error_policy,

0 commit comments

Comments
 (0)