Repository: james-project Updated Branches: refs/heads/master 3197701ca -> 15a53c1ab
MAILBOX-314 Avoid ES code to fail after mapping update upon start Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/15a53c1a Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/15a53c1a Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/15a53c1a Branch: refs/heads/master Commit: 15a53c1abd7a6037fbf7f911b81f7f4eaaadca54 Parents: 3197701 Author: benwa <[email protected]> Authored: Wed Mar 28 12:06:12 2018 +0700 Committer: benwa <[email protected]> Committed: Wed Mar 28 12:06:12 2018 +0700 ---------------------------------------------------------------------- .../james/backends/es/NodeMappingFactory.java | 20 +++++++++++++- .../backends/es/NodeMappingFactoryTest.java | 29 ++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/15a53c1a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/NodeMappingFactory.java ---------------------------------------------------------------------- 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 9c48526..e72ac1d 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 @@ -19,6 +19,7 @@ package org.apache.james.backends.es; +import org.apache.james.util.streams.Iterators; import org.elasticsearch.client.Client; import org.elasticsearch.common.xcontent.XContentBuilder; @@ -43,6 +44,24 @@ public class NodeMappingFactory { public static final String IGNORE_ABOVE = "ignore_above"; public static Client applyMapping(Client client, IndexName indexName, TypeName typeName, XContentBuilder mappingsSources) { + if (!mappingAlreadyExist(client, indexName, typeName)) { + createMapping(client, indexName, typeName, mappingsSources); + } + return client; + } + + public static boolean mappingAlreadyExist(Client client, IndexName indexName, TypeName typeName) { + return Iterators.toStream(client.admin() + .indices() + .prepareGetMappings(indexName.getValue()) + .execute() + .actionGet() + .getMappings() + .valuesIt()) + .anyMatch(mapping -> mapping.keys().contains(typeName.getValue())); + } + + public static void createMapping(Client client, IndexName indexName, TypeName typeName, XContentBuilder mappingsSources) { client.admin() .indices() .preparePutMapping(indexName.getValue()) @@ -50,7 +69,6 @@ public class NodeMappingFactory { .setSource(mappingsSources) .execute() .actionGet(); - return client; } } http://git-wip-us.apache.org/repos/asf/james-project/blob/15a53c1a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java ---------------------------------------------------------------------- diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java index 42a403f..da93d0e 100644 --- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java +++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/NodeMappingFactoryTest.java @@ -64,6 +64,21 @@ public class NodeMappingFactoryTest { getMappingsSources()); } + @Test + public void applyMappingShouldNotThrowWhenIndexerChanges() throws Exception { + NodeMappingFactory.applyMapping(clientProvider.get(), + INDEX_NAME, + TYPE_NAME, + getMappingsSources()); + + embeddedElasticSearch.awaitForElasticSearch(); + + NodeMappingFactory.applyMapping(clientProvider.get(), + INDEX_NAME, + TYPE_NAME, + getOtherMappingsSources()); + } + private XContentBuilder getMappingsSources() throws Exception { return jsonBuilder() .startObject() @@ -76,4 +91,18 @@ public class NodeMappingFactoryTest { .endObject() .endObject(); } + + private XContentBuilder getOtherMappingsSources() throws Exception { + return jsonBuilder() + .startObject() + .startObject(TYPE_NAME.getValue()) + .startObject(NodeMappingFactory.PROPERTIES) + .startObject(MESSAGE) + .field(NodeMappingFactory.TYPE, NodeMappingFactory.STRING) + .field(NodeMappingFactory.INDEX, NodeMappingFactory.NOT_ANALYZED) + .endObject() + .endObject() + .endObject() + .endObject(); + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
