You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/03/15 09:53:57 UTC

[james-project] 09/32: JAMES-3492 Mapping should be created at the same time as index

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 55098c478619ad3cd18fa599f03afec1e7210962
Author: LanKhuat <dl...@linagora.com>
AuthorDate: Wed Mar 3 15:47:38 2021 +0700

    JAMES-3492 Mapping should be created at the same time as index
---
 .../james/backends/es/v7/IndexCreationFactory.java | 24 ++++++++++++++--------
 .../james/backends/es/v7/NodeMappingFactory.java   | 19 -----------------
 .../backends/es/v7/NodeMappingFactoryAuthTest.java |  6 +-----
 .../backends/es/v7/NodeMappingFactoryTest.java     |  7 ++-----
 .../backends/es/v7/search/ScrolledSearchTest.java  |  1 -
 .../elasticsearch/v7/MailboxIndexCreationUtil.java | 10 +++------
 .../v7/QuotaSearchIndexCreationUtil.java           | 17 ++++++---------
 7 files changed, 27 insertions(+), 57 deletions(-)

diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexCreationFactory.java b/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexCreationFactory.java
index 3ea5f6f..fcac158 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexCreationFactory.java
+++ b/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexCreationFactory.java
@@ -23,14 +23,15 @@ import static org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest
 import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
+import java.util.Optional;
 
 import javax.inject.Inject;
 
 import org.elasticsearch.ElasticsearchStatusException;
 import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
 import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
-import org.elasticsearch.client.indices.CreateIndexRequest;
 import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.indices.CreateIndexRequest;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -63,7 +64,11 @@ public class IndexCreationFactory {
         }
 
         public ReactorElasticSearchClient createIndexAndAliases(ReactorElasticSearchClient client) {
-            return new IndexCreationPerformer(nbShards, nbReplica, waitForActiveShards, indexName, aliases.build()).createIndexAndAliases(client);
+            return new IndexCreationPerformer(nbShards, nbReplica, waitForActiveShards, indexName, aliases.build()).createIndexAndAliases(client, Optional.empty());
+        }
+
+        public ReactorElasticSearchClient createIndexAndAliases(ReactorElasticSearchClient client, XContentBuilder mappingContent) {
+            return new IndexCreationPerformer(nbShards, nbReplica, waitForActiveShards, indexName, aliases.build()).createIndexAndAliases(client, Optional.of(mappingContent));
         }
     }
 
@@ -82,10 +87,10 @@ public class IndexCreationFactory {
             this.aliases = aliases;
         }
 
