You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/10/01 02:09:31 UTC

[james-project] 02/03: JAMES-2563 Upgrade to ElasticSearch client 6.4.3

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 066c6d98a1961190f7a3693aa080e1d8eb815625
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Sep 25 13:57:31 2019 +0700

    JAMES-2563 Upgrade to ElasticSearch client 6.4.3
    
    This enables health checks as part of the Rest High level client API,
    avoiding the need of low level hacky queries.
---
 backends-common/elasticsearch/pom.xml              |  2 +-
 .../james/backends/es/ElasticSearchIndexer.java    |  6 ++++--
 .../james/backends/es/IndexCreationFactory.java    |  8 +++++---
 .../james/backends/es/NodeMappingFactory.java      |  6 +++++-
 .../es/ClientProviderImplConnectionTest.java       |  4 +++-
 .../james/backends/es/DockerElasticSearch.java     |  3 +++
 .../james/backends/es/DockerElasticSearchRule.java |  2 +-
 .../backends/es/ElasticSearchIndexerTest.java      | 24 ++++++++++++++--------
 .../backends/es/search/ScrolledSearchTest.java     | 23 +++++++++++++--------
 .../elasticsearch/ElasticSearchQuotaSearcher.java  |  3 ++-
 10 files changed, 55 insertions(+), 26 deletions(-)

diff --git a/backends-common/elasticsearch/pom.xml b/backends-common/elasticsearch/pom.xml
index f2ad34f..ea60bba 100644
--- a/backends-common/elasticsearch/pom.xml
+++ b/backends-common/elasticsearch/pom.xml
@@ -74,7 +74,7 @@
         <dependency>
             <groupId>org.elasticsearch.client</groupId>
             <artifactId>elasticsearch-rest-high-level-client</artifactId>
-            <version>6.3.2</version>
+            <version>6.4.3</version>
             <exclusions>
                 <exclusion>
                     <groupId>commons-logging</groupId>
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
index 1006232..bc586a4 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
@@ -29,6 +29,7 @@ import org.elasticsearch.action.delete.DeleteRequest;
 import org.elasticsearch.action.index.IndexRequest;
 import org.elasticsearch.action.index.IndexResponse;
 import org.elasticsearch.action.update.UpdateRequest;
+import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.ValidationException;
 import org.elasticsearch.common.xcontent.XContentType;
@@ -72,7 +73,8 @@ public class ElasticSearchIndexer {
             new IndexRequest(aliasName.getValue())
                 .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
                 .id(id)
-                .source(content, XContentType.JSON));
+                .source(content, XContentType.JSON),
+            RequestOptions.DEFAULT);
     }
 
     public Optional<BulkResponse> update(List<UpdatedRepresentation> updatedDocumentParts) throws IOException {
@@ -84,7 +86,7 @@ public class ElasticSearchIndexer {
                     NodeMappingFactory.DEFAULT_MAPPING_NAME,
                     updatedDocumentPart.getId())
                 .doc(updatedDocumentPart.getUpdatedDocumentPart(), XContentType.JSON)));
