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