You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2026/07/02 09:00:02 UTC
(unomi) 02/03: UNOMI-875: Upgrade Elasticsearch 9.4.2 and OpenSearch 3.9.0
This is an automated email from the ASF dual-hosted git repository.
sergehuber pushed a commit to branch UNOMI-875-pr3-platform-upgrade
in repository https://gitbox.apache.org/repos/asf/unomi.git
commit 324714f5401f4b447771c3af10056ff81e0d9b5b
Author: Serge Huber <sh...@apache.org>
AuthorDate: Thu Jul 2 10:59:16 2026 +0200
UNOMI-875: Upgrade Elasticsearch 9.4.2 and OpenSearch 3.9.0
Align Docker compose images and IT fixtures with new server versions.
Adapt ES bulk routing API for 9.4 and embed httpclient5 compression
dependencies for Karaf OSGi resolution.
---
docker/README.md | 8 +++---
docker/src/main/docker/docker-compose-build-es.yml | 2 +-
docker/src/main/docker/docker-compose-build-os.yml | 6 ++--
docker/src/main/docker/docker-compose-cluster.yml | 2 +-
docker/src/main/docker/docker-compose-es.yml | 2 +-
docker/src/main/docker/docker-compose-os.yml | 6 ++--
itests/docker-compose-snapshot-analysis.yml | 2 +-
persistence-elasticsearch/core/pom.xml | 33 +++++++++++++++++++++-
.../ElasticSearchPersistenceServiceImpl.java | 14 +++++++--
pom.xml | 8 +++---
10 files changed, 62 insertions(+), 21 deletions(-)
diff --git a/docker/README.md b/docker/README.md
index ae1e4f93b..5c862fc5d 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -46,25 +46,25 @@ If you want to run it without docker-compose you should then make sure you setup
For ElasticSearch:
```bash
-docker pull docker.elastic.co/elasticsearch/elasticsearch:9.2.1
+docker pull docker.elastic.co/elasticsearch/elasticsearch:9.4.2
docker network create unomi
docker run -d --name elasticsearch --net unomi -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-e cluster.name=contextElasticSearch \
- docker.elastic.co/elasticsearch/elasticsearch:9.2.1
+ docker.elastic.co/elasticsearch/elasticsearch:9.4.2
```
For OpenSearch:
```bash
-docker pull opensearchproject/opensearch:3.0.0
+docker pull opensearchproject/opensearch:3.9.0
docker network create unomi
export OPENSEARCH_ADMIN_PASSWORD=enter_your_custom_admin_password_here
docker run -d --name opensearch --net unomi -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_ADMIN_PASSWORD} \
- opensearchproject/opensearch:3.0.0
+ opensearchproject/opensearch:3.9.0
```
For Unomi (with ElasticSearch):
diff --git a/docker/src/main/docker/docker-compose-build-es.yml b/docker/src/main/docker/docker-compose-build-es.yml
index 0aa221209..5cbdc6845 100644
--- a/docker/src/main/docker/docker-compose-build-es.yml
+++ b/docker/src/main/docker/docker-compose-build-es.yml
@@ -17,7 +17,7 @@
version: '2.4'
services:
elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:9.2.1
+ image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2
volumes:
- unomi-3-elasticsearch-data:/usr/share/elasticsearch/data
environment:
diff --git a/docker/src/main/docker/docker-compose-build-os.yml b/docker/src/main/docker/docker-compose-build-os.yml
index fb2d27d27..c46d7c933 100644
--- a/docker/src/main/docker/docker-compose-build-os.yml
+++ b/docker/src/main/docker/docker-compose-build-os.yml
@@ -23,7 +23,7 @@ networks:
services:
opensearch-node1:
- image: opensearchproject/opensearch:3.0.0
+ image: opensearchproject/opensearch:3.9.0
container_name: opensearch-node1
environment:
- cluster.name=opensearch-cluster
@@ -51,7 +51,7 @@ services:
- opensearch-node1
opensearch-node2:
- image: opensearchproject/opensearch:3.0.0
+ image: opensearchproject/opensearch:3.9.0
container_name: opensearch-node2
environment:
- cluster.name=opensearch-cluster
@@ -76,7 +76,7 @@ services:
- opensearch-node2
opensearch-dashboards:
- image: opensearchproject/opensearch-dashboards:3.0.0
+ image: opensearchproject/opensearch-dashboards:3.9.0
container_name: opensearch-dashboards
ports:
- 5601:5601
diff --git a/docker/src/main/docker/docker-compose-cluster.yml b/docker/src/main/docker/docker-compose-cluster.yml
index a088fc082..49ab47538 100644
--- a/docker/src/main/docker/docker-compose-cluster.yml
+++ b/docker/src/main/docker/docker-compose-cluster.yml
@@ -17,7 +17,7 @@
version: '2.4'
services:
elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:9.2.1
+ image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2
volumes:
- unomi-3-elasticsearch-data:/usr/share/elasticsearch/data
environment:
diff --git a/docker/src/main/docker/docker-compose-es.yml b/docker/src/main/docker/docker-compose-es.yml
index db97b6d64..0e518036a 100644
--- a/docker/src/main/docker/docker-compose-es.yml
+++ b/docker/src/main/docker/docker-compose-es.yml
@@ -23,7 +23,7 @@ networks:
services:
elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:9.2.1
+ image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2
container_name: elasticsearch
volumes:
- unomi-3-elasticsearch-data:/usr/share/elasticsearch/data
diff --git a/docker/src/main/docker/docker-compose-os.yml b/docker/src/main/docker/docker-compose-os.yml
index 03abe5263..adc8b3a26 100644
--- a/docker/src/main/docker/docker-compose-os.yml
+++ b/docker/src/main/docker/docker-compose-os.yml
@@ -23,7 +23,7 @@ networks:
services:
opensearch-node1:
- image: opensearchproject/opensearch:3.0.0
+ image: opensearchproject/opensearch:3.9.0
container_name: opensearch-node1
environment:
- cluster.name=opensearch-cluster
@@ -51,7 +51,7 @@ services:
- opensearch-node1
opensearch-node2:
- image: opensearchproject/opensearch:3.0.0
+ image: opensearchproject/opensearch:3.9.0
container_name: opensearch-node2
environment:
- cluster.name=opensearch-cluster
@@ -103,7 +103,7 @@ services:
- unomi
opensearch-dashboards:
- image: opensearchproject/opensearch-dashboards:3.0.0
+ image: opensearchproject/opensearch-dashboards:3.9.0
container_name: opensearch-dashboards
ports:
- 5601:5601
diff --git a/itests/docker-compose-snapshot-analysis.yml b/itests/docker-compose-snapshot-analysis.yml
index 7e9f955e8..742b300e0 100644
--- a/itests/docker-compose-snapshot-analysis.yml
+++ b/itests/docker-compose-snapshot-analysis.yml
@@ -16,7 +16,7 @@
################################################################################
services:
elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3
+ image: docker.elastic.co/elasticsearch/elasticsearch:9.4.2
container_name: es-snapshot-analysis
environment:
- discovery.type=single-node
diff --git a/persistence-elasticsearch/core/pom.xml b/persistence-elasticsearch/core/pom.xml
index ea9eb8fbf..f60982555 100644
--- a/persistence-elasticsearch/core/pom.xml
+++ b/persistence-elasticsearch/core/pom.xml
@@ -104,6 +104,11 @@
<artifactId>jackson-core</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
@@ -156,6 +161,19 @@
<optional>true</optional>
</dependency>
<!-- End of optional ElasticSearch dependencies -->
+ <!-- ES 9.4 rest5-client / httpclient5 5.6+ reference brotli4j at runtime; embed for OSGi -->
+ <dependency>
+ <groupId>com.aayushatharva.brotli4j</groupId>
+ <artifactId>brotli4j</artifactId>
+ <version>1.20.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.github.luben</groupId>
+ <artifactId>zstd-jni</artifactId>
+ <version>1.5.7-4</version>
+ <scope>compile</scope>
+ </dependency>
<dependency>
<groupId>junit</groupId>
@@ -264,6 +282,16 @@
org.conscrypt;resolution:=optional,
org.glassfish.hk2.osgiresourcelocator;resolution:=optional,
org.brotli.dec;resolution:=optional,
+ com.aayushatharva.brotli4j.decoder;resolution:=optional,
+ com.aayushatharva.brotli4j.encoder;resolution:=optional,
+ com.github.luben.zstd;resolution:=optional,
+ io.netty.buffer;resolution:=optional,
+ io.netty.channel;resolution:=optional,
+ io.netty.util;resolution:=optional,
+ javax.xml.datatype;resolution:=optional,
+ javax.xml.namespace;resolution:=optional,
+ javax.xml.transform.dom;resolution:=optional,
+ org.newsclub.net.unix;resolution:=optional,
io.opentelemetry.opentelemetry-api;resolution:=optional,
io.opentelemetry.sdk.autoconfigure;resolution:=optional,
io.opentelemetry.opentelemetry-context;resolution:=optional,
@@ -289,7 +317,10 @@
co.elastic.clients.util;version="${elasticsearch.version}",
co.elastic.clients.elasticsearch._types;version="${elasticsearch.version}"
</Export-Package>
- <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
+ <Embed-Dependency>
+ !groupId=org.apache.logging.log4j;artifactId=*,
+ *;scope=compile|runtime
+ </Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
<Provide-Capability>
osgi.service;objectClass:List<String>="org.apache.unomi.persistence.spi.PersistenceService",
diff --git a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
index efed6c03c..69dfb6474 100644
--- a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
+++ b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
@@ -1073,7 +1073,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
BulkOperation bulkOp = BulkOperation.of(builder -> builder.update(
u -> u.index(updateRequest.index()).id(updateRequest.id()).action(b -> b.doc(updateRequest.doc()))
.ifSeqNo(updateRequest.ifSeqNo()).ifPrimaryTerm(updateRequest.ifPrimaryTerm())
- .routing(updateRequest.routing())));
+ .routing(routingForBulk(updateRequest.routing()))));
bulkIngester.add(bulkOp);
}
logMetadataItemOperation("updated", item);
@@ -1126,7 +1126,7 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
BulkOperation bulkOp = BulkOperation.of(builder -> builder.update(
u -> u.index(updateRequest.index()).id(updateRequest.id()).action(b -> b.doc(updateRequest.doc()))
.ifSeqNo(updateRequest.ifSeqNo()).ifPrimaryTerm(updateRequest.ifPrimaryTerm())
- .routing(updateRequest.routing())));
+ .routing(routingForBulk(updateRequest.routing()))));
operations.add(bulkOp);
});
@@ -3186,4 +3186,14 @@ public class ElasticSearchPersistenceServiceImpl implements PersistenceService,
}
}
+ private static String routingForBulk(List<String> routing) {
+ if (routing == null || routing.isEmpty()) {
+ return null;
+ }
+ if (routing.size() == 1) {
+ return routing.get(0);
+ }
+ return String.join(",", routing);
+ }
+
}
diff --git a/pom.xml b/pom.xml
index 86d0b241b..c1e9b539c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,10 +64,10 @@
<maven.compiler.release>${java.version}</maven.compiler.release>
<karaf.version>4.4.11</karaf.version>
- <elasticsearch.version>9.1.4</elasticsearch.version>
- <elasticsearch.test.version>9.2.1</elasticsearch.test.version>
- <opensearch.version>3.0.0</opensearch.version>
- <opensearch.rest.client.version>3.0.0</opensearch.rest.client.version>
+ <elasticsearch.version>9.4.2</elasticsearch.version>
+ <elasticsearch.test.version>9.4.2</elasticsearch.test.version>
+ <opensearch.version>3.9.0</opensearch.version>
+ <opensearch.rest.client.version>3.9.0</opensearch.rest.client.version>
<httpclient5.version>5.2.1</httpclient5.version>
<aws.sdk.version>2.28.14</aws.sdk.version>
<javax-validation.version>1.1.0.Final</javax-validation.version>