-            return Optional.of(client.bulk(request));
+            return Optional.of(client.bulk(request, RequestOptions.DEFAULT));
         } catch (ValidationException e) {
             LOGGER.warn("Error while updating index", e);
             return Optional.empty();
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java
index 9096fb8..18bfbf8 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/IndexCreationFactory.java
@@ -30,6 +30,7 @@ import org.elasticsearch.ElasticsearchStatusException;
 import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
 import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
 import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
+import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.slf4j.Logger;
@@ -97,13 +98,14 @@ public class IndexCreationFactory {
                         new IndicesAliasesRequest().addAliasAction(
                             new AliasActions(AliasActions.Type.ADD)
                                 .index(indexName.getValue())
-                                .alias(aliasName.getValue())));
+                                .alias(aliasName.getValue())),
+                        RequestOptions.DEFAULT);
             }
         }
 
         private boolean aliasExist(RestHighLevelClient client, AliasName aliasName) throws IOException {
             return client.indices()
-                .existsAlias(new GetAliasesRequest().aliases(aliasName.getValue()));
+                .existsAlias(new GetAliasesRequest().aliases(aliasName.getValue()), RequestOptions.DEFAULT);
         }
 
         private void createIndexIfNeeded(RestHighLevelClient client, IndexName indexName, XContentBuilder settings) throws IOException {
@@ -111,7 +113,7 @@ public class IndexCreationFactory {
                 client.indices()
                     .create(
                         new CreateIndexRequest(indexName.getValue())
-                            .source(settings));
+                            .source(settings), RequestOptions.DEFAULT);
             } catch (ElasticsearchStatusException exception) {
                 if (exception.getMessage().contains(INDEX_ALREADY_EXISTS_EXCEPTION_MESSAGE)) {
                     LOGGER.info("Index [{}] already exist", indexName);
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/NodeMappingFactory.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/NodeMappingFactory.java
index 880d9ad..2dfa375 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/NodeMappingFactory.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/NodeMappingFactory.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 
 import org.apache.http.HttpStatus;
 import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
+import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.ResponseException;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.xcontent.XContentBuilder;
@@ -59,6 +60,8 @@ public class NodeMappingFactory {
         return client;
     }
 
+    // ElasticSearch 6.3.2 does not support field master_timeout that is set up by 6.4.3 REST client when relying on getMapping
+    @SuppressWarnings("deprecation")
     public static boolean mappingAlreadyExist(RestHighLevelClient client, IndexName indexName) throws IOException {
         try {
             client.getLowLevelClient().performRequest("GET", indexName.getValue() + "/_mapping/" + NodeMappingFactory.DEFAULT_MAPPING_NAME);
@@ -75,7 +78,8 @@ public class NodeMappingFactory {
         client.indices().putMapping(
             new PutMappingRequest(indexName.getValue())
                 .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
-                .source(mappingsSources));
+                .source(mappingsSources),
+            RequestOptions.DEFAULT);
     }
 
 }
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
index 3ae7449..042cbfd 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ClientProviderImplConnectionTest.java
@@ -26,6 +26,7 @@ import org.apache.james.util.docker.DockerContainer;
 import org.apache.james.util.docker.Images;
 import org.awaitility.Awaitility;
 import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
@@ -97,7 +98,8 @@ public class ClientProviderImplConnectionTest {
         try (RestHighLevelClient client = clientProvider.get()) {
             client.search(
                 new SearchRequest()
-                    .source(new SearchSourceBuilder().query(QueryBuilders.existsQuery("any"))));
+                    .source(new SearchSourceBuilder().query(QueryBuilders.existsQuery("any"))),
+                RequestOptions.DEFAULT);
             return true;
         } catch (Exception e) {
             LOGGER.info("Caught exception while trying to connect", e);
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearch.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearch.java
index ffff560..9398dae 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearch.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearch.java
@@ -19,6 +19,9 @@
 
 package org.apache.james.backends.es;
 
+import java.time.Duration;
+import java.util.Optional;
+
 import org.apache.http.HttpStatus;
 import org.apache.james.util.Host;
 import org.apache.james.util.docker.DockerContainer;
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearchRule.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearchRule.java
index a7de917..0f0d3d2 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearchRule.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/DockerElasticSearchRule.java
@@ -26,7 +26,7 @@ public class DockerElasticSearchRule extends ExternalResource {
     private final DockerElasticSearch dockerElasticSearch = DockerElasticSearchSingleton.INSTANCE;
 
     @Override
-    protected void before() throws Throwable {
+    protected void before() {
         dockerElasticSearch.start();
     }
 
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
index 08e4e4f..ba4e4f7 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
@@ -31,6 +31,7 @@ import org.awaitility.Duration;
 import org.awaitility.core.ConditionFactory;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
@@ -82,7 +83,8 @@ public class ElasticSearchIndexerTest {
         
         SearchResponse searchResponse = client.search(
             new SearchRequest(INDEX_NAME.getValue())
-                .source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("message", "trying"))));
+                .source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("message", "trying"))),
+            RequestOptions.DEFAULT);
         assertThat(searchResponse.getHits().getTotalHits()).isEqualTo(1);
     }
     
@@ -106,12 +108,14 @@ public class ElasticSearchIndexerTest {
 
         SearchResponse searchResponse = client.search(
             new SearchRequest(INDEX_NAME.getValue())
-                .source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("message", "mastering"))));
+                .source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("message", "mastering"))),
+            RequestOptions.DEFAULT);
         assertThat(searchResponse.getHits().getTotalHits()).isEqualTo(1);
 
         SearchResponse searchResponse2 = client.search(
             new SearchRequest(INDEX_NAME.getValue())
-                .source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("field", "unchanged"))));
+                .source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("field", "unchanged"))),
+            RequestOptions.DEFAULT);
         assertThat(searchResponse2.getHits().getTotalHits()).isEqualTo(1);
     }
 
@@ -153,7 +157,8 @@ public class ElasticSearchIndexerTest {
         CALMLY_AWAIT.atMost(Duration.TEN_SECONDS)
             .until(() -> client.search(
                     new SearchRequest(INDEX_NAME.getValue())
-                        .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())))
+                        .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())),
+                    RequestOptions.DEFAULT)
                 .getHits().getTotalHits() == 0);
     }
 
@@ -180,8 +185,9 @@ public class ElasticSearchIndexerTest {
         
         CALMLY_AWAIT.atMost(Duration.TEN_SECONDS)
             .until(() -> client.search(
-                new SearchRequest(INDEX_NAME.getValue())
-                    .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())))
+                    new SearchRequest(INDEX_NAME.getValue())
+                        .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())),
+                    RequestOptions.DEFAULT)
                 .getHits().getTotalHits() == 1);
     }
     
