Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file.

- Support floating tags for product images via the new `spec.image.stackableVersionPolicy` field
([#186]).
- Add support for OpenSearch 3.8.0, deprecate 3.6.0 and remove support for 3.4.0 ([#189]).

### Changed

Expand Down Expand Up @@ -36,6 +37,7 @@ All notable changes to this project will be documented in this file.
[#172]: https://github.com/stackabletech/opensearch-operator/pull/172
[#179]: https://github.com/stackabletech/opensearch-operator/pull/179
[#186]: https://github.com/stackabletech/opensearch-operator/pull/186
[#189]: https://github.com/stackabletech/opensearch-operator/pull/189

## [26.7.0] - 2026-07-21

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ kubectl create secret generic opensearch-credentials \
# Hide notes because they are very confusing in combination with the port forward below.
helm install opensearch-dashboards opensearch-dashboards \
--repo https://opensearch-project.github.io/helm-charts \
--version 3.6.0 \
--version 3.8.0 \
--values opensearch-dashboards-values.yaml \
--hide-notes \
--wait
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ kubectl create secret generic opensearch-credentials \
# Hide notes because they are very confusing in combination with the port forward below.
helm install opensearch-dashboards opensearch-dashboards \
--repo https://opensearch-project.github.io/helm-charts \
--version 3.6.0 \
--version 3.8.0 \
--values opensearch-dashboards-values.yaml \
--hide-notes \
--wait
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
image:
repository: oci.stackable.tech/sdp/opensearch-dashboards
tag: 3.6.0-stackable0.0.0-dev
tag: 3.8.0-stackable0.0.0-dev
serviceAccount:
create: false
name: simple-opensearch-serviceaccount
Expand All @@ -23,6 +23,11 @@ config:
secure: true
# See https://github.com/opensearch-project/helm-charts/blob/main/charts/opensearch-dashboards/templates/deployment.yaml#L122
opensearchHosts: ""
resources:
requests:
cpu: 500m
limits:
cpu: "1"
extraEnvs:
- name: OPENSEARCH_HOSTS
valueFrom:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
image:
repository: oci.stackable.tech/sdp/opensearch-dashboards
tag: 3.6.0-stackable{{ versions.opensearch }}
tag: 3.8.0-stackable{{ versions.opensearch }}
serviceAccount:
create: false
name: simple-opensearch-serviceaccount
Expand All @@ -23,6 +23,11 @@ config:
secure: true
# See https://github.com/opensearch-project/helm-charts/blob/main/charts/opensearch-dashboards/templates/deployment.yaml#L122
opensearchHosts: ""
resources:
requests:
cpu: 500m
limits:
cpu: "1"
extraEnvs:
- name: OPENSEARCH_HOSTS
valueFrom:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ metadata:
name: simple-opensearch
spec:
image:
productVersion: 3.6.0
productVersion: 3.8.0
clusterConfig:
security:
settings:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ A basic `values.yaml` file to deploy OpenSearch Dashboards with this chart might
opensearchHosts: null # <1>
image: # <2>
repository: oci.stackable.tech/sdp/opensearch-dashboards
tag: 3.6.0-stackable0.0.0-dev
tag: 3.8.0-stackable0.0.0-dev
serviceAccount:
create: false
name: opensearch-serviceaccount # <3>
Expand Down Expand Up @@ -92,7 +92,7 @@ After the values are adjusted according to your deployment, especially `opensear
----
helm install opensearch-dashboards opensearch-dashboards \
--repo https://opensearch-project.github.io/helm-charts \
--version 3.6.0 \
--version 3.8.0 \
--values opensearch-dashboards-values.yaml \
--wait
----
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ A basic `values.yaml` file to deploy OpenSearch Dashboards with this chart might
opensearchHosts: null # <1>
image: # <2>
repository: oci.stackable.tech/sdp/opensearch-dashboards
tag: 3.6.0-stackable{{ versions.opensearch }}
tag: 3.8.0-stackable{{ versions.opensearch }}
serviceAccount:
create: false
name: opensearch-serviceaccount # <3>
Expand Down Expand Up @@ -92,7 +92,7 @@ After the values are adjusted according to your deployment, especially `opensear
----
helm install opensearch-dashboards opensearch-dashboards \
--repo https://opensearch-project.github.io/helm-charts \
--version 3.6.0 \
--version 3.8.0 \
--values opensearch-dashboards-values.yaml \
--wait
----
2 changes: 1 addition & 1 deletion docs/modules/opensearch/pages/usage-guide/security.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ metadata:
name: opensearch
spec:
image:
productVersion: 3.6.0
productVersion: 3.8.0
clusterConfig:
tls:
serverSecretClass: tls # <1>
Expand Down
4 changes: 2 additions & 2 deletions docs/modules/opensearch/partials/supported-versions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
// Stackable Platform documentation.

- 3.1.0 (LTS)
- 3.6.0
- 3.4.0 (deprecated)
- 3.8.0
- 3.6.0 (deprecated)
8 changes: 4 additions & 4 deletions rust/operator-binary/src/controller.rs
Original file line number Diff line number Diff line change
Expand Up @@ -610,14 +610,14 @@ mod tests {
fn validated_cluster() -> ValidatedCluster {
ValidatedCluster::new(
ResolvedProductImage {
product_version: "3.6.0".to_owned(),
app_version_label_value: LabelValue::from_str("3.6.0-stackable0.0.0-dev")
product_version: "3.8.0".to_owned(),
app_version_label_value: LabelValue::from_str("3.8.0-stackable0.0.0-dev")
.expect("should be a valid label value"),
image: "oci.stackable.tech/sdp/opensearch:3.6.0-stackable0.0.0-dev".to_string(),
image: "oci.stackable.tech/sdp/opensearch:3.8.0-stackable0.0.0-dev".to_string(),
image_pull_policy: "Always".to_owned(),
pull_secrets: None,
},
ProductVersion::from_str_unsafe("3.6.0"),
ProductVersion::from_str_unsafe("3.8.0"),
ClusterName::from_str_unsafe("my-opensearch"),
NamespaceName::from_str_unsafe("default"),
uuid!("e6ac237d-a6d4-43a1-8135-f36506110912"),
Expand Down
8 changes: 4 additions & 4 deletions rust/operator-binary/src/controller/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,14 +177,14 @@ mod tests {
fn validated_cluster() -> ValidatedCluster {
ValidatedCluster::new(
ResolvedProductImage {
product_version: "3.6.0".to_owned(),
app_version_label_value: LabelValue::from_str("3.6.0-stackable0.0.0-dev")
product_version: "3.8.0".to_owned(),
app_version_label_value: LabelValue::from_str("3.8.0-stackable0.0.0-dev")
.expect("should be a valid label value"),
image: "oci.stackable.tech/sdp/opensearch:3.6.0-stackable0.0.0-dev".to_string(),
image: "oci.stackable.tech/sdp/opensearch:3.8.0-stackable0.0.0-dev".to_string(),
image_pull_policy: "Always".to_owned(),
pull_secrets: None,
},
ProductVersion::from_str_unsafe("3.6.0"),
ProductVersion::from_str_unsafe("3.8.0"),
ClusterName::from_str_unsafe("my-opensearch"),
NamespaceName::from_str_unsafe("default"),
uuid!("e6ac237d-a6d4-43a1-8135-f36506110912"),
Expand Down
14 changes: 7 additions & 7 deletions rust/operator-binary/src/controller/build/node_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ const CONFIG_OPTION_NODE_ROLES: &str = "node.roles";

/// Defines the path for the logs
/// OpenSearch grants the required access rights, see
/// <https://github.com/opensearch-project/OpenSearch/blob/3.6.0/server/src/main/java/org/opensearch/bootstrap/Security.java#L371>
/// <https://github.com/opensearch-project/OpenSearch/blob/3.8.0/server/src/main/java/org/opensearch/bootstrap/Security.java#L406>
/// The permissions "write" and "delete" are required for the log file rollover.
/// Type: string
const CONFIG_OPTION_PATH_LOGS: &str = "path.logs";
Expand Down Expand Up @@ -427,7 +427,7 @@ impl NodeConfig {
/// Please read the following sections for an explanation of these restrictions.
///
/// This configuration setting replaces the setting `cluster.initial_master_nodes`, see
/// <https://github.com/opensearch-project/OpenSearch/blob/3.6.0/server/src/main/java/org/opensearch/cluster/coordination/ClusterBootstrapService.java#L79-L93>.
/// <https://github.com/opensearch-project/OpenSearch/blob/3.8.0/server/src/main/java/org/opensearch/cluster/coordination/ClusterBootstrapService.java#L79-L93>.
///
/// This setting is required on nodes with the cluster-manager node role on a multi-node
/// cluster. Otherwise the bootstrapping of the cluster fails and all pods report:
Expand All @@ -437,7 +437,7 @@ impl NodeConfig {
/// error is thrown:
/// > setting [cluster.initial_cluster_manager_nodes] is not allowed when [discovery.type] is set to [single-node]
///
/// see <https://github.com/opensearch-project/OpenSearch/blob/3.6.0/server/src/main/java/org/opensearch/cluster/coordination/ClusterBootstrapService.java#L126-L136>
/// see <https://github.com/opensearch-project/OpenSearch/blob/3.8.0/server/src/main/java/org/opensearch/cluster/coordination/ClusterBootstrapService.java#L126-L136>
///
/// This setting does not seem to have an effect on nodes without the cluster-manager node
/// role. However, as it is recommended (see the Elasticsearch documentation below) to not set
Expand Down Expand Up @@ -590,7 +590,7 @@ mod tests {
}

fn node_config(test_config: TestConfig) -> NodeConfig {
let image: ProductImage = serde_json::from_str(r#"{"productVersion": "3.6.0"}"#)
let image: ProductImage = serde_json::from_str(r#"{"productVersion": "3.8.0"}"#)
.expect("should be a valid ProductImage");

let role_group_name = RoleGroupName::from_str_unsafe("data");
Expand Down Expand Up @@ -659,10 +659,10 @@ mod tests {

let cluster = ValidatedCluster::new(
ResolvedProductImage {
product_version: "3.6.0".to_owned(),
app_version_label_value: LabelValue::from_str("3.6.0-stackable0.0.0-dev")
product_version: "3.8.0".to_owned(),
app_version_label_value: LabelValue::from_str("3.8.0-stackable0.0.0-dev")
.expect("should be a valid label value"),
image: "oci.stackable.tech/sdp/opensearch:3.6.0-stackable0.0.0-dev".to_string(),
image: "oci.stackable.tech/sdp/opensearch:3.8.0-stackable0.0.0-dev".to_string(),
image_pull_policy: "Always".to_owned(),
pull_secrets: None,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ fn log4j2_console_appender_config(
"PatternLayout".to_owned(),
),
// Same as the default layout pattern of the console appender
// see https://github.com/opensearch-project/OpenSearch/blob/3.6.0/distribution/src/config/log4j2.properties#L17
// see https://github.com/opensearch-project/OpenSearch/blob/3.8.0/distribution/src/config/log4j2.properties#L17
(
"appender.CONSOLE.layout.pattern".to_owned(),
"[%d{ISO8601}][%-5p][%-25c{1.}] [%node_name]%marker %m%n".to_owned(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#!/usr/bin/env sh

SUBSTITUTED_VECTOR_YAML="vector-subst.yaml"
Comment thread
siegfriedweber marked this conversation as resolved.
trap 'rm "$SUBSTITUTED_VECTOR_YAML"' EXIT

DATA_DIR=/stackable/log/_vector-state \
LOG_DIR=/stackable/log \
OPENSEARCH_SERVER_LOG_FILE=opensearch_server.json \
Expand All @@ -9,4 +12,6 @@ ROLE_NAME=nodes \
ROLE_GROUP_NAME=cluster-manager \
VECTOR_AGGREGATOR_ADDRESS=vector-aggregator \
VECTOR_FILE_LOG_LEVEL=info \
vector test vector.yaml vector-test.yaml
envsubst < vector.yaml > "$SUBSTITUTED_VECTOR_YAML"

vector test "$SUBSTITUTED_VECTOR_YAML" vector-test.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Run tests with `./test-vector.sh`
#
# A downside of these test cases is that they compare the whole event and that the message can
# contain source code positions in vector.yaml, e.g. "function call error for \"parse_timestamp\" at (990:1070)". Please adapt the tests if you change VRL code in vector.yaml.
# contain source code positions in vector.yaml, e.g. "function call error for \"parse_timestamp\" at (999:1079)". Please adapt the tests if you change VRL code in vector.yaml.
---
tests:
- name: Test opensearch_server log entry without stacktrace
Expand Down Expand Up @@ -45,14 +45,14 @@ tests:
{"type": "server", "timestamp": "2025-10-01T12:47:28,363+0000", "level": "INFO", "component": "o.o.c.c.JoinHelper", "cluster.name": "opensearch", "node.name": "opensearch-nodes-cluster-manager-0", "message": "failed to join {opensearch-nodes-cluster-manager-0}{sk-r0P_TTYuPqaamTFbjKg}{fIRSMbQYSe2nKQZ_sPn4kg}{10.244.0.20}{10.244.0.20:9300}{m}{shard_indexing_pressure_enabled=true} with JoinRequest{sourceNode={opensearch-nodes-cluster-manager-0}{sk-r0P_TTYuPqaamTFbjKg}{fIRSMbQYSe2nKQZ_sPn4kg}{10.244.0.20}{10.244.0.20:9300}{m}{shard_indexing_pressure_enabled=true}, minimumTerm=0, optionalJoin=Optional[Join{term=1, lastAcceptedTerm=0, lastAcceptedVersion=0, sourceNode={opensearch-nodes-cluster-manager-0}{sk-r0P_TTYuPqaamTFbjKg}{fIRSMbQYSe2nKQZ_sPn4kg}{10.244.0.20}{10.244.0.20:9300}{m}{shard_indexing_pressure_enabled=true}, targetNode={opensearch-nodes-cluster-manager-0}{sk-r0P_TTYuPqaamTFbjKg}{fIRSMbQYSe2nKQZ_sPn4kg}{10.244.0.20}{10.244.0.20:9300}{m}{shard_indexing_pressure_enabled=true}}]}",
"stacktrace": ["org.opensearch.transport.RemoteTransportException: [opensearch-nodes-cluster-manager-0][10.244.0.20:9300][internal:cluster/coordination/join]",
"Caused by: org.opensearch.cluster.coordination.CoordinationStateRejectedException: became follower",
"at org.opensearch.cluster.coordination.JoinHelper$$CandidateJoinAccumulator.lambda$$close$$3(JoinHelper.java:648) ~[opensearch-3.6.0.jar:3.6.0]",
"at org.opensearch.cluster.coordination.JoinHelper$$CandidateJoinAccumulator.lambda$$close$$3(JoinHelper.java:648) ~[opensearch-3.8.0.jar:3.8.0]",
"at java.base/java.util.HashMap$$Values.forEach(HashMap.java:1073) ~[?:?]",
"at org.opensearch.cluster.coordination.JoinHelper$$CandidateJoinAccumulator.close(JoinHelper.java:648) ~[opensearch-3.6.0.jar:3.6.0]",
"at org.opensearch.cluster.coordination.Coordinator.becomeFollower(Coordinator.java:829) ~[opensearch-3.6.0.jar:3.6.0]",
"at org.opensearch.cluster.coordination.Coordinator.onFollowerCheckRequest(Coordinator.java:405) ~[opensearch-3.6.0.jar:3.6.0]",
"at org.opensearch.cluster.coordination.FollowersChecker$$2.doRun(FollowersChecker.java:250) ~[opensearch-3.6.0.jar:3.6.0]",
"at org.opensearch.common.util.concurrent.ThreadContext$$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:975) ~[opensearch-3.6.0.jar:3.6.0]",
"at org.opensearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:52) ~[opensearch-3.6.0.jar:3.6.0]",
"at org.opensearch.cluster.coordination.JoinHelper$$CandidateJoinAccumulator.close(JoinHelper.java:648) ~[opensearch-3.8.0.jar:3.8.0]",
"at org.opensearch.cluster.coordination.Coordinator.becomeFollower(Coordinator.java:829) ~[opensearch-3.8.0.jar:3.8.0]",
"at org.opensearch.cluster.coordination.Coordinator.onFollowerCheckRequest(Coordinator.java:405) ~[opensearch-3.8.0.jar:3.8.0]",
"at org.opensearch.cluster.coordination.FollowersChecker$$2.doRun(FollowersChecker.java:250) ~[opensearch-3.8.0.jar:3.8.0]",
"at org.opensearch.common.util.concurrent.ThreadContext$$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:975) ~[opensearch-3.8.0.jar:3.8.0]",
"at org.opensearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:52) ~[opensearch-3.8.0.jar:3.8.0]",
"at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]",
"at java.base/java.util.concurrent.ThreadPoolExecutor$$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]",
"at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]"] }
Expand All @@ -75,14 +75,14 @@ tests:
\n\
org.opensearch.transport.RemoteTransportException: [opensearch-nodes-cluster-manager-0][10.244.0.20:9300][internal:cluster/coordination/join]\n\
Caused by: org.opensearch.cluster.coordination.CoordinationStateRejectedException: became follower\n\
at org.opensearch.cluster.coordination.JoinHelper$$CandidateJoinAccumulator.lambda$$close$$3(JoinHelper.java:648) ~[opensearch-3.6.0.jar:3.6.0]\n\
at org.opensearch.cluster.coordination.JoinHelper$$CandidateJoinAccumulator.lambda$$close$$3(JoinHelper.java:648) ~[opensearch-3.8.0.jar:3.8.0]\n\
at java.base/java.util.HashMap$$Values.forEach(HashMap.java:1073) ~[?:?]\n\
at org.opensearch.cluster.coordination.JoinHelper$$CandidateJoinAccumulator.close(JoinHelper.java:648) ~[opensearch-3.6.0.jar:3.6.0]\n\
at org.opensearch.cluster.coordination.Coordinator.becomeFollower(Coordinator.java:829) ~[opensearch-3.6.0.jar:3.6.0]\n\
at org.opensearch.cluster.coordination.Coordinator.onFollowerCheckRequest(Coordinator.java:405) ~[opensearch-3.6.0.jar:3.6.0]\n\
at org.opensearch.cluster.coordination.FollowersChecker$$2.doRun(FollowersChecker.java:250) ~[opensearch-3.6.0.jar:3.6.0]\n\
at org.opensearch.common.util.concurrent.ThreadContext$$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:975) ~[opensearch-3.6.0.jar:3.6.0]\n\
at org.opensearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:52) ~[opensearch-3.6.0.jar:3.6.0]\n\
at org.opensearch.cluster.coordination.JoinHelper$$CandidateJoinAccumulator.close(JoinHelper.java:648) ~[opensearch-3.8.0.jar:3.8.0]\n\
at org.opensearch.cluster.coordination.Coordinator.becomeFollower(Coordinator.java:829) ~[opensearch-3.8.0.jar:3.8.0]\n\
at org.opensearch.cluster.coordination.Coordinator.onFollowerCheckRequest(Coordinator.java:405) ~[opensearch-3.8.0.jar:3.8.0]\n\
at org.opensearch.cluster.coordination.FollowersChecker$$2.doRun(FollowersChecker.java:250) ~[opensearch-3.8.0.jar:3.8.0]\n\
at org.opensearch.common.util.concurrent.ThreadContext$$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:975) ~[opensearch-3.8.0.jar:3.8.0]\n\
at org.opensearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:52) ~[opensearch-3.8.0.jar:3.8.0]\n\
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]\n\
at java.base/java.util.concurrent.ThreadPoolExecutor$$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]\n\
at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]",
Expand Down Expand Up @@ -213,7 +213,7 @@ tests:
"cluster": "opensearch",
"container": "opensearch",
"errors": [
"Timestamp not parsable, using current time instead: function call error for \"parse_timestamp\" at (990:1070): Invalid timestamp \"unparsable\": input contains invalid characters"
"Timestamp not parsable, using current time instead: function call error for \"parse_timestamp\" at (999:1079): Invalid timestamp \"unparsable\": input contains invalid characters"
],
"file": "opensearch_server.json",
"level": "INFO",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ transforms:

timestamp_string, err = string(event.timestamp)
if err == null {
# OpenSearch 3.4.0 uses log4j2 2.21.0 which renders the timezone using "Z" (Zulu).
# OpenSearch 3.6.0 uses log4j2 2.25.0 which renders the timezone as a numeric offset (e.g. "...,122+0000").
# OpenSearch 3.1.0 uses log4j2 2.21.0 which renders the timezone using "Z" (Zulu).
Comment thread
siegfriedweber marked this conversation as resolved.
# OpenSearch 3.6.0 and 3.8.0 use log4j2 2.25.x which renders the timezone as a numeric offset (e.g. "...,122+0000").
# Try the offset format first and fall back to the literal "Z" so both layouts are parsed.
parsed_timestamp, err = parse_timestamp(timestamp_string, "%Y-%m-%dT%H:%M:%S,%3f%z")
if err != null {
Expand Down
Loading
Loading