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]

Reply via email to