-        public ReactorElasticSearchClient createIndexAndAliases(ReactorElasticSearchClient client) {
+        public ReactorElasticSearchClient createIndexAndAliases(ReactorElasticSearchClient client, Optional<XContentBuilder> mappingContent) {
             Preconditions.checkNotNull(indexName);
             try {
-                createIndexIfNeeded(client, indexName, generateSetting(nbShards, nbReplica, waitForActiveShards));
+                createIndexIfNeeded(client, indexName, generateSetting(nbShards, nbReplica, waitForActiveShards), mappingContent);
                 aliases.forEach(Throwing.<AliasName>consumer(alias -> createAliasIfNeeded(client, indexName, alias))
                     .sneakyThrow());
             } catch (IOException e) {
@@ -111,12 +116,13 @@ public class IndexCreationFactory {
                 .existsAlias(new GetAliasesRequest().aliases(aliasName.getValue()), RequestOptions.DEFAULT);
         }
 
-        private void createIndexIfNeeded(ReactorElasticSearchClient client, IndexName indexName, XContentBuilder settings) throws IOException {
+        private void createIndexIfNeeded(ReactorElasticSearchClient client, IndexName indexName, XContentBuilder settings, Optional<XContentBuilder> mappingContent) throws IOException {
             try {
-                client.indices()
-                    .create(
-                        new CreateIndexRequest(indexName.getValue())
-                            .source(settings), RequestOptions.DEFAULT);
+                CreateIndexRequest request = new CreateIndexRequest(indexName.getValue()).source(settings);
+                mappingContent.ifPresent(request::mapping);
+                client.indices().create(
+                    request,
+                    RequestOptions.DEFAULT);
             } catch (ElasticsearchStatusException exception) {
                 if (exception.getMessage().contains(INDEX_ALREADY_EXISTS_EXCEPTION_MESSAGE)) {
                     LOGGER.info("Index [{}] already exists", indexName.getValue());
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/NodeMappingFactory.java b/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/NodeMappingFactory.java
index 6f6b14a..2f526d8 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/NodeMappingFactory.java
+++ b/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/NodeMappingFactory.java
@@ -52,28 +52,9 @@ public class NodeMappingFactory {
 
     public static ReactorElasticSearchClient applyMapping(ReactorElasticSearchClient client, IndexName indexName, XContentBuilder mappingsSources) throws IOException {
         createMapping(client, indexName, mappingsSources);
-
-        /*if (!mappingAlreadyExist(client, indexName)) {
-            createMapping(client, indexName, mappingsSources);
-        }*/
         return client;
     }
 
-    //TODO: since ElasticSearch version 7 this check does not work anymore. Find another way to check whether mapping exists or not
-    // 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(ReactorElasticSearchClient client, IndexName indexName) throws IOException {
-        try {
-            client.getLowLevelClient().performRequest(new Request("GET", "/" + indexName.getValue() + "/_mapping/"));
-            return true;
-        } catch (ResponseException e) {
-            if (e.getResponse().getStatusLine().getStatusCode() != HttpStatus.SC_NOT_FOUND) {
-                throw e;
-            }
-        }
-        return false;
-    }*/
-
     public static void createMapping(ReactorElasticSearchClient client, IndexName indexName, XContentBuilder mappingsSources) throws IOException {
         client.indices().putMapping(
             new PutMappingRequest(indexName.getValue())
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/NodeMappingFactoryAuthTest.java b/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/NodeMappingFactoryAuthTest.java
index c425b13..eb98550 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/NodeMappingFactoryAuthTest.java
+++ b/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/NodeMappingFactoryAuthTest.java
@@ -28,7 +28,6 @@ import java.util.Optional;
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
@@ -58,10 +57,7 @@ class NodeMappingFactoryAuthTest {
         new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
             .useIndex(INDEX_NAME)
             .addAlias(ALIAS_NAME)
-            .createIndexAndAliases(client);
-        NodeMappingFactory.applyMapping(client,
-            INDEX_NAME,
-            getMappingsSources());
+            .createIndexAndAliasesWithMapping(client, Optional.of(getMappingsSources()));
     }
 
     @AfterEach
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/NodeMappingFactoryTest.java b/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/NodeMappingFactoryTest.java
index 9744324..ade2309 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/NodeMappingFactoryTest.java
+++ b/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/NodeMappingFactoryTest.java
@@ -23,11 +23,11 @@ import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
+import java.util.Optional;
 
 import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
@@ -46,10 +46,7 @@ class NodeMappingFactoryTest {
         new IndexCreationFactory(ElasticSearchConfiguration.DEFAULT_CONFIGURATION)
             .useIndex(INDEX_NAME)
             .addAlias(ALIAS_NAME)
-            .createIndexAndAliases(client);
-        NodeMappingFactory.applyMapping(client,
-            INDEX_NAME,
-            getMappingsSources());
+            .createIndexAndAliasesWithMapping(client, Optional.of(getMappingsSources()));
     }
 
     @AfterEach
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/search/ScrolledSearchTest.java b/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/search/ScrolledSearchTest.java
index 29499bb..9249c38 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/search/ScrolledSearchTest.java
+++ b/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/search/ScrolledSearchTest.java
@@ -28,7 +28,6 @@ import org.apache.james.backends.es.v7.DockerElasticSearchExtension;
 import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
 import org.apache.james.backends.es.v7.IndexCreationFactory;
 import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.NodeMappingFactory;
 import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
 import org.apache.james.backends.es.v7.ReadAliasName;
 import org.awaitility.Durations;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIndexCreationUtil.java b/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIndexCreationUtil.java
index 664185d..0ac100c 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIndexCreationUtil.java
+++ b/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIndexCreationUtil.java
@@ -24,7 +24,6 @@ import java.io.IOException;
 import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
 import org.apache.james.backends.es.v7.IndexCreationFactory;
 import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.NodeMappingFactory;
 import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
 import org.apache.james.backends.es.v7.ReadAliasName;
 import org.apache.james.backends.es.v7.WriteAliasName;
@@ -35,15 +34,12 @@ public class MailboxIndexCreationUtil {
                                                            ReadAliasName readAlias,
                                                            WriteAliasName writeAlias,
                                                            IndexName indexName,
-                                                           ElasticSearchConfiguration configuration) throws IOException {
-        return NodeMappingFactory.applyMapping(
-            new IndexCreationFactory(configuration)
+                                                           ElasticSearchConfiguration configuration) {
+            return new IndexCreationFactory(configuration)
                 .useIndex(indexName)
                 .addAlias(readAlias)
                 .addAlias(writeAlias)
-                .createIndexAndAliases(client),
-            indexName,
-            MailboxMappingFactory.getMappingContent());
+                .createIndexAndAliases(client, MailboxMappingFactory.getMappingContent());
     }
 
     public static ReactorElasticSearchClient prepareDefaultClient(ReactorElasticSearchClient client, ElasticSearchConfiguration configuration) throws IOException {
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaSearchIndexCreationUtil.java b/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaSearchIndexCreationUtil.java
index 88e2319..33d72bc 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaSearchIndexCreationUtil.java
+++ b/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaSearchIndexCreationUtil.java
@@ -25,7 +25,6 @@ import org.apache.james.backends.es.v7.AliasName;
 import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
 import org.apache.james.backends.es.v7.IndexCreationFactory;
 import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.NodeMappingFactory;
 import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
 
 public class QuotaSearchIndexCreationUtil {
@@ -34,16 +33,12 @@ public class QuotaSearchIndexCreationUtil {
                                        AliasName readAlias,
                                        AliasName writeAlias,
                                        IndexName indexName,
-                                       ElasticSearchConfiguration configuration) throws IOException {
-
-        return NodeMappingFactory.applyMapping(
-            new IndexCreationFactory(configuration)
-                .useIndex(indexName)
-                .addAlias(readAlias)
-                .addAlias(writeAlias)
-                .createIndexAndAliases(client),
-            indexName,
-            QuotaRatioMappingFactory.getMappingContent());
+                                       ElasticSearchConfiguration configuration) {
+        return new IndexCreationFactory(configuration)
+            .useIndex(indexName)
+            .addAlias(readAlias)
+            .addAlias(writeAlias)
+            .createIndexAndAliases(client, QuotaRatioMappingFactory.getMappingContent());
     }
 
     public static ReactorElasticSearchClient prepareDefaultClient(ReactorElasticSearchClient client, ElasticSearchConfiguration configuration) throws IOException {


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