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 2020/06/21 09:16:26 UTC

[james-project] 03/12: JAMES-3202 Add get document action to ElasticSearchIndexer

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 fae3ecee64473fdd77f12e20e92935c7db62a093
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Tue Jun 9 15:37:43 2020 +0700

    JAMES-3202 Add get document action to ElasticSearchIndexer
---
 .../james/backends/es/ElasticSearchIndexer.java    | 14 ++++++++++++
 .../backends/es/ReactorElasticSearchClient.java    |  6 +++++
 .../backends/es/ElasticSearchIndexerTest.java      | 26 ++++++++++++++++++++++
 3 files changed, 46 insertions(+)

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 3b5c8a2..049dcd5 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
@@ -24,6 +24,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.elasticsearch.action.bulk.BulkRequest;
 import org.elasticsearch.action.bulk.BulkResponse;
 import org.elasticsearch.action.delete.DeleteRequest;
+import org.elasticsearch.action.get.GetRequest;
+import org.elasticsearch.action.get.GetResponse;
 import org.elasticsearch.action.index.IndexRequest;
 import org.elasticsearch.action.index.IndexResponse;
 import org.elasticsearch.action.update.UpdateRequest;
@@ -120,4 +122,16 @@ public class ElasticSearchIndexer {
     private void checkArgument(String content) {
         Preconditions.checkArgument(content != null, "content should be provided");
     }
+
+    public Mono<GetResponse> get(DocumentId id, RoutingKey routingKey) {
+        return Mono.fromRunnable(() -> {
+                Preconditions.checkNotNull(id);
+                Preconditions.checkNotNull(routingKey);
+            })
+            .then(client.get(new GetRequest(aliasName.getValue())
+                    .type(NodeMappingFactory.DEFAULT_MAPPING_NAME)
+                    .id(id.asString())
+                    .routing(routingKey.asString()),
+                RequestOptions.DEFAULT));
+    }
 }
diff --git a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java
index 1636df6..fc6d26e 100644
--- a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java
+++ b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ReactorElasticSearchClient.java
@@ -37,6 +37,8 @@ import org.elasticsearch.action.explain.ExplainRequest;
 import org.elasticsearch.action.explain.ExplainResponse;
 import org.elasticsearch.action.fieldcaps.FieldCapabilitiesRequest;
 import org.elasticsearch.action.fieldcaps.FieldCapabilitiesResponse;
+import org.elasticsearch.action.get.GetRequest;
+import org.elasticsearch.action.get.GetResponse;
 import org.elasticsearch.action.index.IndexRequest;
 import org.elasticsearch.action.index.IndexResponse;
 import org.elasticsearch.action.main.MainResponse;
@@ -147,6 +149,10 @@ public class ReactorElasticSearchClient implements AutoCloseable {
         return toReactor(listener -> client.searchTemplateAsync(searchTemplateRequest, options, listener));
     }
 
+    public Mono<GetResponse> get(GetRequest getRequest, RequestOptions options) {
+        return toReactor(listener -> client.getAsync(getRequest, options, listener));
+    }
+
     @Override
     public void close() throws IOException {
         client.close();
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 ac320ca..f0c9f9d 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
@@ -30,6 +30,7 @@ import java.io.IOException;
 import org.awaitility.Awaitility;
 import org.awaitility.Duration;
 import org.awaitility.core.ConditionFactory;
+import org.elasticsearch.action.get.GetResponse;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
@@ -264,4 +265,29 @@ class ElasticSearchIndexerTest {
         assertThatCode(() -> testee.delete(ImmutableList.of(), ROUTING).block())
             .doesNotThrowAnyException();
     }
+
+    @Test
+    void getShouldWork() {
+        DocumentId documentId = DocumentId.fromString("1");
+        String content = "{\"message\":\"trying out Elasticsearch\"}";
+
+        testee.index(documentId, content, useDocumentId(documentId)).block();
+        elasticSearch.awaitForElasticSearch();
+
+        GetResponse getResponse = testee.get(documentId, useDocumentId(documentId)).block();
+
+        assertThat(getResponse.getSourceAsString()).isEqualTo(content);
+    }
+
+    @Test
+    void getShouldThrowWhenIdIsNull() {
+        assertThatThrownBy(() -> testee.get(null, ROUTING).block())
+            .isInstanceOf(NullPointerException.class);
+    }
+
+    @Test
+    void getShouldThrowWhenRoutingKeyIsNull() {
+        assertThatThrownBy(() -> testee.get(DOCUMENT_ID, null).block())
+            .isInstanceOf(NullPointerException.class);
+    }
 }


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