Skip to content

Commit e69611e

Browse files
authored
feat: Enable restart controller (#97)
* feat: Enable restart controller * changelog * fix tests
1 parent edbde1e commit e69611e

File tree

8 files changed

+49
-36
lines changed

8 files changed

+49
-36
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file.
1111
- Allow adding entries to the OpenSearch keystore ([#76]).
1212
- Support objectOverrides using `.spec.objectOverrides`.
1313
See [objectOverrides concepts page](https://docs.stackable.tech/home/nightly/concepts/overrides/#object-overrides) for details ([#93]).
14+
- Enable the [restart-controller](https://docs.stackable.tech/home/nightly/commons-operator/restarter/), so that the Pods are automatically restarted on config changes ([#97]).
1415

1516
### Changed
1617

@@ -21,6 +22,7 @@ All notable changes to this project will be documented in this file.
2122
[#76]: https://github.com/stackabletech/opensearch-operator/pull/76
2223
[#91]: https://github.com/stackabletech/opensearch-operator/pull/91
2324
[#93]: https://github.com/stackabletech/opensearch-operator/pull/93
25+
[#97]: https://github.com/stackabletech/opensearch-operator/pull/97
2426

2527
## [25.11.0] - 2025-11-07
2628

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
@@ -10,7 +10,7 @@ edition = "2024"
1010
repository = "https://github.com/stackabletech/opensearch-operator"
1111

1212
[workspace.dependencies]
13-
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.101.2", features = ["telemetry", "versioned"] }
13+
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.102.0", features = ["telemetry", "versioned"] }
1414

1515
built = { version = "0.8.0", features = ["chrono", "git2"] }
1616
clap = "4.5"

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.

rust/operator-binary/src/controller/apply.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ impl<'a> Applier<'a> {
7676
mut self,
7777
resources: KubernetesResources<Prepared>,
7878
) -> Result<KubernetesResources<Applied>> {
79-
let stateful_sets = self.add_resources(resources.stateful_sets).await?;
80-
8179
let services = self.add_resources(resources.services).await?;
8280

8381
let listeners = self.add_resources(resources.listeners).await?;
@@ -90,6 +88,11 @@ impl<'a> Applier<'a> {
9088

9189
let pod_disruption_budgets = self.add_resources(resources.pod_disruption_budgets).await?;
9290

91+
// Note: The StatefulSet needs to be applied after all ConfigMaps and Secrets it mounts
92+
// to prevent unnecessary Pod restarts.
93+
// See https://github.com/stackabletech/commons-operator/issues/111 for details.
94+
let stateful_sets = self.add_resources(resources.stateful_sets).await?;
95+
9396
self.cluster_resources
9497
.delete_orphaned_resources(self.client)
9598
.await

rust/operator-binary/src/controller/build/role_group_builder.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use stackable_operator::{
77
meta::ObjectMetaBuilder,
88
pod::volume::{SecretFormat, SecretOperatorVolumeSourceBuilder, VolumeBuilder},
99
},
10+
constants::RESTART_CONTROLLER_ENABLED_LABEL,
1011
crd::listener::{self},
1112
k8s_openapi::{
1213
DeepMerge,
@@ -178,6 +179,7 @@ impl<'a> RoleGroupBuilder<'a> {
178179
pub fn build_stateful_set(&self) -> StatefulSet {
179180
let metadata = self
180181
.common_metadata(self.resource_names.stateful_set_name())
182+
.with_label(RESTART_CONTROLLER_ENABLED_LABEL.to_owned())
181183
.build();
182184

183185
let template = self.build_pod_template();
@@ -1028,7 +1030,8 @@ mod tests {
10281030
"app.kubernetes.io/name": "opensearch",
10291031
"app.kubernetes.io/role-group": "default",
10301032
"app.kubernetes.io/version": "3.1.0",
1031-
"stackable.tech/vendor": "Stackable"
1033+
"stackable.tech/vendor": "Stackable",
1034+
"restarter.stackable.tech/enabled": "true"
10321035
},
10331036
"name": "my-opensearch-cluster-nodes-default",
10341037
"namespace": "default",
@@ -1633,6 +1636,7 @@ mod tests {
16331636
"spec": {
16341637
"className": "cluster-internal",
16351638
"extraPodSelectorLabels": {},
1639+
"objectOverrides": [],
16361640
"ports": [
16371641
{
16381642
"name": "http",

tests/templates/kuttl/smoke/10-assert.yaml.j2

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ timeout: 600
99
apiVersion: apps/v1
1010
kind: StatefulSet
1111
metadata:
12+
name: opensearch-nodes-cluster-manager
1213
labels:
1314
app.kubernetes.io/component: nodes
1415
app.kubernetes.io/instance: opensearch
@@ -17,7 +18,8 @@ metadata:
1718
app.kubernetes.io/role-group: cluster-manager
1819
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
1920
stackable.tech/vendor: Stackable
20-
name: opensearch-nodes-cluster-manager
21+
restarter.stackable.tech/enabled: "true"
22+
generation: 1 # There should be no unneeded Pod restarts
2123
ownerReferences:
2224
- apiVersion: opensearch.stackable.tech/v1alpha1
2325
controller: true
@@ -341,6 +343,7 @@ status:
341343
apiVersion: apps/v1
342344
kind: StatefulSet
343345
metadata:
346+
name: opensearch-nodes-data
344347
labels:
345348
app.kubernetes.io/component: nodes
346349
app.kubernetes.io/instance: opensearch
@@ -349,7 +352,8 @@ metadata:
349352
app.kubernetes.io/role-group: data
350353
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
351354
stackable.tech/vendor: Stackable
352-
name: opensearch-nodes-data
355+
restarter.stackable.tech/enabled: "true"
356+
generation: 1 # There should be no unneeded Pod restarts
353357
ownerReferences:
354358
- apiVersion: opensearch.stackable.tech/v1alpha1
355359
controller: true

0 commit comments

Comments
 (0)