JAMES-1981 Don't fail when indexing fails
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ec191b44 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ec191b44 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ec191b44 Branch: refs/heads/master Commit: ec191b441dfe83c3409c0a4052fdf777422d0442 Parents: a3ba230 Author: Antoine Duprat <[email protected]> Authored: Wed Mar 29 11:53:34 2017 +0200 Committer: benwa <[email protected]> Committed: Thu Mar 30 08:21:00 2017 +0700 ---------------------------------------------------------------------- .../james/backends/es/ElasticSearchIndexer.java | 48 ++++++++++++-------- .../backends/es/ElasticSearchIndexerTest.java | 11 ++++- ...icSearchListeningMessageSearchIndexTest.java | 5 +- 3 files changed, 43 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/ec191b44/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java ---------------------------------------------------------------------- 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 55bf479..658484b 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 @@ -20,6 +20,7 @@ package org.apache.james.backends.es; import java.util.List; import java.util.Objects; +import java.util.Optional; import javax.inject.Inject; @@ -28,6 +29,7 @@ import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.Client; import org.elasticsearch.common.Strings; +import org.elasticsearch.common.ValidationException; import org.elasticsearch.index.query.QueryBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,26 +105,36 @@ public class ElasticSearchIndexer { .get(); } - public BulkResponse updateMessages(List<UpdatedRepresentation> updatedDocumentParts) { - Preconditions.checkNotNull(updatedDocumentParts); - BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); - updatedDocumentParts.forEach(updatedDocumentPart -> bulkRequestBuilder.add( - client.prepareUpdate( - indexName.getValue(), - typeName.getValue(), - updatedDocumentPart.getId()) - .setDoc(updatedDocumentPart.getUpdatedDocumentPart()))); - return bulkRequestBuilder.get(); + public Optional<BulkResponse> updateMessages(List<UpdatedRepresentation> updatedDocumentParts) { + try { + Preconditions.checkNotNull(updatedDocumentParts); + BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); + updatedDocumentParts.forEach(updatedDocumentPart -> bulkRequestBuilder.add( + client.prepareUpdate( + indexName.getValue(), + typeName.getValue(), + updatedDocumentPart.getId()) + .setDoc(updatedDocumentPart.getUpdatedDocumentPart()))); + return Optional.of(bulkRequestBuilder.get()); + } catch (ValidationException e) { + LOGGER.warn("Error while updating index", e); + return Optional.empty(); + } } - public BulkResponse deleteMessages(List<String> ids) { - BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); - ids.forEach(id -> bulkRequestBuilder.add( - client.prepareDelete( - indexName.getValue(), - typeName.getValue(), - id))); - return bulkRequestBuilder.get(); + public Optional<BulkResponse> deleteMessages(List<String> ids) { + try { + BulkRequestBuilder bulkRequestBuilder = client.prepareBulk(); + ids.forEach(id -> bulkRequestBuilder.add( + client.prepareDelete( + indexName.getValue(), + typeName.getValue(), + id))); + return Optional.of(bulkRequestBuilder.get()); + } catch (ValidationException e) { + LOGGER.warn("Error while deleting index", e); + return Optional.empty(); + } } public void deleteAllMatchingQuery(QueryBuilder queryBuilder) { http://git-wip-us.apache.org/repos/asf/james-project/blob/ec191b44/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java ---------------------------------------------------------------------- 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 ec9582e..6855622 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 @@ -239,5 +239,14 @@ public class ElasticSearchIndexerTest { assertThat(searchResponse.getHits().getTotalHits()).isEqualTo(1); } } - + + @Test + public void updateMessagesShouldNotThrowWhenEmptyList() throws Exception { + testee.updateMessages(Lists.newArrayList()); + } + + @Test + public void deleteMessagesShouldNotThrowWhenEmptyList() throws Exception { + testee.deleteMessages(Lists.newArrayList()); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/ec191b44/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java ---------------------------------------------------------------------- diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java index 28323b2..91611bd 100644 --- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java +++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.when; import java.io.IOException; import java.util.List; +import java.util.Optional; import javax.mail.Flags; @@ -169,7 +170,7 @@ public class ElasticSearchListeningMessageSearchIndexTest { BulkResponse expectedBulkResponse = mock(BulkResponse.class); when(indexer.deleteMessages(any(List.class))) - .thenReturn(expectedBulkResponse); + .thenReturn(Optional.of(expectedBulkResponse)); //When testee.delete(session, mailbox, Lists.newArrayList(MESSAGE_UID)); @@ -192,7 +193,7 @@ public class ElasticSearchListeningMessageSearchIndexTest { BulkResponse expectedBulkResponse = mock(BulkResponse.class); when(indexer.deleteMessages(any(List.class))) - .thenReturn(expectedBulkResponse); + .thenReturn(Optional.of(expectedBulkResponse)); //When testee.delete(session, mailbox, Lists.newArrayList(MESSAGE_UID, messageId2, messageId3, messageId4, messageId5)); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