@@ -198,7 +204,8 @@ public class ElasticSearchIndexerTest {
         
         SearchResponse searchResponse = client.search(
             new SearchRequest(INDEX_NAME.getValue())
-                .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())));
+                .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())),
+            RequestOptions.DEFAULT);
         assertThat(searchResponse.getHits().getTotalHits()).isEqualTo(0);
     }
 
@@ -225,7 +232,8 @@ public class ElasticSearchIndexerTest {
 
         SearchResponse searchResponse = client.search(
             new SearchRequest(INDEX_NAME.getValue())
-                .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())));
+                .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())),
+            RequestOptions.DEFAULT);
         assertThat(searchResponse.getHits().getTotalHits()).isEqualTo(1);
     }
     
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrolledSearchTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrolledSearchTest.java
index 49549af..6cd3e45 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrolledSearchTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/search/ScrolledSearchTest.java
@@ -34,6 +34,7 @@ import org.awaitility.Duration;
 import org.awaitility.core.ConditionFactory;
 import org.elasticsearch.action.index.IndexRequest;
 import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.unit.TimeValue;
 import org.elasticsearch.index.query.QueryBuilders;
@@ -73,7 +74,7 @@ public class ScrolledSearchTest {
     }
 
     @Test
-    public void scrollIterableShouldWorkWhenEmpty() throws Exception {
+    public void scrollIterableShouldWorkWhenEmpty() {
         SearchRequest searchRequest = new SearchRequest(INDEX_NAME.getValue())
             .scroll(TIMEOUT)
             .source(new SearchSourceBuilder()
@@ -90,7 +91,8 @@ public class ScrolledSearchTest {
         client.index(new IndexRequest(INDEX_NAME.getValue())
                 .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
                 .id(id)
-                .source(MESSAGE, "Sample message"));
+                .source(MESSAGE, "Sample message"),
+            RequestOptions.DEFAULT);
 
         elasticSearch.awaitForElasticSearch();
         WAIT_CONDITION.untilAsserted(() -> hasIdsInIndex(client, id));
@@ -112,13 +114,15 @@ public class ScrolledSearchTest {
         client.index(new IndexRequest(INDEX_NAME.getValue())
                 .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
                 .id(id1)
-                .source(MESSAGE, "Sample message"));
+                .source(MESSAGE, "Sample message"),
+            RequestOptions.DEFAULT);
 
         String id2 = "2";
         client.index(new IndexRequest(INDEX_NAME.getValue())
                 .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
                 .id(id2)
-                .source(MESSAGE, "Sample message"));
+                .source(MESSAGE, "Sample message"),
+            RequestOptions.DEFAULT);
 
         elasticSearch.awaitForElasticSearch();
         WAIT_CONDITION.untilAsserted(() -> hasIdsInIndex(client, id1, id2));
@@ -140,19 +144,22 @@ public class ScrolledSearchTest {
         client.index(new IndexRequest(INDEX_NAME.getValue())
                 .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
                 .id(id1)
-                .source(MESSAGE, "Sample message"));
+                .source(MESSAGE, "Sample message"),
+            RequestOptions.DEFAULT);
 
         String id2 = "2";
         client.index(new IndexRequest(INDEX_NAME.getValue())
                 .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
                 .id(id2)
-                .source(MESSAGE, "Sample message"));
+                .source(MESSAGE, "Sample message"),
+            RequestOptions.DEFAULT);
 
         String id3 = "3";
         client.index(new IndexRequest(INDEX_NAME.getValue())
                 .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
                 .id(id3)
-                .source(MESSAGE, "Sample message"));
+                .source(MESSAGE, "Sample message"),
+            RequestOptions.DEFAULT);
 
         elasticSearch.awaitForElasticSearch();
         WAIT_CONDITION.untilAsserted(() -> hasIdsInIndex(client, id1, id2, id3));
@@ -174,7 +181,7 @@ public class ScrolledSearchTest {
             .source(new SearchSourceBuilder()
                 .query(QueryBuilders.matchAllQuery()));
 
-        SearchHit[] hits = client.search(searchRequest)
+        SearchHit[] hits = client.search(searchRequest, RequestOptions.DEFAULT)
             .getHits()
             .getHits();
 
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
index 7c02032..1a7e314 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearcher.java
@@ -34,6 +34,7 @@ import org.apache.james.core.User;
 import org.apache.james.quota.search.QuotaQuery;
 import org.apache.james.quota.search.QuotaSearcher;
 import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.unit.TimeValue;
 import org.elasticsearch.search.SearchHit;
@@ -88,7 +89,7 @@ public class ElasticSearchQuotaSearcher implements QuotaSearcher {
             .types(NodeMappingFactory.DEFAULT_MAPPING_NAME)
             .source(searchSourceBuilder);
 
-        return Arrays.stream(client.search(searchRequest)
+        return Arrays.stream(client.search(searchRequest, RequestOptions.DEFAULT)
             .getHits()
             .getHits());
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org