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 2019/05/30 07:22:11 UTC

[james-project] branch master updated (153045c -> 14051e0)

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git.


    from 153045c  Merge remote-tracking branch 'mine/imap-reader-disconnect'
     new eb9d8d3  Checkstyle fixes
     new 6a1f838  Fix Eclipse warnings
     new 5649fbc  JAMES-2766 Replace ES old version in documents
     new 39db516  JAMES-2766 --port is not an option of docker run (-p is valid)
     new 5f6ab60  MAILBOX-351 Write a PreviousFailuresReIndexationTask
     new 2fd5f4c  MAILBOX-351 Interface for task information providing failures details
     new 15910fa  MAILBOX-351 Move ReIndexing failures to the API
     new 118418e  MAILBOX-351 Factorize ReIndexing tasks details
     new 869e0e9  MAILBOX-351 ReIndexer should allow me to reIndex previous tasks failures
     new 3b040ca  MAILBOX-351 WebAdmin route to  allow me to reIndex previous tasks failures
     new f98fb0b  MAILBOX-351 WebAdmin documentation for fixing a reIndexing
     new a5214fd  MAILBOX-351 Test ReIndexing tasks information upon failures
     new 7643548  MAILBOX-351 ReIndexer should allow me to reIndex previous tasks failures
     new 547d01f  MAILBOX-351 Fixing a typo in IndexingDetailInformation
     new 520cc5c  MAILBOX-351 MemoryTaskManagerWorker can rely on Task.Status::isFinished
     new a532512  JAMES-2763 Indexes creation should be done in ConfigurationPerformers
     new 8c6f24c  JAMES-2763 ElasticSearchStartUpCheck impl
     new 28d8aab  JAMES-2763 Split ES Client module in ES mailbox module
     new 14051e0  JAMES-2766 ElasticSearch 6 upgrade: Document port configuration changes

The 19 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 JenkinsfileStressTests                             |   2 +-
 README.adoc                                        |   4 +-
 .../cassandra/components/CassandraTableTest.java   |   1 -
 .../es/ElasticSearchConfigurationTest.java         |   8 +-
 .../james/backends/es/NodeMappingFactoryTest.java  |   2 +-
 .../etc/james/templates/elasticsearch.properties   |   2 +-
 dockerfiles/run/docker-compose.yml                 |   4 +-
 .../destination/conf/elasticsearch.properties      |   2 +-
 .../destination/conf/elasticsearch.properties      |   2 +-
 .../destination/conf/elasticsearch.properties      |   2 +-
 .../destination/conf/elasticsearch.properties      |   2 +-
 ...Indexer.java => IndexingDetailInformation.java} |   9 +-
 .../apache/james/mailbox/indexer/ReIndexer.java    |   2 +
 .../indexer/ReIndexingExecutionFailures.java       |  22 +-
 .../apache/james/mailbox/MailboxManagerTest.java   |   2 +-
 .../mailbox/backup/ZipMailArchiveRestorer.java     |   3 +
 .../backup/zip/ZippedMailAccountIterator.java      |   1 -
 .../mailbox/backup/DefaultMailboxBackupTest.java   |   4 -
 .../apache/james/mailbox/backup/ZipAssertTest.java |   3 +-
 .../search/ElasticSearchSearcher.java              |   2 +-
 .../DomainUserMaildirMailboxManagerTest.java       |   4 +-
 .../maildir/FullUserMaildirMailboxManagerTest.java |   4 +-
 ...gTask.java => ErrorRecoveryIndexationTask.java} |  46 +--
 .../mailbox/tools/indexer/FullReindexingTask.java  |  24 +-
 .../mailbox/tools/indexer/ReIndexerImpl.java       |   6 +
 .../mailbox/tools/indexer/ReIndexerPerformer.java  |  21 ++
 .../mailbox/tools/indexer/ReprocessingContext.java |   1 +
 .../indexer/ReprocessingContextInformation.java    |  48 ++-
 ...> SerializableReIndexingExecutionFailures.java} |  25 +-
 .../tools/indexer/SingleMailboxReindexingTask.java |  18 +-
 .../mailbox/tools/indexer/ThrowsReIndexer.java     |   6 +
 .../mailbox/tools/indexer/UserReindexingTask.java  |  13 +-
 ...rializableReIndexingExecutionFailuresTest.java} |   7 +-
 .../james/metrics/tests/RecordingMetric.java       |   4 +-
 .../metrics/tests/RecordingMetricFactory.java      |   2 +-
 .../james/JamesDeploymentValidationTest.java       |   1 -
 .../james/host/docker/CliProvisioningAPI.java      |   6 +-
 .../james/blob/objectstorage/AESPayloadCodec.java  |   3 -
 .../blob/objectstorage/ObjectStorageBlobsDAO.java  |   1 -
 .../org/apache/james/CassandraJamesServerMain.java |   2 +
 .../mailbox/ElasticSearchClientModule.java}        |  60 ++--
 .../mailbox/ElasticSearchMailboxModule.java        | 110 +++---
 .../mailbox/ElasticSearchQuotaSearcherModule.java  |  63 +++-
 .../modules/mailbox/ElasticSearchStartUpCheck.java |  86 +++++
 ...esWithNonCompatibleElasticSearchServerTest.java |  14 +-
 .../james/GuiceJamesServerStartUpCheckTest.java    |   1 +
 .../java/org/apache/james/jmap/JMAPModuleTest.java |   1 +
 server/container/lifecycle-api/pom.xml             |  10 +
 .../apache/james/lifecycle/api/StartUpCheck.java   |  19 +
 .../james/lifecycle/api/StartUpCheckTest.java      |  17 +-
 .../apache/james/smtp/SmtpRandomStoringTest.java   |   6 +-
 .../james/transport/mailets/AliasMappingTest.java  |   1 -
 .../integration/DeletedMessagesVaultTest.java      |  12 +-
 .../james/jmap/methods/GetMailboxesMethodTest.java |   1 +
 .../james/jmap/model/MailboxFactoryTest.java       |   2 -
 .../EventDeadLettersIntegrationTest.java           |   4 +-
 .../org/apache/james/webadmin/dto/TaskIdDto.java   |   2 +-
 .../apache/james/webadmin/routes/TasksRoutes.java  |   3 +-
 .../apache/james/webadmin/dto/TaskIdDtoTest.java   |   4 +-
 .../james/webadmin/routes/TasksRoutesTest.java     |   5 +-
 .../apache/james/webadmin/routes/GroupsRoutes.java |   5 +-
 .../james/webadmin/routes/DomainsRoutesTest.java   |   2 +-
 .../james/webadmin/routes/GroupsRoutesTest.java    |   4 +-
 .../james/webadmin/routes/ReindexingRoutes.java    |  76 +++-
 .../service/PreviousReIndexingService.java         |  60 ++++
 .../webadmin/routes/ReindexingRoutesTest.java      | 387 ++++++++++++++++++++-
 .../apache/james/task/MemoryTaskManagerWorker.java |   4 +-
 .../main/java/org/apache/james/task/TaskId.java    |  17 +-
 .../java/org/apache/james/task/TaskManager.java    |  22 +-
 .../apache/james/task/MemoryTaskManagerTest.java   |   1 +
 .../james/task/MemoryTaskManagerWorkerTest.java    |   1 +
 src/homepage/howTo/imap-server.html                |   4 +-
 .../install/guice-cassandra-rabbitmq-swift.md      |  14 +-
 .../markdown/server/install/guice-cassandra.md     |   8 +-
 src/site/markdown/server/manage-webadmin.md        |  66 +++-
 src/site/xdoc/server/config-elasticsearch.xml      |   2 +-
 src/site/xdoc/server/quick-start-cassandra.xml     |   2 +-
 .../java/org/apache/james/linshare/Linshare.java   |  19 +-
 .../james/linshare/client/LinshareAPITest.java     |   3 +-
 upgrade-instructions.md                            |   9 +
 80 files changed, 1093 insertions(+), 355 deletions(-)
 copy mailbox/api/src/main/java/org/apache/james/mailbox/indexer/{MessageIdReIndexer.java => IndexingDetailInformation.java} (87%)
 copy mailbox/{tools/indexer/src/main/java/org/apache/mailbox/tools => api/src/main/java/org/apache/james/mailbox}/indexer/ReIndexingExecutionFailures.java (75%)
 copy mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/{FullReindexingTask.java => ErrorRecoveryIndexationTask.java} (57%)
 copy backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTask.java => mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java (53%)
 rename mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/{ReIndexingExecutionFailures.java => SerializableReIndexingExecutionFailures.java} (63%)
 rename mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/{ReIndexingExecutionFailuresTest.java => SerializableReIndexingExecutionFailuresTest.java} (90%)
 copy server/container/guice/cassandra-guice/src/{test/java/org/apache/james/modules/TestDockerElasticSearchModule.java => main/java/org/apache/james/modules/mailbox/ElasticSearchClientModule.java} (51%)
 create mode 100644 server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchStartUpCheck.java
 copy mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/commands/DetectThresholdCrossingTest.java => server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/StartUpCheckTest.java (80%)
 create mode 100644 server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java


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


[james-project] 05/19: MAILBOX-351 Write a PreviousFailuresReIndexationTask

Posted by bt...@apache.org.
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 5f6ab604173538a80b6ce5015a3756d8143383df
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 23 11:44:56 2019 +0700

    MAILBOX-351 Write a PreviousFailuresReIndexationTask
    
    Taking the list of previous indexing failures, this task will attempt to
    reIndex all of the aforementioned messages.
---
 .../indexer/PreviousFailuresReIndexationTask.java  | 76 ++++++++++++++++++++++
 .../mailbox/tools/indexer/ReIndexerPerformer.java  | 20 ++++++
 .../tools/indexer/ReIndexingExecutionFailures.java | 24 +++++--
 3 files changed, 116 insertions(+), 4 deletions(-)

diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
new file mode 100644
index 0000000..ceed5cd
--- /dev/null
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
@@ -0,0 +1,76 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.mailbox.tools.indexer;
+
+import java.util.Optional;
+
+import org.apache.james.task.Task;
+import org.apache.james.task.TaskExecutionDetails;
+
+public class PreviousFailuresReIndexationTask implements Task {
+    public static final String PREVIOUS_FAILURES_INDEXING = "ReIndexPreviousFailures";
+
+    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+        private final ReprocessingContext reprocessingContext;
+
+        AdditionalInformation(ReprocessingContext reprocessingContext) {
+            this.reprocessingContext = reprocessingContext;
+        }
+
+        public int getSuccessfullyReprocessMailCount() {
+            return reprocessingContext.successfullyReprocessedMailCount();
+        }
+
+        public int getFailedReprocessedMailCount() {
+            return reprocessingContext.failedReprocessingMailCount();
+        }
+
+        public ReIndexingExecutionFailures failures() {
+            return reprocessingContext.failures();
+        }
+    }
+
+    private final ReIndexerPerformer reIndexerPerformer;
+    private final AdditionalInformation additionalInformation;
+    private final ReprocessingContext reprocessingContext;
+    private final ReIndexingExecutionFailures previousFailures;
+
+    public PreviousFailuresReIndexationTask(ReIndexerPerformer reIndexerPerformer, ReIndexingExecutionFailures previousFailures) {
+        this.reIndexerPerformer = reIndexerPerformer;
+        this.previousFailures = previousFailures;
+        this.reprocessingContext = new ReprocessingContext();
+        this.additionalInformation = new AdditionalInformation(reprocessingContext);
+    }
+
+    @Override
+    public Result run() {
+        return reIndexerPerformer.reIndex(reprocessingContext, previousFailures);
+    }
+
+    @Override
+    public String type() {
+        return PREVIOUS_FAILURES_INDEXING;
+    }
+
+    @Override
+    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+        return Optional.of(additionalInformation);
+    }
+}
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
index 1411d70..035da20 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
@@ -83,6 +83,26 @@ public class ReIndexerPerformer {
         }
     }
 
+    Task.Result reIndex(ReprocessingContext reprocessingContext, ReIndexingExecutionFailures previousReIndexingFailures) {
+        return previousReIndexingFailures.failures()
+            .stream()
+            .map(previousFailure -> reIndex(reprocessingContext, previousFailure))
+            .reduce(Task::combine)
+            .orElse(Task.Result.COMPLETED);
+    }
+
+    private Task.Result reIndex(ReprocessingContext reprocessingContext, ReIndexingExecutionFailures.ReIndexingFailure previousReIndexingFailure) {
+        MailboxId mailboxId = previousReIndexingFailure.getMailboxId();
+        MessageUid uid = previousReIndexingFailure.getUid();
+        try {
+            return handleMessageReIndexing(mailboxId, uid, reprocessingContext);
+        } catch (MailboxException e) {
+            LOGGER.warn("ReIndexing failed for {} {}", mailboxId, uid, e);
+            reprocessingContext.recordFailureDetailsForMessage(mailboxId, uid);
+            return Task.Result.PARTIAL;
+        }
+    }
+
     Task.Result reIndex(ReprocessingContext reprocessingContext) throws MailboxException {
         MailboxSession mailboxSession = mailboxManager.createSystemSession(RE_INDEXING);
         LOGGER.info("Starting a full reindex");
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
index fd56d09..4ed98ec 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
@@ -25,8 +25,10 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.MailboxId;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonValue;
 import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Multimap;
 
 public class ReIndexingExecutionFailures {
@@ -40,13 +42,22 @@ public class ReIndexingExecutionFailures {
         }
 
         @JsonIgnore
-        public String getMailboxId() {
+        public String getSerializedMailboxId() {
             return mailboxId.serialize();
         }
 
-        public long getUid() {
+        public MailboxId getMailboxId() {
+            return mailboxId;
+        }
+
+        @JsonProperty("uid")
+        public long getSerializedUid() {
             return uid.asLong();
         }
+
+        public MessageUid getUid() {
+            return uid;
+        }
     }
 
     private final List<ReIndexingFailure> failures;
@@ -56,8 +67,13 @@ public class ReIndexingExecutionFailures {
     }
 
     @JsonValue
-    public Multimap<String, ReIndexingFailure> failures() {
+    public Multimap<String, ReIndexingFailure> serializedFailures() {
         return failures.stream()
-            .collect(Guavate.toImmutableListMultimap(ReIndexingFailure::getMailboxId));
+            .collect(Guavate.toImmutableListMultimap(ReIndexingFailure::getSerializedMailboxId));
+    }
+
+    @JsonIgnore
+    public List<ReIndexingFailure> failures() {
+        return ImmutableList.copyOf(failures);
     }
 }


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


[james-project] 10/19: MAILBOX-351 WebAdmin route to allow me to reIndex previous tasks failures

Posted by bt...@apache.org.
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 3b040cad230da8e3b4dbb260bfcdbed2a16992d2
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 23 18:10:15 2019 +0700

    MAILBOX-351 WebAdmin route to  allow me to reIndex previous tasks failures
---
 .../org/apache/james/webadmin/dto/TaskIdDto.java   |   2 +-
 .../apache/james/webadmin/routes/TasksRoutes.java  |   3 +-
 .../apache/james/webadmin/dto/TaskIdDtoTest.java   |   4 +-
 .../james/webadmin/routes/TasksRoutesTest.java     |   4 +-
 .../james/webadmin/routes/ReindexingRoutes.java    |  76 ++++++-
 .../service/PreviousReIndexingService.java         |  60 ++++++
 .../webadmin/routes/ReindexingRoutesTest.java      | 222 +++++++++++++++++++++
 .../main/java/org/apache/james/task/TaskId.java    |  17 +-
 .../java/org/apache/james/task/TaskManager.java    |  22 +-
 9 files changed, 389 insertions(+), 21 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java
index 35f88e9..fbb74f0 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/TaskIdDto.java
@@ -33,7 +33,7 @@ public class TaskIdDto {
 
     public static TaskIdDto respond(Response response, TaskId taskId) {
         response.status(HttpStatus.CREATED_201);
-        response.header(LOCATION.asString(), TasksRoutes.BASE + "/" + taskId.getValue());
+        response.header(LOCATION.asString(), TasksRoutes.BASE + "/" + taskId.asString());
         return TaskIdDto.from(taskId);
     }
 
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
index 7dd1204..84f6eff 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
@@ -21,7 +21,6 @@ package org.apache.james.webadmin.routes;
 
 import java.util.List;
 import java.util.Optional;
-import java.util.UUID;
 import java.util.function.Supplier;
 
 import javax.inject.Inject;
@@ -172,7 +171,7 @@ public class TasksRoutes implements Routes {
     private TaskId getTaskId(Request req) {
         try {
             String id = req.params("id");
-            return new TaskId(UUID.fromString(id));
+            return TaskId.fromString(id);
         } catch (Exception e) {
             throw ErrorResponder.builder()
                 .statusCode(HttpStatus.BAD_REQUEST_400)
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/dto/TaskIdDtoTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/dto/TaskIdDtoTest.java
index 5f85a54..3a593eb 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/dto/TaskIdDtoTest.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/dto/TaskIdDtoTest.java
@@ -24,8 +24,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 
-import java.util.UUID;
-
 import org.apache.james.task.TaskId;
 import org.eclipse.jetty.http.HttpStatus;
 import org.junit.Test;
@@ -38,7 +36,7 @@ public class TaskIdDtoTest {
     @Test
     public void respondShouldReturnCreatedWithTaskIdHeader() {
         Response response = mock(Response.class);
-        TaskId taskId = new TaskId(UUID.fromString(UID_VALUE));
+        TaskId taskId = TaskId.fromString(UID_VALUE);
 
         TaskIdDto.respond(response, taskId);
 
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
index 39947c0..1642068 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
@@ -99,7 +99,7 @@ public class TasksRoutesTest {
             .statusCode(HttpStatus.OK_200)
             .body("", hasSize(1))
             .body("[0].status", is(TaskManager.Status.IN_PROGRESS.getValue()))
-            .body("[0].taskId", is(taskId.getValue().toString()))
+            .body("[0].taskId", is(taskId.asString()))
             .body("[0].class", is(not(empty())));
     }
 
@@ -130,7 +130,7 @@ public class TasksRoutesTest {
             .statusCode(HttpStatus.OK_200)
             .body("", hasSize(1))
             .body("[0].status", is(TaskManager.Status.IN_PROGRESS.getValue()))
-            .body("[0].taskId", is(taskId.getValue().toString()))
+            .body("[0].taskId", is(taskId.asString()))
             .body("[0].type", is(Task.UNKNOWN));
     }
 
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
index 8c5a773..083579e 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
@@ -28,13 +28,16 @@ import org.apache.james.core.User;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.indexer.IndexingDetailInformation;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskId;
 import org.apache.james.task.TaskManager;
+import org.apache.james.task.TaskNotFoundException;
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.dto.TaskIdDto;
+import org.apache.james.webadmin.service.PreviousReIndexingService;
 import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.JsonTransformer;
 import org.eclipse.jetty.http.HttpStatus;
@@ -62,19 +65,22 @@ public class ReindexingRoutes implements Routes {
 
     private static final String BASE_PATH = "/mailboxes";
     private static final String USER_QUERY_PARAM = "user";
+    private static final String RE_INDEX_FAILED_MESSAGES_QUERY_PARAM = "reIndexFailedMessagesOf";
     private static final String MAILBOX_PARAM = ":mailbox";
     private static final String UID_PARAM = ":uid";
     private static final String MAILBOX_PATH = BASE_PATH + "/" + MAILBOX_PARAM;
     private static final String MESSAGE_PATH = MAILBOX_PATH + "/mails/" + UID_PARAM;
 
     private final TaskManager taskManager;
+    private final PreviousReIndexingService previousReIndexingService;
     private final MailboxId.Factory mailboxIdFactory;
     private final ReIndexer reIndexer;
     private final JsonTransformer jsonTransformer;
 
     @Inject
-    ReindexingRoutes(TaskManager taskManager, MailboxId.Factory mailboxIdFactory, ReIndexer reIndexer, JsonTransformer jsonTransformer) {
+    ReindexingRoutes(TaskManager taskManager, PreviousReIndexingService previousReIndexingService, MailboxId.Factory mailboxIdFactory, ReIndexer reIndexer, JsonTransformer jsonTransformer) {
         this.taskManager = taskManager;
+        this.previousReIndexingService = previousReIndexingService;
         this.mailboxIdFactory = mailboxIdFactory;
         this.reIndexer = reIndexer;
         this.jsonTransformer = jsonTransformer;
@@ -110,7 +116,15 @@ public class ReindexingRoutes implements Routes {
             dataType = "String",
             defaultValue = "none",
             example = "?user=toto%40domain.tld",
-            value = "optional. If present, only mailboxes of that user will be reIndexed.")
+            value = "optional. If present, only mailboxes of that user will be reIndexed."),
+        @ApiImplicitParam(
+            name = "reIndexFailedMessagesOf",
+            paramType = "query parameter",
+            dataType = "String",
+            defaultValue = "none",
+            example = "?reIndexFailedMessagesOf=3294a976-ce63-491e-bd52-1b6f465ed7a2",
+            value = "optional. References a previously run reIndexing task. if present, the messages that this previous " +
+                "task failed to index will be reIndexed.")
     })
     @ApiResponses(value = {
         @ApiResponse(code = HttpStatus.CREATED_201, message = "Task is created", response = TaskIdDto.class),
@@ -118,10 +132,62 @@ public class ReindexingRoutes implements Routes {
         @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Bad request - details in the returned error message")
     })
     private TaskIdDto reIndexAll(Request request, Response response) {
-        if (Strings.isNullOrEmpty(request.queryParams(USER_QUERY_PARAM))) {
-            return wrap(request, response, reIndexer::reIndex);
+        boolean userReIndexing = !Strings.isNullOrEmpty(request.queryParams(USER_QUERY_PARAM));
+        boolean indexingCorrection = !Strings.isNullOrEmpty(request.queryParams(RE_INDEX_FAILED_MESSAGES_QUERY_PARAM));
+        if (userReIndexing && indexingCorrection) {
+            return rejectInvalidQueryParameterCombination();
+        }
+        if (userReIndexing) {
+            return wrap(request, response, () -> reIndexer.reIndex(extractUser(request)));
+        }
+        if (indexingCorrection) {
+                IndexingDetailInformation indexingDetailInformation = retrieveIndexingExecutionDetails(request);
+                return wrap(request, response, () -> reIndexer.reIndex(indexingDetailInformation.failures()));
+        }
+        return wrap(request, response, reIndexer::reIndex);
+    }
+
+    private IndexingDetailInformation retrieveIndexingExecutionDetails(Request request) {
+        TaskId taskId = getTaskId(request);
+        try {
+            return previousReIndexingService.retrieveIndexingExecutionDetails(taskId);
+        } catch (PreviousReIndexingService.NotAnIndexingRetryiableTask | PreviousReIndexingService.TaskNotYetFinishedException e) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .message("Invalid task id")
+                .cause(e)
+                .haltError();
+        } catch (TaskNotFoundException e) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .message("TaskId " + taskId.asString() + " does not exist")
+                .cause(e)
+                .haltError();
+        }
+    }
+
+    private TaskId getTaskId(Request request) {
+        try {
+            String id = request.queryParams(RE_INDEX_FAILED_MESSAGES_QUERY_PARAM);
+            return TaskId.fromString(id);
+        } catch (Exception e) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .cause(e)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .message("Invalid task id")
+                .haltError();
         }
-        return wrap(request, response, () -> reIndexer.reIndex(extractUser(request)));
+    }
+
+    private TaskIdDto rejectInvalidQueryParameterCombination() {
+        throw ErrorResponder.builder()
+            .statusCode(HttpStatus.BAD_REQUEST_400)
+            .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+            .message("Can not specify '" + USER_QUERY_PARAM + "' and '" + RE_INDEX_FAILED_MESSAGES_QUERY_PARAM + "' query parameters at the same time")
+            .haltError();
     }
 
     @POST
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java
new file mode 100644
index 0000000..2df5879
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java
@@ -0,0 +1,60 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.webadmin.service;
+
+import javax.inject.Inject;
+
+import org.apache.james.mailbox.indexer.IndexingDetailInformation;
+import org.apache.james.task.TaskExecutionDetails;
+import org.apache.james.task.TaskId;
+import org.apache.james.task.TaskManager;
+import org.apache.james.task.TaskNotFoundException;
+
+public class PreviousReIndexingService {
+    public static class TaskNotYetFinishedException extends RuntimeException {
+        TaskNotYetFinishedException(TaskManager.Status currentStatus) {
+            super("Task is not yet finished. Current status is: " + currentStatus);
+        }
+    }
+
+    public static class NotAnIndexingRetryiableTask extends RuntimeException {
+        NotAnIndexingRetryiableTask(String type) {
+            super("'" + type + "' is not a valid type of task for retrying a failed indexing");
+        }
+    }
+
+    private final TaskManager taskManager;
+
+    @Inject
+    public PreviousReIndexingService(TaskManager taskManager) {
+        this.taskManager = taskManager;
+    }
+
+    public IndexingDetailInformation retrieveIndexingExecutionDetails(TaskId taskId) throws NotAnIndexingRetryiableTask, TaskNotFoundException, TaskNotYetFinishedException {
+        TaskExecutionDetails executionDetails = taskManager.getExecutionDetails(taskId);
+        if (!executionDetails.getStatus().isFinished()) {
+            throw new TaskNotYetFinishedException(executionDetails.getStatus());
+        }
+        return executionDetails.getAdditionalInformation()
+            .filter(additionalInformation -> additionalInformation instanceof IndexingDetailInformation)
+            .map(additionalInformation -> (IndexingDetailInformation) additionalInformation)
+            .orElseThrow(() -> new NotAnIndexingRetryiableTask(executionDetails.getType()));
+    }
+}
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
index e0af217..091ddb9 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
@@ -27,7 +27,10 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 
@@ -48,6 +51,7 @@ import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.task.MemoryTaskManager;
 import org.apache.james.webadmin.WebAdminServer;
 import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.service.PreviousReIndexingService;
 import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.JsonTransformer;
 import org.apache.mailbox.tools.indexer.FullReindexingTask;
@@ -94,6 +98,7 @@ class ReindexingRoutesTest {
             new TasksRoutes(taskManager, jsonTransformer),
             new ReindexingRoutes(
                 taskManager,
+                new PreviousReIndexingService(taskManager),
                 mailboxIdFactory,
                 reIndexer,
                 jsonTransformer),
@@ -828,4 +833,221 @@ class ReindexingRoutesTest {
             }
         }
     }
+
+    @Nested
+    class FixingReIndexing {
+        @Nested
+        class Validation {
+            @Test
+            void fixingReIndexingShouldThrowOnMissingTaskQueryParameter() {
+                String taskId = with()
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                with()
+                    .basePath(TasksRoutes.BASE)
+                    .get(taskId + "/await");
+
+                given()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                .when()
+                    .post("/mailboxes")
+                .then()
+                    .statusCode(HttpStatus.BAD_REQUEST_400)
+                    .body("statusCode", is(400))
+                    .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+                    .body("message", is("task query parameter is mandatory. The only supported value is `reIndex`"));
+            }
+
+            @Test
+            void fixingReIndexingShouldThrowOnUserParameter() {
+                String taskId = with()
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                with()
+                    .basePath(TasksRoutes.BASE)
+                    .get(taskId + "/await");
+
+                given()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                    .queryParam("task", "reIndex")
+                    .queryParam("user", "bob@domain.tld")
+                .when()
+                    .post("/mailboxes")
+                .then()
+                    .statusCode(HttpStatus.BAD_REQUEST_400)
+                    .body("statusCode", is(400))
+                    .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+                    .body("message", is("Can not specify 'user' and 'reIndexFailedMessagesOf' query parameters at the same time"));
+            }
+
+            @Test
+            void fixingReIndexingShouldFailWithBadTask() {
+                String taskId = with()
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                with()
+                    .basePath(TasksRoutes.BASE)
+                    .get(taskId + "/await");
+
+                given()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                .when()
+                    .post("/mailboxes?task=bad")
+                .then()
+                    .statusCode(HttpStatus.BAD_REQUEST_400)
+                    .body("statusCode", is(400))
+                    .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+                    .body("message", is("task query parameter is mandatory. The only supported value is `reIndex`"));
+            }
+
+            @Test
+            void fixingReIndexingShouldRejectNotExistingTask() {
+                String taskId = "bbdb69c9-082a-44b0-a85a-6e33e74287a5";
+
+                given()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                .when()
+                    .post("/mailboxes?task=bad")
+                .then()
+                    .statusCode(HttpStatus.BAD_REQUEST_400)
+                    .body("statusCode", is(400))
+                    .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+                    .body("message", is("TaskId bbdb69c9-082a-44b0-a85a-6e33e74287a5 does not exist"));
+            }
+        }
+
+        @Nested
+        class TaskDetails {
+            @Test
+            void fixingReIndexingShouldNotFailWhenNoMail() {
+                String taskId = with()
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                with()
+                    .basePath(TasksRoutes.BASE)
+                    .get(taskId + "/await");
+
+                String fixingTaskId = with()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                    .queryParam("task", "reIndex")
+                    .post("/mailboxes")
+                    .jsonPath()
+                    .get("taskId");
+
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(fixingTaskId + "/await")
+                .then()
+                    .body("status", is("completed"))
+                    .body("taskId", is(notNullValue()))
+                    .body("type", is("ReIndexPreviousFailures"))
+                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()))
+                    .body("completedDate", is(notNullValue()));
+            }
+
+            @Test
+            void fixingReIndexingShouldReturnTaskDetailsWhenMail() throws Exception {
+                MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+                mailboxManager.createMailbox(INBOX, systemSession).get();
+                mailboxManager.getMailbox(INBOX, systemSession)
+                    .appendMessage(
+                        MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+                        systemSession);
+
+                doThrow(new RuntimeException()).when(searchIndex).add(any(MailboxSession.class), any(Mailbox.class), any(MailboxMessage.class));
+
+                String taskId = with()
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                with()
+                    .basePath(TasksRoutes.BASE)
+                    .get(taskId + "/await");
+
+                doNothing().when(searchIndex).add(any(MailboxSession.class), any(Mailbox.class), any(MailboxMessage.class));
+
+                String fixingTaskId = with()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                    .queryParam("task", "reIndex")
+                    .post("/mailboxes")
+                    .jsonPath()
+                    .get("taskId");
+
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(fixingTaskId + "/await")
+                .then()
+                    .body("status", is("completed"))
+                    .body("taskId", is(notNullValue()))
+                    .body("type", is("ReIndexPreviousFailures"))
+                    .body("additionalInformation.successfullyReprocessMailCount", is(1))
+                    .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()))
+                    .body("completedDate", is(notNullValue()));
+            }
+        }
+
+        @Nested
+        class SideEffects {
+            @Test
+            void fixingReprocessingShouldPerformReprocessingWhenMail() throws Exception {
+                MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+                MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
+                ComposedMessageId createdMessage = mailboxManager.getMailbox(INBOX, systemSession)
+                    .appendMessage(
+                        MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+                        systemSession);
+
+                doThrow(new RuntimeException()).when(searchIndex).add(any(MailboxSession.class), any(Mailbox.class), any(MailboxMessage.class));
+
+                String taskId = with()
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                with()
+                    .basePath(TasksRoutes.BASE)
+                    .get(taskId + "/await");
+
+                reset(searchIndex);
+
+                String fixingTaskId = with()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                    .queryParam("task", "reIndex")
+                    .post("/mailboxes")
+                    .jsonPath()
+                    .get("taskId");
+
+                with()
+                    .basePath(TasksRoutes.BASE)
+                    .get(fixingTaskId + "/await")
+                    .then()
+                    .body("status", is("completed"));
+
+                ArgumentCaptor<MailboxMessage> messageCaptor = ArgumentCaptor.forClass(MailboxMessage.class);
+                ArgumentCaptor<Mailbox> mailboxCaptor = ArgumentCaptor.forClass(Mailbox.class);
+                verify(searchIndex).add(any(MailboxSession.class), mailboxCaptor.capture(), messageCaptor.capture());
+                verifyNoMoreInteractions(searchIndex);
+
+                assertThat(mailboxCaptor.getValue()).matches(mailbox -> mailbox.getMailboxId().equals(mailboxId));
+                assertThat(messageCaptor.getValue()).matches(message -> message.getMailboxId().equals(mailboxId)
+                    && message.getUid().equals(createdMessage.getUid()));
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/server/task/src/main/java/org/apache/james/task/TaskId.java b/server/task/src/main/java/org/apache/james/task/TaskId.java
index 4b66feb..3f30712 100644
--- a/server/task/src/main/java/org/apache/james/task/TaskId.java
+++ b/server/task/src/main/java/org/apache/james/task/TaskId.java
@@ -23,11 +23,22 @@ import java.util.Objects;
 import java.util.UUID;
 
 import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
 
 public class TaskId {
 
     public static TaskId generateTaskId() {
-        return new TaskId(UUID.randomUUID());
+        return fromUUID(UUID.randomUUID());
+    }
+
+    public static TaskId fromUUID(UUID uuid) {
+        Preconditions.checkNotNull(uuid, "'uuid' should not be null");
+        return new TaskId(uuid);
+    }
+
+    public static TaskId fromString(String uuid) {
+        Preconditions.checkNotNull(uuid, "'uuid' should not be null");
+        return fromUUID(UUID.fromString(uuid));
     }
 
     private final UUID value;
@@ -40,6 +51,10 @@ public class TaskId {
         return value;
     }
 
+    public String asString() {
+        return value.toString();
+    }
+
     @Override
     public final boolean equals(Object o) {
         if (o instanceof TaskId) {
diff --git a/server/task/src/main/java/org/apache/james/task/TaskManager.java b/server/task/src/main/java/org/apache/james/task/TaskManager.java
index de3e16b..b04f2c2 100644
--- a/server/task/src/main/java/org/apache/james/task/TaskManager.java
+++ b/server/task/src/main/java/org/apache/james/task/TaskManager.java
@@ -23,13 +23,15 @@ import java.util.Arrays;
 import java.util.List;
 
 public interface TaskManager {
+    boolean FINISHED = true;
+
     enum Status {
-        WAITING("waiting"),
-        IN_PROGRESS("inProgress"),
-        COMPLETED("completed"),
-        CANCEL_REQUESTED("canceledRequested"),
-        CANCELLED("canceled"),
-        FAILED("failed");
+        WAITING("waiting", !FINISHED),
+        IN_PROGRESS("inProgress", !FINISHED),
+        CANCEL_REQUESTED("canceledRequested", !FINISHED),
+        COMPLETED("completed", FINISHED),
+        CANCELLED("canceled", FINISHED),
+        FAILED("failed", FINISHED);
 
         public static Status fromString(String value) {
             return Arrays.stream(values())
@@ -40,14 +42,20 @@ public interface TaskManager {
         }
 
         private final String value;
+        private final boolean finished;
 
-        Status(String value) {
+        Status(String value, boolean finished) {
             this.value = value;
+            this.finished = finished;
         }
 
         public String getValue() {
             return value;
         }
+
+        public boolean isFinished() {
+            return finished;
+        }
     }
 
     TaskId submit(Task task);


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


[james-project] 01/19: Checkstyle fixes

Posted by bt...@apache.org.
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 eb9d8d302784868fa9cfc91b04299faf2098686d
Author: Raphael Ouazana <ra...@linagora.com>
AuthorDate: Fri May 24 17:35:23 2019 +0200

    Checkstyle fixes
---
 .../java/org/apache/james/backends/es/NodeMappingFactoryTest.java   | 2 +-
 .../imapmailbox/external/james/JamesDeploymentValidationTest.java   | 1 -
 .../imapmailbox/external/james/host/docker/CliProvisioningAPI.java  | 6 +++---
 .../java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java  | 1 +
 .../test/java/org/apache/james/jmap/model/MailboxFactoryTest.java   | 2 --
 .../james/webadmin/integration/EventDeadLettersIntegrationTest.java | 4 ++--
 .../test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java | 1 -
 .../java/org/apache/james/webadmin/routes/DomainsRoutesTest.java    | 2 +-
 .../src/test/java/org/apache/james/task/MemoryTaskManagerTest.java  | 1 +
 .../java/org/apache/james/task/MemoryTaskManagerWorkerTest.java     | 1 +
 10 files changed, 10 insertions(+), 11 deletions(-)

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 6ffa45b..dd24ddd 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
@@ -63,7 +63,7 @@ public class NodeMappingFactoryTest {
 
         elasticSearch.awaitForElasticSearch();
 
-        assertThatCode(() ->NodeMappingFactory.applyMapping(clientProvider.get(),
+        assertThatCode(() -> NodeMappingFactory.applyMapping(clientProvider.get(),
             INDEX_NAME,
             getOtherMappingsSources()))
         .doesNotThrowAnyException();
diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java
index 5afc1ee..af766be 100644
--- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java
+++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java
@@ -32,7 +32,6 @@ import com.google.inject.Injector;
 
 public class JamesDeploymentValidationTest extends DeploymentValidation {
 
-    private final String USER_ADDRESS = USER + "@" + DOMAIN;
     private ImapHostSystem system;
     private SmtpHostSystem smtpHostSystem;
     private final ExternalJamesConfiguration configuration = new ExternalJamesConfigurationEnvironnementVariables();
diff --git a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java
index b3aa138..3e6411a 100644
--- a/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java
+++ b/mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java
@@ -21,11 +21,11 @@ package org.apache.james.mpt.imapmailbox.external.james.host.docker;
 import java.io.IOException;
 
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.james.mpt.imapmailbox.external.james.ProvisioningException;
 import org.apache.james.mpt.imapmailbox.external.james.host.ProvisioningAPI;
 import org.apache.james.util.docker.DockerGenericContainer;
 import org.testcontainers.containers.Container;
-import org.testcontainers.shaded.org.apache.commons.lang.StringUtils;
 
 import com.google.common.collect.ImmutableList;
 
@@ -39,8 +39,8 @@ public class CliProvisioningAPI implements ProvisioningAPI {
     private final DockerGenericContainer container;
     private final String[] cmd;
 
-    private final static String[] jarCmd = {"java", "-jar", "/root/james-cli.jar"};
-    private final static String[] hostAndPort = {"-h", "127.0.0.1", "-p", "9999"};
+    private static final String[] jarCmd = {"java", "-jar", "/root/james-cli.jar"};
+    private static final String[] hostAndPort = {"-h", "127.0.0.1", "-p", "9999"};
 
     public CliProvisioningAPI(CliType cliType, DockerGenericContainer container) throws InterruptedException, ProvisioningException, IOException, IllegalArgumentException {
         this.container = container;
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
index 8a20c6c..e5c2c31 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
@@ -68,6 +68,7 @@ public class GetMailboxesMethodTest {
 
     private QuotaRootResolver quotaRootResolver;
     private QuotaManager quotaManager;
+
     @Before
     public void setup() throws Exception {
         clientId = ClientId.of("#0");
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
index cdbaa54..34e8e34 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
@@ -24,8 +24,6 @@ import java.util.Optional;
 
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.MailboxNamespace;
-import org.apache.james.jmap.utils.quotas.DefaultQuotaLoader;
-import org.apache.james.jmap.utils.quotas.QuotaLoader;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
diff --git a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/EventDeadLettersIntegrationTest.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/EventDeadLettersIntegrationTest.java
index 3bffb93..1b15988 100644
--- a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/EventDeadLettersIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/EventDeadLettersIntegrationTest.java
@@ -67,8 +67,8 @@ public class EventDeadLettersIntegrationTest {
 
     public static class RetryEventsListenerGroup extends Group {}
 
-    public class RetryEventsListener implements MailboxListener.GroupMailboxListener {
-        final Group GROUP = new RetryEventsListenerGroup();
+    public static class RetryEventsListener implements MailboxListener.GroupMailboxListener {
+        static final Group GROUP = new RetryEventsListenerGroup();
 
         private int retriesBeforeSuccess;
         private Map<Event.EventId, Integer> retries;
diff --git a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
index 825a41a..39947c0 100644
--- a/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
@@ -26,7 +26,6 @@ import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.isIn;
 import static org.hamcrest.Matchers.isOneOf;
 import static org.hamcrest.Matchers.not;
 
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
index e68ddc3..7be1f92 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
@@ -265,7 +265,7 @@ class DomainsRoutesTest {
         }
 
         @Nested
-        class DomainAlias{
+        class DomainAlias {
             @Test
             void getAliasesShouldReturnNotFoundWhenDomainDoesNotExist() {
                 when()
diff --git a/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java b/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java
index 7b87080..aea861b 100644
--- a/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java
+++ b/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java
@@ -117,6 +117,7 @@ public class MemoryTaskManagerTest {
        }
         assertThat(memoryTaskManager.getExecutionDetails(id).getStatus()).isEqualTo(TaskManager.Status.COMPLETED);
     }
+
     @Test
     public void failedTaskShouldNotBeCancelled() {
         TaskId id = memoryTaskManager.submit(() -> Task.Result.PARTIAL);
diff --git a/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerWorkerTest.java b/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerWorkerTest.java
index 48d22fd..034cdbd 100644
--- a/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerWorkerTest.java
+++ b/server/task/src/test/java/org/apache/james/task/MemoryTaskManagerWorkerTest.java
@@ -90,6 +90,7 @@ public class MemoryTaskManagerWorkerTest {
         assertThat(idToDetails.get(id).getStatus()).isEqualTo(TaskManager.Status.IN_PROGRESS);
         latch.countDown();
     }
+
     @Test
     public void theWorkerShouldNotRunATaskRequestedForCancellation() {
         TaskId id = TaskId.generateTaskId();


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


[james-project] 18/19: JAMES-2763 Split ES Client module in ES mailbox module

Posted by bt...@apache.org.
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 28d8aab1f20c4db5b4dbb170be02052b6c5341e1
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Tue May 28 15:46:12 2019 +0700

    JAMES-2763 Split ES Client module in ES mailbox module
---
 .../org/apache/james/CassandraJamesServerMain.java |  2 +
 .../modules/mailbox/ElasticSearchClientModule.java | 67 ++++++++++++++++++++++
 .../mailbox/ElasticSearchMailboxModule.java        | 28 ---------
 3 files changed, 69 insertions(+), 28 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
index ee05ad2..d7f5ddd 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -35,6 +35,7 @@ import org.apache.james.modules.mailbox.CassandraMailboxModule;
 import org.apache.james.modules.mailbox.CassandraObjectStoreModule;
 import org.apache.james.modules.mailbox.CassandraQuotaMailingModule;
 import org.apache.james.modules.mailbox.CassandraSessionModule;
+import org.apache.james.modules.mailbox.ElasticSearchClientModule;
 import org.apache.james.modules.mailbox.ElasticSearchMailboxModule;
 import org.apache.james.modules.mailbox.TikaMailboxModule;
 import org.apache.james.modules.metrics.CassandraMetricsModule;
@@ -119,6 +120,7 @@ public class CassandraJamesServerMain {
     public static final Module CASSANDRA_MAILBOX_MODULE = Modules.combine(
         new CassandraMailboxModule(),
         new DeletedMessageVaultModule(),
+        new ElasticSearchClientModule(),
         new ElasticSearchMailboxModule(),
         new ElasticSearchMetricReporterModule(),
         new MailboxModule(),
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchClientModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchClientModule.java
new file mode 100644
index 0000000..96350a1
--- /dev/null
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchClientModule.java
@@ -0,0 +1,67 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.modules.mailbox;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.time.LocalDateTime;
+
+import javax.inject.Singleton;
+
+import org.apache.commons.lang3.time.DurationFormatUtils;
+import org.apache.james.backends.es.ClientProviderImpl;
+import org.apache.james.backends.es.ElasticSearchConfiguration;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+
+import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
+
+public class ElasticSearchClientModule extends AbstractModule {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchClientModule.class);
+
+    @Override
+    protected void configure() {
+    }
+
+    @Provides
+    @Singleton
+    protected RestHighLevelClient provideClient(ElasticSearchConfiguration configuration) {
+        Duration waitDelay = Duration.ofMillis(configuration.getMinDelay());
+        return Mono.fromCallable(() -> connectToCluster(configuration))
+            .doOnError(e -> LOGGER.warn("Error establishing ElasticSearch connection. Next retry scheduled in {}",
+                DurationFormatUtils.formatDurationWords(waitDelay.toMillis(), true, true), e))
+            .retryBackoff(configuration.getMaxRetries(), waitDelay, waitDelay)
+            .publishOn(Schedulers.elastic())
+            .block();
+    }
+
+    private RestHighLevelClient connectToCluster(ElasticSearchConfiguration configuration) throws IOException {
+        LOGGER.info("Trying to connect to ElasticSearch service at {}", LocalDateTime.now());
+
+        return ClientProviderImpl.fromHosts(configuration.getHosts(), configuration.getClusterName())
+            .get();
+    }
+}
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 46e1803..907ae76 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -23,8 +23,6 @@ import static org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearche
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.time.Duration;
-import java.time.LocalDateTime;
 import java.util.List;
 
 import javax.inject.Inject;
@@ -33,8 +31,6 @@ import javax.inject.Singleton;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.lang3.time.DurationFormatUtils;
-import org.apache.james.backends.es.ClientProviderImpl;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
 import org.apache.james.lifecycle.api.StartUpCheck;
@@ -63,9 +59,6 @@ import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.multibindings.Multibinder;
 
-import reactor.core.publisher.Mono;
-import reactor.core.scheduler.Schedulers;
-
 public class ElasticSearchMailboxModule extends AbstractModule {
 
     static class MailboxIndexCreator implements Startable {
@@ -194,27 +187,6 @@ public class ElasticSearchMailboxModule extends AbstractModule {
 
     @Provides
     @Singleton
-    protected RestHighLevelClient provideClient(ElasticSearchConfiguration configuration) {
-
-        Duration waitDelay = Duration.ofMillis(configuration.getMinDelay());
-        return Mono.fromCallable(() -> connectToCluster(configuration))
-            .doOnError(e -> LOGGER.warn("Error establishing ElasticSearch connection. Next retry scheduled in {}",
-                DurationFormatUtils.formatDurationWords(waitDelay.toMillis(), true, true),
-                e))
-            .retryBackoff(configuration.getMaxRetries(), waitDelay, waitDelay)
-            .publishOn(Schedulers.elastic())
-            .block();
-    }
-
-    private RestHighLevelClient connectToCluster(ElasticSearchConfiguration configuration) throws IOException {
-        LOGGER.info("Trying to connect to ElasticSearch service at {}", LocalDateTime.now());
-
-        return ClientProviderImpl.fromHosts(configuration.getHosts(), configuration.getClusterName())
-            .get();
-    }
-
-    @Provides
-    @Singleton
     public IndexAttachments provideIndexAttachments(ElasticSearchMailboxConfiguration configuration) {
         return configuration.getIndexAttachment();
     }


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


[james-project] 08/19: MAILBOX-351 Factorize ReIndexing tasks details

Posted by bt...@apache.org.
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 118418e6cb67adb9f2e1e6fe23e33717a486ed0e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 23 12:03:12 2019 +0700

    MAILBOX-351 Factorize ReIndexing tasks details
    
    There was a lot of unnecessary code duplication
---
 .../mailbox/tools/indexer/FullReindexingTask.java  | 38 +--------------
 .../indexer/PreviousFailuresReIndexationTask.java  | 35 ++------------
 .../indexer/ReprocessingContextInformation.java    | 56 ++++++++++++++++++++++
 .../tools/indexer/SingleMailboxReindexingTask.java | 32 +------------
 .../mailbox/tools/indexer/UserReindexingTask.java  | 31 +-----------
 5 files changed, 65 insertions(+), 127 deletions(-)

diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
index c5b5219..0999ee0 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
@@ -24,56 +24,22 @@ import java.util.Optional;
 import javax.inject.Inject;
 
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.indexer.IndexingDetailInformation;
-import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 public class FullReindexingTask implements Task {
 
     public static final String FULL_RE_INDEXING = "FullReIndexing";
 
-    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
-        private final ReprocessingContext reprocessingContext;
-
-        AdditionalInformation(ReprocessingContext reprocessingContext) {
-            this.reprocessingContext = reprocessingContext;
-        }
-
-        @Override
-        public int getSuccessfullyReprocessMailCount() {
-            return reprocessingContext.successfullyReprocessedMailCount();
-        }
-
-        @Override
-        public int getFailedReprocessedMailCount() {
-            return reprocessingContext.failedReprocessingMailCount();
-        }
-
-        @Override
-        @JsonIgnore
-        public ReIndexingExecutionFailures failures() {
-            return reprocessingContext.failures();
-        }
-
-        @JsonProperty
-        public SerializableReIndexingExecutionFailures failuresAsJson() {
-            return SerializableReIndexingExecutionFailures.from(failures());
-        }
-    }
-
     private final ReIndexerPerformer reIndexerPerformer;
-    private final AdditionalInformation additionalInformation;
+    private final ReprocessingContextInformation additionalInformation;
     private final ReprocessingContext reprocessingContext;
 
     @Inject
     public FullReindexingTask(ReIndexerPerformer reIndexerPerformer) {
         this.reIndexerPerformer = reIndexerPerformer;
         this.reprocessingContext = new ReprocessingContext();
-        this.additionalInformation = new AdditionalInformation(reprocessingContext);
+        this.additionalInformation = new ReprocessingContextInformation(reprocessingContext);
     }
 
     @Override
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
index 4bbeba4..faf513c 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
@@ -21,44 +21,15 @@ package org.apache.mailbox.tools.indexer;
 
 import java.util.Optional;
 
-import org.apache.james.mailbox.indexer.IndexingDetailInformation;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 public class PreviousFailuresReIndexationTask implements Task {
-    public static final String PREVIOUS_FAILURES_INDEXING = "ReIndexPreviousFailures";
-
-    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
-        private final ReprocessingContext reprocessingContext;
-
-        AdditionalInformation(ReprocessingContext reprocessingContext) {
-            this.reprocessingContext = reprocessingContext;
-        }
-
-        public int getSuccessfullyReprocessMailCount() {
-            return reprocessingContext.successfullyReprocessedMailCount();
-        }
-
-        public int getFailedReprocessedMailCount() {
-            return reprocessingContext.failedReprocessingMailCount();
-        }
-        @JsonIgnore
-        public ReIndexingExecutionFailures failures() {
-            return reprocessingContext.failures();
-        }
-
-        @JsonProperty("failures")
-        public SerializableReIndexingExecutionFailures failuresAsJson() {
-            return SerializableReIndexingExecutionFailures.from(failures());
-        }
-    }
+    private static final String PREVIOUS_FAILURES_INDEXING = "ReIndexPreviousFailures";
 
     private final ReIndexerPerformer reIndexerPerformer;
-    private final AdditionalInformation additionalInformation;
+    private final ReprocessingContextInformation additionalInformation;
     private final ReprocessingContext reprocessingContext;
     private final ReIndexingExecutionFailures previousFailures;
 
@@ -66,7 +37,7 @@ public class PreviousFailuresReIndexationTask implements Task {
         this.reIndexerPerformer = reIndexerPerformer;
         this.previousFailures = previousFailures;
         this.reprocessingContext = new ReprocessingContext();
-        this.additionalInformation = new AdditionalInformation(reprocessingContext);
+        this.additionalInformation = new ReprocessingContextInformation(reprocessingContext);
     }
 
     @Override
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java
new file mode 100644
index 0000000..6590e43
--- /dev/null
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java
@@ -0,0 +1,56 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.mailbox.tools.indexer;
+
+import org.apache.james.mailbox.indexer.IndexingDetailInformation;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
+import org.apache.james.task.TaskExecutionDetails;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ReprocessingContextInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
+    private final ReprocessingContext reprocessingContext;
+
+    ReprocessingContextInformation(ReprocessingContext reprocessingContext) {
+        this.reprocessingContext = reprocessingContext;
+    }
+
+    @Override
+    public int getSuccessfullyReprocessMailCount() {
+        return reprocessingContext.successfullyReprocessedMailCount();
+    }
+
+    @Override
+    public int getFailedReprocessedMailCount() {
+        return reprocessingContext.failedReprocessingMailCount();
+    }
+
+    @Override
+    @JsonIgnore
+    public ReIndexingExecutionFailures failures() {
+        return reprocessingContext.failures();
+    }
+
+    @JsonProperty
+    public SerializableReIndexingExecutionFailures failuresAsJson() {
+        return SerializableReIndexingExecutionFailures.from(failures());
+    }
+}
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
index c3e26fb..c98337e 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
@@ -23,53 +23,25 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
-import org.apache.james.mailbox.indexer.IndexingDetailInformation;
-import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 public class SingleMailboxReindexingTask implements Task {
 
     public static final String MAILBOX_RE_INDEXING = "mailboxReIndexing";
 
-    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
+    public static class AdditionalInformation extends ReprocessingContextInformation {
         private final MailboxId mailboxId;
-        private final ReprocessingContext reprocessingContext;
 
         AdditionalInformation(MailboxId mailboxId, ReprocessingContext reprocessingContext) {
+            super(reprocessingContext);
             this.mailboxId = mailboxId;
-            this.reprocessingContext = reprocessingContext;
         }
 
-
         public String getMailboxId() {
             return mailboxId.serialize();
         }
-
-        @Override
-        public int getSuccessfullyReprocessMailCount() {
-            return reprocessingContext.successfullyReprocessedMailCount();
-        }
-
-        @Override
-        public int getFailedReprocessedMailCount() {
-            return reprocessingContext.failedReprocessingMailCount();
-        }
-
-        @Override
-        @JsonIgnore
-        public ReIndexingExecutionFailures failures() {
-            return reprocessingContext.failures();
-        }
-
-        @JsonProperty("failures")
-        public SerializableReIndexingExecutionFailures failuresAsJson() {
-            return SerializableReIndexingExecutionFailures.from(failures());
-        }
     }
 
     private final ReIndexerPerformer reIndexerPerformer;
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
index 1f3a0a0..cf1f76e 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
@@ -25,48 +25,21 @@ import javax.inject.Inject;
 
 import org.apache.james.core.User;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.indexer.IndexingDetailInformation;
-import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 public class UserReindexingTask implements Task {
 
     public static final String USER_RE_INDEXING = "userReIndexing";
 
-    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
-        private final ReprocessingContext reprocessingContext;
+    public static class AdditionalInformation extends ReprocessingContextInformation {
         private final User user;
 
         AdditionalInformation(ReprocessingContext reprocessingContext, User user) {
-            this.reprocessingContext = reprocessingContext;
+            super(reprocessingContext);
             this.user = user;
         }
 
-        @Override
-        public int getSuccessfullyReprocessMailCount() {
-            return reprocessingContext.successfullyReprocessedMailCount();
-        }
-
-        @Override
-        public int getFailedReprocessedMailCount() {
-            return reprocessingContext.failedReprocessingMailCount();
-        }
-
-        @Override
-        @JsonIgnore
-        public ReIndexingExecutionFailures failures() {
-            return reprocessingContext.failures();
-        }
-
-        @JsonProperty("failures")
-        public SerializableReIndexingExecutionFailures failuresAsJson() {
-            return SerializableReIndexingExecutionFailures.from(failures());
-        }
-
         public String getUser() {
             return user.asString();
         }


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


[james-project] 11/19: MAILBOX-351 WebAdmin documentation for fixing a reIndexing

Posted by bt...@apache.org.
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 f98fb0b26391e3a9b3229546c521e6dbefeb28db
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri May 24 11:36:02 2019 +0700

    MAILBOX-351 WebAdmin documentation for fixing a reIndexing
---
 .../james/webadmin/routes/ReindexingRoutes.java    |  6 +--
 .../service/PreviousReIndexingService.java         |  8 +--
 src/site/markdown/server/manage-webadmin.md        | 60 ++++++++++++++++++++--
 3 files changed, 64 insertions(+), 10 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
index 083579e..c2f09d8 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRoutes.java
@@ -141,8 +141,8 @@ public class ReindexingRoutes implements Routes {
             return wrap(request, response, () -> reIndexer.reIndex(extractUser(request)));
         }
         if (indexingCorrection) {
-                IndexingDetailInformation indexingDetailInformation = retrieveIndexingExecutionDetails(request);
-                return wrap(request, response, () -> reIndexer.reIndex(indexingDetailInformation.failures()));
+            IndexingDetailInformation indexingDetailInformation = retrieveIndexingExecutionDetails(request);
+            return wrap(request, response, () -> reIndexer.reIndex(indexingDetailInformation.failures()));
         }
         return wrap(request, response, reIndexer::reIndex);
     }
@@ -151,7 +151,7 @@ public class ReindexingRoutes implements Routes {
         TaskId taskId = getTaskId(request);
         try {
             return previousReIndexingService.retrieveIndexingExecutionDetails(taskId);
-        } catch (PreviousReIndexingService.NotAnIndexingRetryiableTask | PreviousReIndexingService.TaskNotYetFinishedException e) {
+        } catch (PreviousReIndexingService.NotAnIndexingRetriableTask | PreviousReIndexingService.TaskNotYetFinishedException e) {
             throw ErrorResponder.builder()
                 .statusCode(HttpStatus.BAD_REQUEST_400)
                 .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java
index 2df5879..9c00dea 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java
@@ -34,8 +34,8 @@ public class PreviousReIndexingService {
         }
     }
 
-    public static class NotAnIndexingRetryiableTask extends RuntimeException {
-        NotAnIndexingRetryiableTask(String type) {
+    public static class NotAnIndexingRetriableTask extends RuntimeException {
+        NotAnIndexingRetriableTask(String type) {
             super("'" + type + "' is not a valid type of task for retrying a failed indexing");
         }
     }
@@ -47,7 +47,7 @@ public class PreviousReIndexingService {
         this.taskManager = taskManager;
     }
 
-    public IndexingDetailInformation retrieveIndexingExecutionDetails(TaskId taskId) throws NotAnIndexingRetryiableTask, TaskNotFoundException, TaskNotYetFinishedException {
+    public IndexingDetailInformation retrieveIndexingExecutionDetails(TaskId taskId) throws NotAnIndexingRetriableTask, TaskNotFoundException, TaskNotYetFinishedException {
         TaskExecutionDetails executionDetails = taskManager.getExecutionDetails(taskId);
         if (!executionDetails.getStatus().isFinished()) {
             throw new TaskNotYetFinishedException(executionDetails.getStatus());
@@ -55,6 +55,6 @@ public class PreviousReIndexingService {
         return executionDetails.getAdditionalInformation()
             .filter(additionalInformation -> additionalInformation instanceof IndexingDetailInformation)
             .map(additionalInformation -> (IndexingDetailInformation) additionalInformation)
-            .orElseThrow(() -> new NotAnIndexingRetryiableTask(executionDetails.getType()));
+            .orElseThrow(() -> new NotAnIndexingRetriableTask(executionDetails.getType()));
     }
 }
diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index efe53b7..ea99c41 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -2392,7 +2392,11 @@ The scheduled task will have the following type `FullReIndexing` and the followi
 ```
 {
   "successfullyReprocessMailCount":18,
-  "failedReprocessedMailCount": 1
+  "failedReprocessedMailCount": 3,
+  "failures": {
+    "mbx1": [{"uid": 35}, {"uid": 45}],
+    "mbx2": [{"uid": 38}]
+  }
 }
 ```
 
@@ -2436,7 +2440,11 @@ The scheduled task will have the following type `userReIndexing` and the followi
 {
   "user":"bob@domain.com",
   "successfullyReprocessMailCount":18,
-  "failedReprocessedMailCount": 1
+  "failedReprocessedMailCount": 3,
+  "failures": {
+    "mbx1": [{"uid": 35}, {"uid": 45}],
+    "mbx2": [{"uid": 38}]
+  }
 }
 ```
 
@@ -2482,7 +2490,11 @@ The scheduled task will have the following type `mailboxReIndexing` and the foll
 {
   "mailboxId":"{mailboxId}",
   "successfullyReprocessMailCount":18,
-  "failedReprocessedMailCount": 1
+  "failedReprocessedMailCount": 3,
+  "failures": {
+    "mbx1": [{"uid": 35}, {"uid": 45}],
+    "mbx2": [{"uid": 38}]
+  }
 }
 ```
 
@@ -2493,6 +2505,48 @@ Warning: Canceling this task should be considered unsafe as it will leave the cu
 Warning: While we have been trying to reduce the inconsistency window to a maximum (by keeping track of ongoing events),
 concurrent changes done during the reIndexing might be ignored.
 
+### Fixing previously failed ReIndexing
+
+Given `bbdb69c9-082a-44b0-a85a-6e33e74287a5` being a taskId generated for a reIndexing tasks
+
+```
+curl -XPOST http://ip:port/mailboxes?task=reIndex&reIndexFailedMessagesOf=bbdb69c9-082a-44b0-a85a-6e33e74287a5
+```
+
+Will schedule a task for reIndexing all the mails that this task failed to reIndex.
+
+The response to that request will be the scheduled `taskId` :
+
+```
+{"taskId":"5641376-02ed-47bd-bcc7-76ff6262d92a"}
+```
+
+Positioned headers:
+
+ - Location header indicates the location of the resource associated with the scheduled task. Example:
+
+```
+Location: /tasks/3294a976-ce63-491e-bd52-1b6f465ed7a2
+```
+
+Response codes:
+
+ - 201: Success. Corresponding task id is returned.
+ - 400: Error in the request. Details can be found in the reported error.
+
+The scheduled task will have the following type `ReIndexPreviousFailures` and the following `additionalInformation`:
+
+```
+{
+  "successfullyReprocessMailCount":18,
+  "failedReprocessedMailCount": 3,
+  "failures": {
+    "mbx1": [{"uid": 35}, {"uid": 45}],
+    "mbx2": [{"uid": 38}]
+  }
+}
+```
+
 ### ReIndexing a single mail
 
 ```


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


[james-project] 15/19: MAILBOX-351 MemoryTaskManagerWorker can rely on Task.Status::isFinished

Posted by bt...@apache.org.
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 520cc5c6c1d97eb4897c0aa2a77d234503b0af31
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 28 15:21:13 2019 +0700

    MAILBOX-351 MemoryTaskManagerWorker can rely on Task.Status::isFinished
---
 .../src/main/java/org/apache/james/task/MemoryTaskManagerWorker.java  | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/server/task/src/main/java/org/apache/james/task/MemoryTaskManagerWorker.java b/server/task/src/main/java/org/apache/james/task/MemoryTaskManagerWorker.java
index e69e641..5d6226d 100644
--- a/server/task/src/main/java/org/apache/james/task/MemoryTaskManagerWorker.java
+++ b/server/task/src/main/java/org/apache/james/task/MemoryTaskManagerWorker.java
@@ -120,9 +120,7 @@ public class MemoryTaskManagerWorker implements TaskManagerWorker {
     }
 
     private boolean canBeCancelledEffectively(TaskExecutionDetails details) {
-        return details.getStatus().equals(TaskManager.Status.WAITING)
-            || details.getStatus().equals(TaskManager.Status.IN_PROGRESS)
-            || details.getStatus().equals(TaskManager.Status.CANCEL_REQUESTED);
+        return !details.getStatus().isFinished();
     }
 
     private void success(Consumer<TaskExecutionDetailsUpdater> updateDetails) {


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


[james-project] 16/19: JAMES-2763 Indexes creation should be done in ConfigurationPerformers

Posted by bt...@apache.org.
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 a532512ea592160e6bcb066b085f7ca02978f7c6
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Tue May 28 10:22:07 2019 +0700

    JAMES-2763 Indexes creation should be done in ConfigurationPerformers
---
 .../mailbox/ElasticSearchMailboxModule.java        | 87 ++++++++++++++++------
 .../mailbox/ElasticSearchQuotaSearcherModule.java  | 63 +++++++++++++++-
 ...esWithNonCompatibleElasticSearchServerTest.java |  5 +-
 3 files changed, 126 insertions(+), 29 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 8bf293c..9c43034 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -25,7 +25,9 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.time.Duration;
 import java.time.LocalDateTime;
+import java.util.List;
 
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
@@ -35,6 +37,7 @@ import org.apache.commons.lang3.time.DurationFormatUtils;
 import org.apache.james.backends.es.ClientProviderImpl;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.elasticsearch.ElasticSearchMailboxConfiguration;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
@@ -47,13 +50,13 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
-import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaConfiguration;
-import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
+import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.PropertiesProvider;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
@@ -63,6 +66,55 @@ import reactor.core.publisher.Mono;
 import reactor.core.scheduler.Schedulers;
 
 public class ElasticSearchMailboxModule extends AbstractModule {
+
+    static class MailboxIndexCreator implements Startable {
+
+        private final ElasticSearchConfiguration configuration;
+        private final ElasticSearchMailboxConfiguration mailboxConfiguration;
+        private final RestHighLevelClient client;
+
+        @Inject
+        MailboxIndexCreator(ElasticSearchConfiguration configuration,
+                            ElasticSearchMailboxConfiguration mailboxConfiguration,
+                            RestHighLevelClient client) {
+            this.configuration = configuration;
+            this.mailboxConfiguration = mailboxConfiguration;
+            this.client = client;
+        }
+
+        void createIndex() throws IOException {
+            MailboxIndexCreationUtil.prepareClient(client,
+                mailboxConfiguration.getReadAliasMailboxName(),
+                mailboxConfiguration.getWriteAliasMailboxName(),
+                mailboxConfiguration.getIndexMailboxName(),
+                configuration);
+        }
+    }
+
+    static class ElasticSearchMailboxIndexCreationPerformer implements ConfigurationPerformer {
+
+        private final MailboxIndexCreator mailboxIndexCreator;
+
+        @Inject
+        ElasticSearchMailboxIndexCreationPerformer(MailboxIndexCreator mailboxIndexCreator) {
+            this.mailboxIndexCreator = mailboxIndexCreator;
+        }
+
+        @Override
+        public void initModule() {
+            try {
+                mailboxIndexCreator.createIndex();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public List<Class<? extends Startable>> forClasses() {
+            return ImmutableList.of(MailboxIndexCreator.class);
+        }
+    }
+
     private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchMailboxModule.class);
 
     public static final String ELASTICSEARCH_CONFIGURATION_NAME = "elasticsearch";
@@ -78,6 +130,10 @@ public class ElasticSearchMailboxModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ElasticSearchListeningMessageSearchIndex.class);
+
+        Multibinder.newSetBinder(binder(), ConfigurationPerformer.class)
+            .addBinding()
+            .to(ElasticSearchMailboxIndexCreationPerformer.class);
     }
 
     @Provides
@@ -133,12 +189,10 @@ public class ElasticSearchMailboxModule extends AbstractModule {
 
     @Provides
     @Singleton
-    protected RestHighLevelClient provideClient(ElasticSearchConfiguration configuration,
-                                   ElasticSearchMailboxConfiguration mailboxConfiguration,
-                                   ElasticSearchQuotaConfiguration quotaConfiguration) {
+    protected RestHighLevelClient provideClient(ElasticSearchConfiguration configuration) {
 
         Duration waitDelay = Duration.ofMillis(configuration.getMinDelay());
-        return Mono.fromCallable(() -> connectToCluster(configuration, mailboxConfiguration, quotaConfiguration))
+        return Mono.fromCallable(() -> connectToCluster(configuration))
             .doOnError(e -> LOGGER.warn("Error establishing ElasticSearch connection. Next retry scheduled in {}",
                 DurationFormatUtils.formatDurationWords(waitDelay.toMillis(), true, true),
                 e))
@@ -147,26 +201,11 @@ public class ElasticSearchMailboxModule extends AbstractModule {
             .block();
     }
 
-    private RestHighLevelClient connectToCluster(ElasticSearchConfiguration configuration,
-                                    ElasticSearchMailboxConfiguration mailboxConfiguration,
-                                    ElasticSearchQuotaConfiguration quotaConfiguration) throws IOException {
+    private RestHighLevelClient connectToCluster(ElasticSearchConfiguration configuration) throws IOException {
         LOGGER.info("Trying to connect to ElasticSearch service at {}", LocalDateTime.now());
 
-        RestHighLevelClient client = ClientProviderImpl.fromHosts(configuration.getHosts(), configuration.getClusterName()).get();
-
-        MailboxIndexCreationUtil.prepareClient(client,
-            mailboxConfiguration.getReadAliasMailboxName(),
-            mailboxConfiguration.getWriteAliasMailboxName(),
-            mailboxConfiguration.getIndexMailboxName(),
-            configuration);
-
-        QuotaSearchIndexCreationUtil.prepareClient(client,
-            quotaConfiguration.getReadAliasQuotaRatioName(),
-            quotaConfiguration.getWriteAliasQuotaRatioName(),
-            quotaConfiguration.getIndexQuotaRatioName(),
-            configuration);
-
-        return client;
+        return ClientProviderImpl.fromHosts(configuration.getHosts(), configuration.getClusterName())
+            .get();
     }
 
     @Provides
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
index c3eb9be..05b4eb8 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
@@ -22,27 +22,84 @@ package org.apache.james.modules.mailbox;
 import static org.apache.james.modules.mailbox.ElasticSearchMailboxModule.ELASTICSEARCH_CONFIGURATION_NAME;
 
 import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.List;
+
+import javax.inject.Inject;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
+import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.events.MailboxListener;
 import org.apache.james.quota.search.QuotaSearcher;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaConfiguration;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher;
+import org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
 import org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
+import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.PropertiesProvider;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
 public class ElasticSearchQuotaSearcherModule extends AbstractModule {
+
+    static class ElasticSearchQuotaIndexCreator implements Startable {
+        private final ElasticSearchConfiguration configuration;
+        private final ElasticSearchQuotaConfiguration quotaConfiguration;
+        private final RestHighLevelClient client;
+
+        @Inject
+        ElasticSearchQuotaIndexCreator(ElasticSearchConfiguration configuration,
+                                       ElasticSearchQuotaConfiguration quotaConfiguration,
+                                       RestHighLevelClient client) {
+            this.configuration = configuration;
+            this.quotaConfiguration = quotaConfiguration;
+            this.client = client;
+        }
+
+        void createIndex() throws IOException {
+            QuotaSearchIndexCreationUtil.prepareClient(client,
+                quotaConfiguration.getReadAliasQuotaRatioName(),
+                quotaConfiguration.getWriteAliasQuotaRatioName(),
+                quotaConfiguration.getIndexQuotaRatioName(),
+                configuration);
+        }
+    }
+
+    static class ElasticSearchQuotaIndexCreationPerformer implements ConfigurationPerformer {
+
+        private final ElasticSearchQuotaIndexCreator indexCreator;
+
+        @Inject
+        ElasticSearchQuotaIndexCreationPerformer(ElasticSearchQuotaIndexCreator indexCreator) {
+            this.indexCreator = indexCreator;
+        }
+
+        @Override
+        public void initModule() {
+            try {
+                indexCreator.createIndex();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public List<Class<? extends Startable>> forClasses() {
+            return ImmutableList.of(ElasticSearchQuotaIndexCreator.class);
+        }
+    }
+
     private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchQuotaSearcherModule.class);
 
     @Override
@@ -50,6 +107,10 @@ public class ElasticSearchQuotaSearcherModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ElasticSearchQuotaMailboxListener.class);
+
+        Multibinder.newSetBinder(binder(), ConfigurationPerformer.class)
+            .addBinding()
+            .to(ElasticSearchQuotaIndexCreationPerformer.class);
     }
 
     @Provides
@@ -59,8 +120,6 @@ public class ElasticSearchQuotaSearcherModule extends AbstractModule {
             configuration.getReadAliasQuotaRatioName());
     }
 
-
-
     @Provides
     @Singleton
     private ElasticSearchQuotaConfiguration getElasticSearchQuotaConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException {
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
index 87347f6..3a4c0b5 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
@@ -28,12 +28,11 @@ import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.PDFTextExtractor;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.util.docker.Images;
+import org.elasticsearch.ElasticsearchStatusException;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import com.google.inject.ProvisionException;
-
 class JamesWithNonCompatibleElasticSearchServerTest {
 
     private static final int LIMIT_MAX_MESSAGES = 10;
@@ -59,7 +58,7 @@ class JamesWithNonCompatibleElasticSearchServerTest {
     @Test
     void jamesShouldStopWhenStartingWithANonCompatibleElasticSearchServer(GuiceJamesServer server) throws Exception {
         assertThatThrownBy(server::start)
-            .isInstanceOf(ProvisionException.class);
+            .isInstanceOf(ElasticsearchStatusException.class);
 
         assertThat(server.isStarted())
             .isFalse();


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


[james-project] 14/19: MAILBOX-351 Fixing a typo in IndexingDetailInformation

Posted by bt...@apache.org.
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 547d01f629ee910ea77a95ff5f465abfedaebc09
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 28 10:47:27 2019 +0700

    MAILBOX-351 Fixing a typo in IndexingDetailInformation
---
 .../mailbox/indexer/IndexingDetailInformation.java |  2 +-
 .../indexer/ReprocessingContextInformation.java    |  2 +-
 .../webadmin/routes/ReindexingRoutesTest.java      | 24 +++++++++++-----------
 src/site/markdown/server/manage-webadmin.md        |  8 ++++----
 4 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java
index cc70572..0f7d90c 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java
@@ -20,7 +20,7 @@
 package org.apache.james.mailbox.indexer;
 
 public interface IndexingDetailInformation {
-    int getSuccessfullyReprocessMailCount();
+    int getSuccessfullyReprocessedMailCount();
 
     int getFailedReprocessedMailCount();
 
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java
index c3bc0ae..4ab24d3 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java
@@ -34,7 +34,7 @@ public class ReprocessingContextInformation implements TaskExecutionDetails.Addi
     }
 
     @Override
-    public int getSuccessfullyReprocessMailCount() {
+    public int getSuccessfullyReprocessedMailCount() {
         return reprocessingContext.successfullyReprocessedMailCount();
     }
 
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
index 2d9e100..b63c3d5 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
@@ -162,7 +162,7 @@ class ReindexingRoutesTest {
                     .body("status", is("completed"))
                     .body("taskId", is(notNullValue()))
                     .body("type", is(FullReindexingTask.FULL_RE_INDEXING))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
@@ -191,7 +191,7 @@ class ReindexingRoutesTest {
                     .body("status", is("completed"))
                     .body("taskId", is(notNullValue()))
                     .body("type", is(FullReindexingTask.FULL_RE_INDEXING))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(1))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
@@ -225,7 +225,7 @@ class ReindexingRoutesTest {
                     .body("status", is("failed"))
                     .body("taskId", is(notNullValue()))
                     .body("type", is(FullReindexingTask.FULL_RE_INDEXING))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(1))
                     .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
                     .body("startedDate", is(notNullValue()))
@@ -339,7 +339,7 @@ class ReindexingRoutesTest {
                     .body("taskId", is(notNullValue()))
                     .body("type", is(UserReindexingTask.USER_RE_INDEXING))
                     .body("additionalInformation.user", is("benwa@apache.org"))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
@@ -372,7 +372,7 @@ class ReindexingRoutesTest {
                     .body("taskId", is(notNullValue()))
                     .body("type", is(UserReindexingTask.USER_RE_INDEXING))
                     .body("additionalInformation.user", is("benwa@apache.org"))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(1))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
@@ -408,7 +408,7 @@ class ReindexingRoutesTest {
                     .body("status", is("failed"))
                     .body("taskId", is(notNullValue()))
                     .body("type", is(UserReindexingTask.USER_RE_INDEXING))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(1))
                     .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
                     .body("startedDate", is(notNullValue()))
@@ -535,7 +535,7 @@ class ReindexingRoutesTest {
                     .body("taskId", is(notNullValue()))
                     .body("type", is(SingleMailboxReindexingTask.MAILBOX_RE_INDEXING))
                     .body("additionalInformation.mailboxId", is(mailboxId.serialize()))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
@@ -565,7 +565,7 @@ class ReindexingRoutesTest {
                     .body("taskId", is(notNullValue()))
                     .body("type", is(SingleMailboxReindexingTask.MAILBOX_RE_INDEXING))
                     .body("additionalInformation.mailboxId", is(mailboxId.serialize()))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(1))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()));
@@ -599,7 +599,7 @@ class ReindexingRoutesTest {
                     .body("status", is("failed"))
                     .body("taskId", is(notNullValue()))
                     .body("type", is(SingleMailboxReindexingTask.MAILBOX_RE_INDEXING))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(1))
                     .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
                     .body("startedDate", is(notNullValue()))
@@ -1054,7 +1054,7 @@ class ReindexingRoutesTest {
                     .body("status", is("completed"))
                     .body("taskId", is(notNullValue()))
                     .body("type", is("ErrorRecoveryIndexation"))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
@@ -1098,7 +1098,7 @@ class ReindexingRoutesTest {
                     .body("status", is("completed"))
                     .body("taskId", is(notNullValue()))
                     .body("type", is("ErrorRecoveryIndexation"))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(1))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
@@ -1143,7 +1143,7 @@ class ReindexingRoutesTest {
                     .body("status", is("failed"))
                     .body("taskId", is(notNullValue()))
                     .body("type", is("ErrorRecoveryIndexation"))
-                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(1))
                     .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
                     .body("startedDate", is(notNullValue()))
diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index ea99c41..1fe66a1 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -2391,7 +2391,7 @@ The scheduled task will have the following type `FullReIndexing` and the followi
 
 ```
 {
-  "successfullyReprocessMailCount":18,
+  "successfullyReprocessedMailCount":18,
   "failedReprocessedMailCount": 3,
   "failures": {
     "mbx1": [{"uid": 35}, {"uid": 45}],
@@ -2439,7 +2439,7 @@ The scheduled task will have the following type `userReIndexing` and the followi
 ```
 {
   "user":"bob@domain.com",
-  "successfullyReprocessMailCount":18,
+  "successfullyReprocessedMailCount":18,
   "failedReprocessedMailCount": 3,
   "failures": {
     "mbx1": [{"uid": 35}, {"uid": 45}],
@@ -2489,7 +2489,7 @@ The scheduled task will have the following type `mailboxReIndexing` and the foll
 ```
 {
   "mailboxId":"{mailboxId}",
-  "successfullyReprocessMailCount":18,
+  "successfullyReprocessedMailCount":18,
   "failedReprocessedMailCount": 3,
   "failures": {
     "mbx1": [{"uid": 35}, {"uid": 45}],
@@ -2538,7 +2538,7 @@ The scheduled task will have the following type `ReIndexPreviousFailures` and th
 
 ```
 {
-  "successfullyReprocessMailCount":18,
+  "successfullyReprocessedMailCount":18,
   "failedReprocessedMailCount": 3,
   "failures": {
     "mbx1": [{"uid": 35}, {"uid": 45}],


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


[james-project] 19/19: JAMES-2766 ElasticSearch 6 upgrade: Document port configuration changes

Posted by bt...@apache.org.
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 14051e0ce3e37d7c075819d431e417b1f034ee40
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed May 29 10:01:28 2019 +0700

    JAMES-2766 ElasticSearch 6 upgrade: Document port configuration changes
    
    ElasticSearch 6 driver is relying on the high-level REST client and no more on the internal transport protocol.
    
    Thus, you need to update your configuration files accordingly:
    
    In `elasticsearch.properties` modify the `elasticsearch.port` properties to reference the HTTP port of your ElasticSearch
    nodes (**9200** by default instead of the previous default value of **9300**).
---
 upgrade-instructions.md | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/upgrade-instructions.md b/upgrade-instructions.md
index 4399a14..88708d5 100644
--- a/upgrade-instructions.md
+++ b/upgrade-instructions.md
@@ -33,6 +33,15 @@ In version 3.3.0 indexing for the Cassandra product was handled using ElasticSea
 Note that ElasticSearch APIs had been undergoing some major changes, making a smooth migration hard to provide. We proposed 2 migration strategies. A
 simple one leading to major search inconsistencies in the process, and another one mitigating these inconsistencies (but getting rid of them).
 
+#### Configuration changes
+
+ElasticSearch 6 driver is relying on the high-level REST client and no more on the internal transport protocol.
+
+Thus, you need to update your configuration files accordingly:
+
+In `elasticsearch.properties` modify the `elasticsearch.port` properties to reference the HTTP port of your ElasticSearch 
+nodes (**9200** by default instead of the previous default value of **9300**).
+
 ##### Simple strategy
 
 Procedure:


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


[james-project] 04/19: JAMES-2766 --port is not an option of docker run (-p is valid)

Posted by bt...@apache.org.
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 39db51626f1e54baf9bcafcae8d0d64331219a28
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Mon May 27 15:48:51 2019 +0700

    JAMES-2766 --port is not an option of docker run (-p is valid)
---
 src/homepage/howTo/imap-server.html                            |  4 ++--
 .../markdown/server/install/guice-cassandra-rabbitmq-swift.md  | 10 +++++-----
 src/site/markdown/server/install/guice-cassandra.md            |  4 ++--
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/homepage/howTo/imap-server.html b/src/homepage/howTo/imap-server.html
index 57c787e..68bc58a 100644
--- a/src/homepage/howTo/imap-server.html
+++ b/src/homepage/howTo/imap-server.html
@@ -137,8 +137,8 @@ $ mv keystore conf/keystore</code></pre>
 
                 <pre><code>docker run \
 --name james_run \
---port "25:25" --port "465:465" --port "587:587" \
---port "143:143"  --port "993:993" \
+-p "25:25" -p "465:465" -p "587:587" \
+-p "143:143"  -p "993:993" \
 --volume "$PWD/conf:/root/conf/" \
 --volume "$PWD/var:/root/var/" \
 linagora/james-jpa-guice:latest</code></pre>
diff --git a/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md b/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md
index e848746..7f15a21 100644
--- a/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md
+++ b/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md
@@ -47,10 +47,10 @@ $ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
 You need to have a Cassandra, ElasticSearch and RabbitMQ instance running. You can either install the servers or launch them via docker:
 
 ```bash
-$ docker run -d --port 9042:9042 --name=cassandra cassandra:3.11.3
-$ docker run -d --port 9200:9200 --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2
-$ docker run -d --port 5672:5672 --port 15672:15672 --name=rabbitmq rabbitmq:3.7.7-management
-$ docker run -d --port 5000:5000 --port 8080:8080 --port 35357:35357 --name=swift linagora/openstack-keystone-swift:pike
+$ docker run -d -p 9042:9042 --name=cassandra cassandra:3.11.3
+$ docker run -d -p 9200:9200 --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2
+$ docker run -d -p 5672:5672 -p 15672:15672 --name=rabbitmq rabbitmq:3.7.7-management
+$ docker run -d -p 5000:5000 -p 8080:8080 -p 35357:35357 --name=swift linagora/openstack-keystone-swift:pike
 ```
 
 Once everything is set up, you just have to run the jar with:
@@ -73,7 +73,7 @@ objectstorage.s3.secretKey=verySecretKey1
 To use Scality S3 server you have to launch it instead of swift container:
 
 ```
-$ docker run -d --port 8080:8000 --name=s3 scality/s3server:6018536a
+$ docker run -d -p 8080:8000 --name=s3 scality/s3server:6018536a
 ```
 
 More informations about available options [here](https://hub.docker.com/r/scality/s3server).
diff --git a/src/site/markdown/server/install/guice-cassandra.md b/src/site/markdown/server/install/guice-cassandra.md
index 0edaf26..564bd45 100644
--- a/src/site/markdown/server/install/guice-cassandra.md
+++ b/src/site/markdown/server/install/guice-cassandra.md
@@ -45,8 +45,8 @@ $ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
 You need to have a Cassandra and an ElasticSearch instance running. You can either install the servers or launch them via docker:
 
 ```bash
-$ docker run -d --port 9042:9042 --name=cassandra cassandra:3.11.3
-$ docker run -d --port 9200:9200 --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2
+$ docker run -d -p 9042:9042 --name=cassandra cassandra:3.11.3
+$ docker run -d -p 9200:9200 --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2
 ```
 
 Once everything is set up, you just have to run the jar with:


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


[james-project] 07/19: MAILBOX-351 Move ReIndexing failures to the API

Posted by bt...@apache.org.
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 15910fa0c995291f0727c2b2310f17bb95a7a813
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 23 11:57:41 2019 +0700

    MAILBOX-351 Move ReIndexing failures to the API
---
 .../indexer/IndexingDetailInformation.java         |  2 +-
 .../indexer/ReIndexingExecutionFailures.java       | 24 +------------
 .../mailbox/tools/indexer/FullReindexingTask.java  | 11 ++++++
 .../indexer/PreviousFailuresReIndexationTask.java  | 12 ++++++-
 .../mailbox/tools/indexer/ReIndexerPerformer.java  |  1 +
 .../mailbox/tools/indexer/ReprocessingContext.java |  1 +
 ...> SerializableReIndexingExecutionFailures.java} | 39 +++++++++-------------
 .../tools/indexer/SingleMailboxReindexingTask.java | 11 ++++++
 .../mailbox/tools/indexer/UserReindexingTask.java  | 11 ++++++
 ...rializableReIndexingExecutionFailuresTest.java} |  7 ++--
 10 files changed, 68 insertions(+), 51 deletions(-)

diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/IndexingDetailInformation.java b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java
similarity index 97%
rename from mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/IndexingDetailInformation.java
rename to mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java
index 063092a..cc70572 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/IndexingDetailInformation.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.mailbox.tools.indexer;
+package org.apache.james.mailbox.indexer;
 
 public interface IndexingDetailInformation {
     int getSuccessfullyReprocessMailCount();
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexingExecutionFailures.java
similarity index 73%
copy from mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
copy to mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexingExecutionFailures.java
index 4ed98ec..9e9a987 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexingExecutionFailures.java
@@ -17,19 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.mailbox.tools.indexer;
+package org.apache.james.mailbox.indexer;
 
 import java.util.List;
 
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.MailboxId;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonValue;
-import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Multimap;
 
 public class ReIndexingExecutionFailures {
     public static class ReIndexingFailure {
@@ -41,20 +36,10 @@ public class ReIndexingExecutionFailures {
             this.uid = uid;
         }
 
-        @JsonIgnore
-        public String getSerializedMailboxId() {
-            return mailboxId.serialize();
-        }
-
         public MailboxId getMailboxId() {
             return mailboxId;
         }
 
-        @JsonProperty("uid")
-        public long getSerializedUid() {
-            return uid.asLong();
-        }
-
         public MessageUid getUid() {
             return uid;
         }
@@ -66,13 +51,6 @@ public class ReIndexingExecutionFailures {
         this.failures = failures;
     }
 
-    @JsonValue
-    public Multimap<String, ReIndexingFailure> serializedFailures() {
-        return failures.stream()
-            .collect(Guavate.toImmutableListMultimap(ReIndexingFailure::getSerializedMailboxId));
-    }
-
-    @JsonIgnore
     public List<ReIndexingFailure> failures() {
         return ImmutableList.copyOf(failures);
     }
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
index 848f8c7..c5b5219 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
@@ -24,9 +24,14 @@ import java.util.Optional;
 import javax.inject.Inject;
 
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.indexer.IndexingDetailInformation;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class FullReindexingTask implements Task {
 
     public static final String FULL_RE_INDEXING = "FullReIndexing";
@@ -49,9 +54,15 @@ public class FullReindexingTask implements Task {
         }
 
         @Override
+        @JsonIgnore
         public ReIndexingExecutionFailures failures() {
             return reprocessingContext.failures();
         }
+
+        @JsonProperty
+        public SerializableReIndexingExecutionFailures failuresAsJson() {
+            return SerializableReIndexingExecutionFailures.from(failures());
+        }
     }
 
     private final ReIndexerPerformer reIndexerPerformer;
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
index a64b2d7..4bbeba4 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
@@ -21,9 +21,14 @@ package org.apache.mailbox.tools.indexer;
 
 import java.util.Optional;
 
+import org.apache.james.mailbox.indexer.IndexingDetailInformation;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class PreviousFailuresReIndexationTask implements Task {
     public static final String PREVIOUS_FAILURES_INDEXING = "ReIndexPreviousFailures";
 
@@ -41,10 +46,15 @@ public class PreviousFailuresReIndexationTask implements Task {
         public int getFailedReprocessedMailCount() {
             return reprocessingContext.failedReprocessingMailCount();
         }
-
+        @JsonIgnore
         public ReIndexingExecutionFailures failures() {
             return reprocessingContext.failures();
         }
+
+        @JsonProperty("failures")
+        public SerializableReIndexingExecutionFailures failuresAsJson() {
+            return SerializableReIndexingExecutionFailures.from(failures());
+        }
     }
 
     private final ReIndexerPerformer reIndexerPerformer;
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
index 035da20..03d2d2c 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContext.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContext.java
index 4834bcb..c0c3eb7 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContext.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContext.java
@@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 
 import com.google.common.collect.ImmutableList;
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailures.java
similarity index 64%
rename from mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
rename to mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailures.java
index 4ed98ec..3b3515a 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailures.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailures.java
@@ -22,21 +22,20 @@ package org.apache.mailbox.tools.indexer;
 import java.util.List;
 
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonValue;
 import com.github.steveash.guavate.Guavate;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Multimap;
 
-public class ReIndexingExecutionFailures {
-    public static class ReIndexingFailure {
+public class SerializableReIndexingExecutionFailures {
+    public static class SerializableReIndexingFailure {
         private final MailboxId mailboxId;
         private final MessageUid uid;
 
-        public ReIndexingFailure(MailboxId mailboxId, MessageUid uid) {
+        public SerializableReIndexingFailure(MailboxId mailboxId, MessageUid uid) {
             this.mailboxId = mailboxId;
             this.uid = uid;
         }
@@ -46,34 +45,28 @@ public class ReIndexingExecutionFailures {
             return mailboxId.serialize();
         }
 
-        public MailboxId getMailboxId() {
-            return mailboxId;
-        }
-
-        @JsonProperty("uid")
-        public long getSerializedUid() {
+        public long getUid() {
             return uid.asLong();
         }
+    }
 
-        public MessageUid getUid() {
-            return uid;
-        }
+    public static SerializableReIndexingExecutionFailures from(ReIndexingExecutionFailures reIndexingExecutionFailures) {
+        return new SerializableReIndexingExecutionFailures(
+            reIndexingExecutionFailures.failures()
+                .stream()
+                .map(failure -> new SerializableReIndexingExecutionFailures.SerializableReIndexingFailure(failure.getMailboxId(), failure.getUid()))
+                .collect(Guavate.toImmutableList()));
     }
 
-    private final List<ReIndexingFailure> failures;
+    private final List<SerializableReIndexingFailure> failures;
 
-    public ReIndexingExecutionFailures(List<ReIndexingFailure> failures) {
+    public SerializableReIndexingExecutionFailures(List<SerializableReIndexingFailure> failures) {
         this.failures = failures;
     }
 
     @JsonValue
-    public Multimap<String, ReIndexingFailure> serializedFailures() {
+    public Multimap<String, SerializableReIndexingFailure> failures() {
         return failures.stream()
-            .collect(Guavate.toImmutableListMultimap(ReIndexingFailure::getSerializedMailboxId));
-    }
-
-    @JsonIgnore
-    public List<ReIndexingFailure> failures() {
-        return ImmutableList.copyOf(failures);
+            .collect(Guavate.toImmutableListMultimap(SerializableReIndexingFailure::getSerializedMailboxId));
     }
 }
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
index 9a66481..c3e26fb 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
@@ -23,10 +23,15 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
+import org.apache.james.mailbox.indexer.IndexingDetailInformation;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class SingleMailboxReindexingTask implements Task {
 
     public static final String MAILBOX_RE_INDEXING = "mailboxReIndexing";
@@ -56,9 +61,15 @@ public class SingleMailboxReindexingTask implements Task {
         }
 
         @Override
+        @JsonIgnore
         public ReIndexingExecutionFailures failures() {
             return reprocessingContext.failures();
         }
+
+        @JsonProperty("failures")
+        public SerializableReIndexingExecutionFailures failuresAsJson() {
+            return SerializableReIndexingExecutionFailures.from(failures());
+        }
     }
 
     private final ReIndexerPerformer reIndexerPerformer;
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
index 4088db2..1f3a0a0 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
@@ -25,9 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.james.core.User;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.indexer.IndexingDetailInformation;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class UserReindexingTask implements Task {
 
     public static final String USER_RE_INDEXING = "userReIndexing";
@@ -52,10 +57,16 @@ public class UserReindexingTask implements Task {
         }
 
         @Override
+        @JsonIgnore
         public ReIndexingExecutionFailures failures() {
             return reprocessingContext.failures();
         }
 
+        @JsonProperty("failures")
+        public SerializableReIndexingExecutionFailures failuresAsJson() {
+            return SerializableReIndexingExecutionFailures.from(failures());
+        }
+
         public String getUser() {
             return user.asString();
         }
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailuresTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailuresTest.java
similarity index 90%
rename from mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailuresTest.java
rename to mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailuresTest.java
index f224113..147032f 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexingExecutionFailuresTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailuresTest.java
@@ -22,6 +22,7 @@ package org.apache.mailbox.tools.indexer;
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -32,7 +33,7 @@ import com.fasterxml.jackson.datatype.guava.GuavaModule;
 
 import net.javacrumbs.jsonunit.core.Option;
 
-class ReIndexingExecutionFailuresTest {
+class SerializableReIndexingExecutionFailuresTest {
     private ObjectMapper objectMapper;
 
     @BeforeEach
@@ -45,7 +46,7 @@ class ReIndexingExecutionFailuresTest {
     void failuresShouldBeSerializedAsEmptyArrayWhenNone() throws Exception {
         ReIndexingExecutionFailures failures = new ReIndexingExecutionFailures(ImmutableList.of());
 
-        assertThatJson(objectMapper.writeValueAsString(failures))
+        assertThatJson(objectMapper.writeValueAsString(SerializableReIndexingExecutionFailures.from(failures)))
             .when(Option.IGNORING_ARRAY_ORDER)
             .isEqualTo("{}");
     }
@@ -60,7 +61,7 @@ class ReIndexingExecutionFailuresTest {
             new ReIndexingExecutionFailures.ReIndexingFailure(InMemoryId.of(41), MessageUid.of(18)),
             new ReIndexingExecutionFailures.ReIndexingFailure(InMemoryId.of(16), MessageUid.of(24))));
 
-        assertThatJson(objectMapper.writeValueAsString(failures))
+        assertThatJson(objectMapper.writeValueAsString(SerializableReIndexingExecutionFailures.from(failures)))
             .when(Option.IGNORING_ARRAY_ORDER)
             .isEqualTo("{" +
                 "  \"45\":[{\"uid\":34}, {\"uid\":33}]," +


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


[james-project] 09/19: MAILBOX-351 ReIndexer should allow me to reIndex previous tasks failures

Posted by bt...@apache.org.
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 869e0e94e3519780f33947ad9307a103bea1aa4c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 23 12:06:24 2019 +0700

    MAILBOX-351 ReIndexer should allow me to reIndex previous tasks failures
---
 .../src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java   | 2 ++
 .../main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java   | 6 ++++++
 .../main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java | 6 ++++++
 3 files changed, 14 insertions(+)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
index 837ba38..01a6e27 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
@@ -40,4 +40,6 @@ public interface ReIndexer {
 
     Task reIndex(MailboxId mailboxId, MessageUid uid) throws MailboxException;
 
+    Task reIndex(ReIndexingExecutionFailures previousFailures) throws MailboxException;
+
 }
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
index 9f4b49d..6b1cbd8 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
@@ -27,6 +27,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.indexer.ReIndexer;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -96,6 +97,11 @@ public class ReIndexerImpl implements ReIndexer {
         return new SingleMessageReindexingTask(reIndexerPerformer, mailboxId, uid);
     }
 
+    @Override
+    public Task reIndex(ReIndexingExecutionFailures previousFailures) {
+        return new PreviousFailuresReIndexationTask(reIndexerPerformer, previousFailures);
+    }
+
     private void validateIdExists(MailboxId mailboxId) throws MailboxException {
         MailboxSession mailboxSession = mailboxManager.createSystemSession("ReIndexingImap");
         mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
index 5a5173b..99f2d3d 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
@@ -23,6 +23,7 @@ import org.apache.james.core.User;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.indexer.ReIndexer;
+import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.task.Task;
@@ -57,4 +58,9 @@ public class ThrowsReIndexer implements ReIndexer {
     public Task reIndex(MailboxId mailboxId, MessageUid uid) throws MailboxException {
         throw new MailboxException("Not implemented");
     }
+
+    @Override
+    public Task reIndex(ReIndexingExecutionFailures previousFailures) throws MailboxException {
+        throw new MailboxException("Not implemented");
+    }
 }


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


[james-project] 02/19: Fix Eclipse warnings

Posted by bt...@apache.org.
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 6a1f838a4dd304821f452ef49353935f3e9b2092
Author: Raphael Ouazana <ra...@linagora.com>
AuthorDate: Fri May 24 18:02:21 2019 +0200

    Fix Eclipse warnings
---
 .../cassandra/components/CassandraTableTest.java      |  1 -
 .../org/apache/james/mailbox/MailboxManagerTest.java  |  2 +-
 .../james/mailbox/backup/ZipMailArchiveRestorer.java  |  3 +++
 .../mailbox/backup/zip/ZippedMailAccountIterator.java |  1 -
 .../mailbox/backup/DefaultMailboxBackupTest.java      |  4 ----
 .../apache/james/mailbox/backup/ZipAssertTest.java    |  3 ++-
 .../elasticsearch/search/ElasticSearchSearcher.java   |  2 +-
 .../maildir/DomainUserMaildirMailboxManagerTest.java  |  4 ++--
 .../maildir/FullUserMaildirMailboxManagerTest.java    |  4 ++--
 .../apache/james/metrics/tests/RecordingMetric.java   |  4 +---
 .../james/metrics/tests/RecordingMetricFactory.java   |  2 +-
 .../james/blob/objectstorage/AESPayloadCodec.java     |  3 ---
 .../blob/objectstorage/ObjectStorageBlobsDAO.java     |  1 -
 .../james/GuiceJamesServerStartUpCheckTest.java       |  1 +
 .../java/org/apache/james/jmap/JMAPModuleTest.java    |  1 +
 .../org/apache/james/smtp/SmtpRandomStoringTest.java  |  6 +++++-
 .../james/transport/mailets/AliasMappingTest.java     |  1 -
 .../methods/integration/DeletedMessagesVaultTest.java | 12 ++++++------
 .../apache/james/webadmin/routes/GroupsRoutes.java    |  5 +----
 .../james/webadmin/routes/GroupsRoutesTest.java       |  4 ++--
 .../test/java/org/apache/james/linshare/Linshare.java | 19 ++++++++++++-------
 .../apache/james/linshare/client/LinshareAPITest.java |  3 ++-
 22 files changed, 43 insertions(+), 43 deletions(-)

diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/components/CassandraTableTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/components/CassandraTableTest.java
index 55d6666..8a5868f 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/components/CassandraTableTest.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/components/CassandraTableTest.java
@@ -91,7 +91,6 @@ class CassandraTableTest {
         assertThat(left.reduce(right)).isEqualByComparingTo(expectedResult);
     }
 
-    @SuppressWarnings("unused")
     private static Stream<Arguments> initializationStatusReduceShouldFallIntoTheRightState() {
         return Stream.of(
                 Arguments.of(ALREADY_DONE, ALREADY_DONE, ALREADY_DONE),
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index d2fa727..c152e99 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -1194,7 +1194,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
         }
 
         @Test
-        void renameMailboxShouldChangeTheMailboxPathOfAMailbox() throws Exception {
+        protected void renameMailboxShouldChangeTheMailboxPathOfAMailbox() throws Exception {
             MailboxSession session = mailboxManager.createSystemSession(USER_1);
 
             MailboxPath mailboxPath1 = MailboxPath.forUser(USER_1, "mbx1");
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/ZipMailArchiveRestorer.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/ZipMailArchiveRestorer.java
index 90b96c5..a49c827 100644
--- a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/ZipMailArchiveRestorer.java
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/ZipMailArchiveRestorer.java
@@ -81,6 +81,9 @@ public class ZipMailArchiveRestorer implements MailArchiveRestorer {
                 case MAILBOX:
                     mailboxes.add((MailboxWithAnnotationsArchiveEntry) entry);
                     break;
+                case MESSAGE:
+                    //Ignore for know, TODO: implementation
+                    break;
                 case UNKNOWN:
                     String entryName = ((UnknownArchiveEntry) entry).getEntryName();
                     LOGGER.warn("unknown entry found in zip :" + entryName);
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZippedMailAccountIterator.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZippedMailAccountIterator.java
index 1b690f1..1688045 100644
--- a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZippedMailAccountIterator.java
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZippedMailAccountIterator.java
@@ -42,7 +42,6 @@ public class ZippedMailAccountIterator implements MailArchiveIterator {
     private static final Logger LOGGER = LoggerFactory.getLogger(ZippedMailAccountIterator.class);
     private static final List<MailboxAnnotation> NO_ANNOTATION = ImmutableList.of();
     private final ZipEntryIterator zipEntryIterator;
-    private Optional<MailboxWithAnnotationsArchiveEntry> currentMailBox;
     private Optional<ZipEntry> next;
 
     public ZippedMailAccountIterator(ZipEntryIterator zipEntryIterator) {
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java
index 58f4958..533150c 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java
@@ -239,10 +239,6 @@ class DefaultMailboxBackupTest implements MailboxMessageFixture {
         return MessageManager.AppendCommand.builder().withFlags(flags1).build(MESSAGE_1.getFullContent());
     }
 
-    private MessageManager.AppendCommand getMessage2AppendCommand() throws IOException {
-        return MessageManager.AppendCommand.builder().withFlags(flags1).build(MESSAGE_2.getFullContent());
-    }
-
     private MessageManager.AppendCommand getMessage1OtherUserAppendCommand() throws IOException {
         return MessageManager.AppendCommand.builder().withFlags(flags1).build(MESSAGE_1_OTHER_USER.getFullContent());
     }
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java
index 92681b0..d8b1b84 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java
@@ -39,6 +39,7 @@ import org.apache.commons.compress.archivers.zip.ZipExtraField;
 import org.apache.commons.compress.archivers.zip.ZipFile;
 import org.apache.commons.io.IOUtils;
 import org.apache.james.junit.TemporaryFolderExtension;
+import org.apache.james.mailbox.backup.ZipAssert.EntryChecks;
 import org.apache.james.mailbox.backup.zip.SizeExtraField;
 import org.apache.james.mailbox.backup.zip.UidExtraField;
 import org.junit.jupiter.api.BeforeEach;
@@ -618,7 +619,7 @@ public class ZipAssertTest {
 
             try (ZipFile assertedZipFile = zipFile(destination, firstEntry, secondEntry)) {
                 assertThatThrownBy(() -> assertThatZip(assertedZipFile)
-                    .allSatisfies(entry -> entry.hasName("entry 1")))
+                    .allSatisfies(entry -> EntryChecks.hasName("entry 1")))
                     .isInstanceOf(AssertionError.class);
             }
         }
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
index 38dae35..3863302 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
@@ -54,7 +54,7 @@ public class ElasticSearchSearcher {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchSearcher.class);
     private static final TimeValue TIMEOUT = TimeValue.timeValueMinutes(1);
-    private static final ImmutableList STORED_FIELDS = ImmutableList.of(JsonMessageConstants.MAILBOX_ID,
+    private static final ImmutableList<String> STORED_FIELDS = ImmutableList.of(JsonMessageConstants.MAILBOX_ID,
         JsonMessageConstants.UID, JsonMessageConstants.MESSAGE_ID);
 
     private final RestHighLevelClient client;
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java
index d246b35..bdae634 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/DomainUserMaildirMailboxManagerTest.java
@@ -36,10 +36,10 @@ public class DomainUserMaildirMailboxManagerTest extends MailboxManagerTest<Stor
     }
 
     @Nested
-    class BasicFeaturesTests extends MailboxManagerTest.BasicFeaturesTests {
+    class BasicFeaturesTests extends MailboxManagerTest<StoreMailboxManager>.BasicFeaturesTests {
         @Disabled("MAILBOX-389 Mailbox rename fails with Maildir")
         @Test
-        void renameMailboxShouldChangeTheMailboxPathOfAMailbox() {
+        protected void renameMailboxShouldChangeTheMailboxPathOfAMailbox() {
         }
     }
 
diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java
index d4d17dc..2af38dc 100644
--- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java
+++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/FullUserMaildirMailboxManagerTest.java
@@ -36,10 +36,10 @@ public class FullUserMaildirMailboxManagerTest extends MailboxManagerTest<StoreM
     }
 
     @Nested
-    class BasicFeaturesTests extends MailboxManagerTest.BasicFeaturesTests {
+    class BasicFeaturesTests extends MailboxManagerTest<StoreMailboxManager>.BasicFeaturesTests {
         @Disabled("MAILBOX-389 Mailbox rename fails with Maildir")
         @Test
-        void renameMailboxShouldChangeTheMailboxPathOfAMailbox() {
+        protected void renameMailboxShouldChangeTheMailboxPathOfAMailbox() {
         }
     }
 
diff --git a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
index 915f81b..74b9570 100644
--- a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
+++ b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
@@ -25,12 +25,10 @@ import java.util.function.Consumer;
 import org.apache.james.metrics.api.Metric;
 
 public class RecordingMetric implements Metric {
-    private final String name;
     private final AtomicInteger value;
     private final Consumer<Integer> publishCallback;
 
-    public RecordingMetric(String name, Consumer<Integer> publishCallback) {
-        this.name = name;
+    public RecordingMetric(Consumer<Integer> publishCallback) {
         this.value = new AtomicInteger();
         this.publishCallback = publishCallback;
     }
diff --git a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
index 7127816..f18b9a6 100644
--- a/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
+++ b/metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
@@ -39,7 +39,7 @@ public class RecordingMetricFactory implements MetricFactory {
 
     @Override
     public Metric generate(String name) {
-        return new RecordingMetric(name, executionValue -> counters.put(name, executionValue));
+        return new RecordingMetric(executionValue -> counters.put(name, executionValue));
     }
 
     @Override
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java
index ca0e54d..2b0eaee 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/AESPayloadCodec.java
@@ -36,8 +36,6 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.james.blob.objectstorage.crypto.CryptoConfig;
 import org.jclouds.io.Payloads;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.io.ByteSource;
 import com.google.common.io.FileBackedOutputStream;
@@ -47,7 +45,6 @@ import com.google.crypto.tink.subtle.AesGcmJce;
 
 public class AESPayloadCodec implements PayloadCodec {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(AESPayloadCodec.class);
     private static final byte[] EMPTY_ASSOCIATED_DATA = new byte[0];
     private static final int PBKDF2_ITERATIONS = 65536;
     private static final int KEY_SIZE = 256;
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
index 113d6b4..94605c5 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
@@ -114,7 +114,6 @@ public class ObjectStorageBlobsDAO implements BlobStore {
     }
 
     private Mono<BlobId> save(InputStream data, BlobId id) {
-        String containerName = this.containerName.value();
         HashingInputStream hashingInputStream = new HashingInputStream(Hashing.sha256(), data);
         Payload payload = payloadCodec.write(hashingInputStream);
         Blob blob = blobStore.blobBuilder(id.asString())
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
index 61101f4..1301a25 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
@@ -80,6 +80,7 @@ class GuiceJamesServerStartUpCheckTest {
 
         private static final String CHECK_NAME = "TestBlobExportMechanismStartUpCheck";
 
+        @SuppressWarnings("unused")
         private final BlobExportImplChoice blobExportImplChoice;
 
         @Inject
diff --git a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPModuleTest.java b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPModuleTest.java
index c4f2f6d..a0398a2 100644
--- a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPModuleTest.java
+++ b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPModuleTest.java
@@ -42,6 +42,7 @@ class JMAPModuleTest {
         private EnumSet<MailboxManager.MessageCapabilities> mockMessageCapabilities;
         private EnumSet<MailboxManager.SearchCapabilities> mockSearchCapabilities;
 
+        @SuppressWarnings("unchecked")
         @BeforeEach
         void beforeEach() {
             mockMailboxManager = mock(MailboxManager.class);
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java
index d313c9b..81f8958 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java
@@ -154,13 +154,17 @@ public class SmtpRandomStoringTest {
 
         awaitAtMostTenSeconds
             .untilAsserted(() -> checkMailboxesHaveBeenFilled(connections, numberOfMails));
+
+        connections.forEach(Throwing.consumer(IMAPMessageReader::close));
     }
 
     private IMAPMessageReader createIMAPConnection(String username) {
         try {
-            return new IMAPMessageReader()
+            IMAPMessageReader reader = new IMAPMessageReader();
+            reader
                 .connect(LOCALHOST_IP, imapProbe.getImapPort())
                 .login(username, PASSWORD);
+            return reader;
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
index 0fe2f42..595f938 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
@@ -75,7 +75,6 @@ public class AliasMappingTest {
     private static final String GROUP_ALIAS = GROUP + "-alias@" + DOMAIN;
 
     private static final String MESSAGE_CONTENT = "any text";
-    private static final String RRT_ERROR = "rrt-error";
     private static final MailRepositoryUrl RRT_ERROR_REPOSITORY = MailRepositoryUrl.from("file://var/mail/rrt-error/");
 
     private TemporaryJamesServer jamesServer;
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
index 4c05393..9c62274 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
@@ -57,6 +57,7 @@ import org.apache.james.jmap.api.access.AccessToken;
 import org.apache.james.jmap.categories.BasicFeature;
 import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.backup.ZipAssert;
+import org.apache.james.mailbox.backup.ZipAssert.EntryChecks;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.modules.MailboxProbeImpl;
@@ -451,7 +452,7 @@ public abstract class DeletedMessagesVaultTest {
 
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> entry.hasName(messageIdOfHomer + ".eml"));
+                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfHomer + ".eml"));
         }
     }
 
@@ -474,7 +475,7 @@ public abstract class DeletedMessagesVaultTest {
 
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> entry.hasName(messageIdOfHomer + ".eml"));
+                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfHomer + ".eml"));
         }
     }
 
@@ -499,7 +500,7 @@ public abstract class DeletedMessagesVaultTest {
 
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> entry.hasName(messageIdOfHomer + ".eml"));
+                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfHomer + ".eml"));
         }
     }
 
@@ -511,7 +512,6 @@ public abstract class DeletedMessagesVaultTest {
 
         bartSendMessageToHomerWithSubject(SECOND_SUBJECT);
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 2);
-        String secondMessageIdOfHomer = listMessageIdsForAccount(homerAccessToken).get(1);
 
         homerDeletesMessages(listMessageIdsForAccount(homerAccessToken));
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 0);
@@ -621,7 +621,7 @@ public abstract class DeletedMessagesVaultTest {
         String fileLocation = exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, bartAccessToken);
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> entry.hasName(messageIdOfNotExpiredMessage + ".eml"));
+                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfNotExpiredMessage + ".eml"));
         }
     }
 
@@ -707,7 +707,7 @@ public abstract class DeletedMessagesVaultTest {
         String fileLocation = exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, bartAccessToken);
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> entry.hasName(messageIdOfHomer + ".eml"));
+                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfHomer + ".eml"));
         }
     }
 
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
index 0247dd3..756bd2c 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
@@ -34,7 +34,6 @@ import javax.ws.rs.Produces;
 import org.apache.james.core.Domain;
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.User;
-import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.rrt.api.MappingAlreadyExistsException;
 import org.apache.james.rrt.api.RecipientRewriteTable;
@@ -84,16 +83,14 @@ public class GroupsRoutes implements Routes {
     private static final String ADDRESS_TYPE = "group";
 
     private final UsersRepository usersRepository;
-    private final DomainList domainList;
     private final JsonTransformer jsonTransformer;
     private final RecipientRewriteTable recipientRewriteTable;
 
     @Inject
     @VisibleForTesting
     GroupsRoutes(RecipientRewriteTable recipientRewriteTable, UsersRepository usersRepository,
-                 DomainList domainList, JsonTransformer jsonTransformer) {
+                 JsonTransformer jsonTransformer) {
         this.usersRepository = usersRepository;
-        this.domainList = domainList;
         this.jsonTransformer = jsonTransformer;
         this.recipientRewriteTable = recipientRewriteTable;
     }
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index ffc42f6..cd9f6e7 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -115,7 +115,7 @@ class GroupsRoutesTest {
             usersRepository = MemoryUsersRepository.withVirtualHosting();
             usersRepository.setDomainList(domainList);
             MappingSourceModule mappingSourceModule = new MappingSourceModule();
-            createServer(new GroupsRoutes(memoryRecipientRewriteTable, usersRepository, domainList, new JsonTransformer(mappingSourceModule)));
+            createServer(new GroupsRoutes(memoryRecipientRewriteTable, usersRepository, new JsonTransformer(mappingSourceModule)));
         }
 
         @Test
@@ -452,7 +452,7 @@ class GroupsRoutesTest {
             domainList = mock(DomainList.class);
             memoryRecipientRewriteTable.setDomainList(domainList);
             Mockito.when(domainList.containsDomain(any())).thenReturn(true);
-            createServer(new GroupsRoutes(memoryRecipientRewriteTable, userRepository, domainList, new JsonTransformer()));
+            createServer(new GroupsRoutes(memoryRecipientRewriteTable, userRepository, new JsonTransformer()));
         }
 
         @Test
diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java b/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java
index 6f33518..ad30a50 100644
--- a/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java
+++ b/third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java
@@ -49,7 +49,6 @@ public class Linshare {
 
     private Network network;
 
-    @SuppressWarnings("resource")
     public Linshare() {
         network = Network.newNetwork();
         linshareDatabase = createDockerDatabase();
@@ -90,7 +89,8 @@ public class Linshare {
         return "http://" + getIp() + ":" + getPort();
     }
 
-    private GenericContainer createDockerDatabase() {
+    @SuppressWarnings("resource")
+    private GenericContainer<?> createDockerDatabase() {
         return new GenericContainer<>("linagora/linshare-database:2.2")
             .withNetworkAliases("database", "linshare_database")
             .withEnv("PGDATA", "/var/lib/postgresql/data/pgdata")
@@ -99,26 +99,30 @@ public class Linshare {
             .withNetwork(network);
     }
 
-    private GenericContainer createDockerMongodb() {
+    @SuppressWarnings("resource")
+    private GenericContainer<?> createDockerMongodb() {
         return new GenericContainer<>("mongo:3.2")
             .withNetworkAliases("mongodb", "linshare_mongodb")
             .withCommand("mongod --smallfiles")
             .withNetwork(network);
     }
 
-    private GenericContainer createDockerLdap() {
+    @SuppressWarnings("resource")
+    private GenericContainer<?> createDockerLdap() {
         return new GenericContainer<>("linagora/linshare-ldap-for-tests:1.0")
             .withNetworkAliases("ldap")
             .withNetwork(network);
     }
 
-    private GenericContainer createDockerSmtp() {
+    @SuppressWarnings("resource")
+    private GenericContainer<?> createDockerSmtp() {
         return new GenericContainer<>(Images.FAKE_SMTP)
             .withNetworkAliases("smtp", "linshare_smtp")
             .withNetwork(network);
     }
 
-    private GenericContainer createDockerBackend() {
+    @SuppressWarnings("resource")
+    private GenericContainer<?> createDockerBackend() {
         return new GenericContainer<>(
             new ImageFromDockerfile()
                 .withFileFromClasspath("conf/log4j.properties", "backend/conf/log4j.properties")
@@ -142,7 +146,8 @@ public class Linshare {
             .withNetwork(network);
     }
 
-    private GenericContainer createLinshareBackendInit() {
+    @SuppressWarnings("resource")
+    private GenericContainer<?> createLinshareBackendInit() {
         return new GenericContainer<>("linagora/linshare-init:2.2")
             .withNetworkAliases("init")
             .withEnv("LS_HOST", "backend")
diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/client/LinshareAPITest.java b/third-party/linshare/src/test/java/org/apache/james/linshare/client/LinshareAPITest.java
index 85bc8d9..b93e4b8 100644
--- a/third-party/linshare/src/test/java/org/apache/james/linshare/client/LinshareAPITest.java
+++ b/third-party/linshare/src/test/java/org/apache/james/linshare/client/LinshareAPITest.java
@@ -255,7 +255,8 @@ class LinshareAPITest {
         return Files.createTempFile("linshare-api-test", ".temp").toFile();
     }
 
-    private List<Document> sharedDocs(List<ReceivedShare>...shares) {
+    @SafeVarargs
+    private final List<Document> sharedDocs(List<ReceivedShare>... shares) {
         return ImmutableList.copyOf(shares).stream()
             .flatMap(Collection::stream)
             .map(ReceivedShare::getDocument)


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


[james-project] 13/19: MAILBOX-351 ReIndexer should allow me to reIndex previous tasks failures

Posted by bt...@apache.org.
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 7643548684b672b5c58ac3629277b56eeedfe832
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 28 10:43:30 2019 +0700

    MAILBOX-351 ReIndexer should allow me to reIndex previous tasks failures
---
 ...iluresReIndexationTask.java => ErrorRecoveryIndexationTask.java} | 6 +++---
 .../main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java   | 2 +-
 .../java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java | 6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
similarity index 89%
rename from mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
rename to mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
index faf513c..cc6fb16 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
@@ -25,15 +25,15 @@ import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 
-public class PreviousFailuresReIndexationTask implements Task {
-    private static final String PREVIOUS_FAILURES_INDEXING = "ReIndexPreviousFailures";
+public class ErrorRecoveryIndexationTask implements Task {
+    private static final String PREVIOUS_FAILURES_INDEXING = "ErrorRecoveryIndexation";
 
     private final ReIndexerPerformer reIndexerPerformer;
     private final ReprocessingContextInformation additionalInformation;
     private final ReprocessingContext reprocessingContext;
     private final ReIndexingExecutionFailures previousFailures;
 
-    public PreviousFailuresReIndexationTask(ReIndexerPerformer reIndexerPerformer, ReIndexingExecutionFailures previousFailures) {
+    public ErrorRecoveryIndexationTask(ReIndexerPerformer reIndexerPerformer, ReIndexingExecutionFailures previousFailures) {
         this.reIndexerPerformer = reIndexerPerformer;
         this.previousFailures = previousFailures;
         this.reprocessingContext = new ReprocessingContext();
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
index 6b1cbd8..9244b91 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
@@ -99,7 +99,7 @@ public class ReIndexerImpl implements ReIndexer {
 
     @Override
     public Task reIndex(ReIndexingExecutionFailures previousFailures) {
-        return new PreviousFailuresReIndexationTask(reIndexerPerformer, previousFailures);
+        return new ErrorRecoveryIndexationTask(reIndexerPerformer, previousFailures);
     }
 
     private void validateIdExists(MailboxId mailboxId) throws MailboxException {
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
index fc3c701..2d9e100 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
@@ -1053,7 +1053,7 @@ class ReindexingRoutesTest {
                 .then()
                     .body("status", is("completed"))
                     .body("taskId", is(notNullValue()))
-                    .body("type", is("ReIndexPreviousFailures"))
+                    .body("type", is("ErrorRecoveryIndexation"))
                     .body("additionalInformation.successfullyReprocessMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
@@ -1097,7 +1097,7 @@ class ReindexingRoutesTest {
                 .then()
                     .body("status", is("completed"))
                     .body("taskId", is(notNullValue()))
-                    .body("type", is("ReIndexPreviousFailures"))
+                    .body("type", is("ErrorRecoveryIndexation"))
                     .body("additionalInformation.successfullyReprocessMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
@@ -1142,7 +1142,7 @@ class ReindexingRoutesTest {
                 .then()
                     .body("status", is("failed"))
                     .body("taskId", is(notNullValue()))
-                    .body("type", is("ReIndexPreviousFailures"))
+                    .body("type", is("ErrorRecoveryIndexation"))
                     .body("additionalInformation.successfullyReprocessMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(1))
                     .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))


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


[james-project] 03/19: JAMES-2766 Replace ES old version in documents

Posted by bt...@apache.org.
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 5649fbceeaa186dcb8f9a6fb8e13c811dc9bb914
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Mon May 27 10:20:10 2019 +0700

    JAMES-2766 Replace ES old version in documents
    
    replace old ES contact points from 9300 port to 9200 port
---
 JenkinsfileStressTests                                            | 2 +-
 README.adoc                                                       | 4 ++--
 .../apache/james/backends/es/ElasticSearchConfigurationTest.java  | 8 ++++----
 .../package/etc/james/templates/elasticsearch.properties          | 2 +-
 dockerfiles/run/docker-compose.yml                                | 4 +++-
 .../cassandra-ldap/destination/conf/elasticsearch.properties      | 2 +-
 .../destination/conf/elasticsearch.properties                     | 2 +-
 .../cassandra-rabbitmq/destination/conf/elasticsearch.properties  | 2 +-
 .../run/guice/cassandra/destination/conf/elasticsearch.properties | 2 +-
 .../markdown/server/install/guice-cassandra-rabbitmq-swift.md     | 6 +++---
 src/site/markdown/server/install/guice-cassandra.md               | 6 +++---
 src/site/xdoc/server/config-elasticsearch.xml                     | 2 +-
 src/site/xdoc/server/quick-start-cassandra.xml                    | 2 +-
 13 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/JenkinsfileStressTests b/JenkinsfileStressTests
index 27f3786..befc698 100644
--- a/JenkinsfileStressTests
+++ b/JenkinsfileStressTests
@@ -56,7 +56,7 @@ pipeline {
                     docker.withTool('docker') {
                         sh "docker run -d --name=cassandra cassandra:3.11.3"
                         sh "docker run -d --name=rabbitmq rabbitmq:3.7.7-management"
-                        sh "docker run -d --name=elasticsearch elasticsearch:2.4.6"
+                        sh "docker run -d --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2"
 
                         sh "docker run -d --hostname HOSTNAME -p 25:25 -p 8081:80 -p 110:110 -p 143:143 -p 465:465 -p 587:587 -p 993:993 --link cassandra:cassandra --link rabbitmq:rabbitmq --link elasticsearch:elasticsearch --name james_run -t james_run"
                         try {
diff --git a/README.adoc b/README.adoc
index 7a27e28..0c9946e 100644
--- a/README.adoc
+++ b/README.adoc
@@ -229,7 +229,7 @@ You need a running *swift* objectstorage in docker. To achieve this run:
 
 You need a running *ElasticSearch* in docker. To achieve this run:
 
-    $ docker run -d --name=elasticsearch elasticsearch:2.4.6
+    $ docker run -d --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2
 
 If you want to use all the JMAP search capabilities, you may also need to start Tika:
 
@@ -298,7 +298,7 @@ You need a running *cassandra* in docker. To achieve this run:
 
 You need a running *ElasticSearch* in docker. To achieve this run:
 
-    $ docker run -d --name=elasticsearch elasticsearch:2.4.6
+    $ docker run -d --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2
 
 If you want to use all the JMAP search capabilities, you may also need to start Tika:
 
diff --git a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
index c53f759..c970bd3 100644
--- a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
+++ b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchConfigurationTest.java
@@ -182,7 +182,7 @@ public class ElasticSearchConfigurationTest {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         String hostname = "myHost";
         configuration.addProperty("elasticsearch.masterHost", hostname);
-        int port = 9300;
+        int port = 9200;
         configuration.addProperty("elasticsearch.port", port);
 
         ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
@@ -196,7 +196,7 @@ public class ElasticSearchConfigurationTest {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         String hostname = "myHost";
         configuration.addProperty("elasticsearch.masterHost", hostname);
-        int port = 9300;
+        int port = 9200;
         configuration.addProperty("elasticsearch.port", port);
 
         ElasticSearchConfiguration elasticSearchConfiguration = ElasticSearchConfiguration.fromProperties(configuration);
@@ -210,7 +210,7 @@ public class ElasticSearchConfigurationTest {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         String hostname = "myHost";
         configuration.addProperty("elasticsearch.masterHost", hostname);
-        int port = 9300;
+        int port = 9200;
         configuration.addProperty("elasticsearch.port", port);
         configuration.addProperty("elasticsearch.clusterName", null);
 
@@ -225,7 +225,7 @@ public class ElasticSearchConfigurationTest {
         PropertiesConfiguration configuration = new PropertiesConfiguration();
         String hostname = "myHost";
         configuration.addProperty("elasticsearch.masterHost", hostname);
-        int port = 9300;
+        int port = 9200;
         configuration.addProperty("elasticsearch.port", port);
         String clusterName = "myClusterName";
         configuration.addProperty("elasticsearch.clusterName", clusterName);
diff --git a/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties b/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
index 8e7e4f1..4848809 100644
--- a/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
+++ b/dockerfiles/packaging/guice/cassandra/package/etc/james/templates/elasticsearch.properties
@@ -24,7 +24,7 @@ elasticsearch.masterHost=127.0.0.1
 elasticsearch.port=9200
 
 # You can alternatively provide a list of hosts following this format :
-# elasticsearch.hosts=host1:9300,host2:9300
+# elasticsearch.hosts=host1:9200,host2:9200
 # elasticsearch.clusterName=cluster
 
 elasticsearch.nb.shards=5
diff --git a/dockerfiles/run/docker-compose.yml b/dockerfiles/run/docker-compose.yml
index 6bdbd07..3b847fb 100644
--- a/dockerfiles/run/docker-compose.yml
+++ b/dockerfiles/run/docker-compose.yml
@@ -23,7 +23,9 @@ services:
       - "993:993"
 
   elasticsearch:
-    image: elasticsearch:2.4.6
+    image: elasticsearch:6.7.2
+    environment:
+      - discovery.type=single-node
 
   cassandra:
     image: cassandra:3.11.3
diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
index 526dc1b..08585b4 100644
--- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/elasticsearch.properties
@@ -24,7 +24,7 @@ elasticsearch.masterHost=elasticsearch
 elasticsearch.port=9200
 
 # You can alternatively provide a list of hosts following this format :
-# elasticsearch.hosts=host1:9300,host2:9300
+# elasticsearch.hosts=host1:9200,host2:9200
 # elasticsearch.clusterName=cluster
 
 elasticsearch.nb.shards=5
diff --git a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/elasticsearch.properties
index 526dc1b..08585b4 100644
--- a/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra-rabbitmq-ldap/destination/conf/elasticsearch.properties
@@ -24,7 +24,7 @@ elasticsearch.masterHost=elasticsearch
 elasticsearch.port=9200
 
 # You can alternatively provide a list of hosts following this format :
-# elasticsearch.hosts=host1:9300,host2:9300
+# elasticsearch.hosts=host1:9200,host2:9200
 # elasticsearch.clusterName=cluster
 
 elasticsearch.nb.shards=5
diff --git a/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/elasticsearch.properties
index 526dc1b..08585b4 100644
--- a/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra-rabbitmq/destination/conf/elasticsearch.properties
@@ -24,7 +24,7 @@ elasticsearch.masterHost=elasticsearch
 elasticsearch.port=9200
 
 # You can alternatively provide a list of hosts following this format :
-# elasticsearch.hosts=host1:9300,host2:9300
+# elasticsearch.hosts=host1:9200,host2:9200
 # elasticsearch.clusterName=cluster
 
 elasticsearch.nb.shards=5
diff --git a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
index 526dc1b..08585b4 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
@@ -24,7 +24,7 @@ elasticsearch.masterHost=elasticsearch
 elasticsearch.port=9200
 
 # You can alternatively provide a list of hosts following this format :
-# elasticsearch.hosts=host1:9300,host2:9300
+# elasticsearch.hosts=host1:9200,host2:9200
 # elasticsearch.clusterName=cluster
 
 elasticsearch.nb.shards=5
diff --git a/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md b/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md
index 46fe890..e848746 100644
--- a/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md
+++ b/src/site/markdown/server/install/guice-cassandra-rabbitmq-swift.md
@@ -5,7 +5,7 @@
 ### Requirements
 
  - Java 8 SDK
- - Docker ∕ ElasticSearch 2.4.6, RabbitMQ Management 3.3.7, Swift ObjectStorage 2.15.1 and Cassandra 3.11.3
+ - Docker ∕ ElasticSearch 6.7.2, RabbitMQ Management 3.3.7, Swift ObjectStorage 2.15.1 and Cassandra 3.11.3
  - Maven 3
 
 ### Building the artifacts
@@ -26,7 +26,7 @@ mvn clean install
 ### Requirements
 
  * Cassandra 3.11.3
- * ElasticSearch 2.4.6
+ * ElasticSearch 6.7.2
  * RabbitMQ-Management 3.7.7
  * Swift ObjectStorage 2.15.1 or Scality S3 server or AWS S3
 
@@ -48,7 +48,7 @@ You need to have a Cassandra, ElasticSearch and RabbitMQ instance running. You c
 
 ```bash
 $ docker run -d --port 9042:9042 --name=cassandra cassandra:3.11.3
-$ docker run -d --port 9200:9200 --port 9300:9300 --name=elasticsearch elasticsearch:2.4.6
+$ docker run -d --port 9200:9200 --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2
 $ docker run -d --port 5672:5672 --port 15672:15672 --name=rabbitmq rabbitmq:3.7.7-management
 $ docker run -d --port 5000:5000 --port 8080:8080 --port 35357:35357 --name=swift linagora/openstack-keystone-swift:pike
 ```
diff --git a/src/site/markdown/server/install/guice-cassandra.md b/src/site/markdown/server/install/guice-cassandra.md
index 1706039..0edaf26 100644
--- a/src/site/markdown/server/install/guice-cassandra.md
+++ b/src/site/markdown/server/install/guice-cassandra.md
@@ -5,7 +5,7 @@
 ### Requirements
 
  - Java 8 SDK
- - Docker ∕ ElasticSearch 2.4.6 and Cassandra 3.11.3
+ - Docker ∕ ElasticSearch 6.7.2 and Cassandra 3.11.3
  - Maven 3
 
 ### Building the artifacts
@@ -26,7 +26,7 @@ mvn clean install
 ### Requirements
 
  * Cassandra 3.11.3
- * ElasticSearch 2.4.6
+ * ElasticSearch 6.7.2
 
 ### James Launch
 
@@ -46,7 +46,7 @@ You need to have a Cassandra and an ElasticSearch instance running. You can eith
 
 ```bash
 $ docker run -d --port 9042:9042 --name=cassandra cassandra:3.11.3
-$ docker run -d --port 9200:9200 --port 9300:9300 --name=elasticsearch elasticsearch:2.4.6
+$ docker run -d --port 9200:9200 --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2
 ```
 
 Once everything is set up, you just have to run the jar with:
diff --git a/src/site/xdoc/server/config-elasticsearch.xml b/src/site/xdoc/server/config-elasticsearch.xml
index 39fd40f..76b599f 100644
--- a/src/site/xdoc/server/config-elasticsearch.xml
+++ b/src/site/xdoc/server/config-elasticsearch.xml
@@ -44,7 +44,7 @@
 
       <dl>
           <dt><strong>elasticsearch.hosts</strong></dt>
-          <dd>List of comma separated hosts. An host is composed of an address and a port separated by a ':'. Example : elasticsearch.hosts=host1:9300,host2:9300</dd>
+          <dd>List of comma separated hosts. An host is composed of an address and a port separated by a ':'. Example : elasticsearch.hosts=host1:9200,host2:9200</dd>
       </dl>
 
       Other options includes :
diff --git a/src/site/xdoc/server/quick-start-cassandra.xml b/src/site/xdoc/server/quick-start-cassandra.xml
index a47a5a9..1469f60 100644
--- a/src/site/xdoc/server/quick-start-cassandra.xml
+++ b/src/site/xdoc/server/quick-start-cassandra.xml
@@ -69,7 +69,7 @@ You may skip this part if you already have a running Cassandra on your network.
 3.2. Deploy ElasticSearch (optional)
 You may skip this part if you already have a running ElasticSearch on your network.
 
-<i>$ docker run --detach=true --name=elasticsearch elasticsearch:2.4.6</i>
+<i>$ docker run --detach=true --name=elasticsearch --env 'discovery.type=single-node' elasticsearch:6.7.2</i>
 
 Step 4: Configure
 #################


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


[james-project] 17/19: JAMES-2763 ElasticSearchStartUpCheck impl

Posted by bt...@apache.org.
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 8c6f24c90cacdb9afddc8f93ac7c90551344ad93
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Mon May 27 18:00:28 2019 +0700

    JAMES-2763 ElasticSearchStartUpCheck impl
---
 .../mailbox/ElasticSearchMailboxModule.java        |  5 ++
 .../modules/mailbox/ElasticSearchStartUpCheck.java | 86 ++++++++++++++++++++++
 ...esWithNonCompatibleElasticSearchServerTest.java | 13 +++-
 server/container/lifecycle-api/pom.xml             | 10 +++
 .../apache/james/lifecycle/api/StartUpCheck.java   | 19 +++++
 .../james/lifecycle/api/StartUpCheckTest.java      | 37 ++++++++++
 6 files changed, 168 insertions(+), 2 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 9c43034..46e1803 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -37,6 +37,7 @@ import org.apache.commons.lang3.time.DurationFormatUtils;
 import org.apache.james.backends.es.ClientProviderImpl;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.lifecycle.api.StartUpCheck;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.elasticsearch.ElasticSearchMailboxConfiguration;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
@@ -134,6 +135,10 @@ public class ElasticSearchMailboxModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class)
             .addBinding()
             .to(ElasticSearchMailboxIndexCreationPerformer.class);
+
+        Multibinder.newSetBinder(binder(), StartUpCheck.class)
+            .addBinding()
+            .to(ElasticSearchStartUpCheck.class);
     }
 
     @Provides
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchStartUpCheck.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchStartUpCheck.java
new file mode 100644
index 0000000..3af12d9
--- /dev/null
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchStartUpCheck.java
@@ -0,0 +1,86 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.modules.mailbox;
+
+import java.io.IOException;
+
+import javax.inject.Inject;
+
+import org.apache.james.backends.es.ElasticSearchConfiguration;
+import org.apache.james.lifecycle.api.StartUpCheck;
+import org.elasticsearch.Version;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ElasticSearchStartUpCheck implements StartUpCheck {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchConfiguration.class);
+
+    private static final Version RECOMMENDED_ES_VERSION = Version.fromString("6.7.2");
+    private static final String VERSION_CHECKING_ERROR_MESSAGE = "Error when checking ES version";
+
+    public static final String CHECK_NAME = "ElasticSearchStartUpCheck";
+
+    private final RestHighLevelClient client;
+
+    @Inject
+    private ElasticSearchStartUpCheck(RestHighLevelClient client) {
+        this.client = client;
+    }
+
+    @Override
+    public CheckResult check() {
+        try {
+            Version esVersion = client.info(RequestOptions.DEFAULT)
+                .getVersion();
+            if (esVersion.isCompatible(RECOMMENDED_ES_VERSION)) {
+                return CheckResult.builder()
+                    .checkName(checkName())
+                    .resultType(ResultType.GOOD)
+                    .build();
+            }
+            String esVersionCompatibilityWarn = String.format(
+                "ES version(%s) is not compatible with the recommendation(%s)",
+                esVersion.toString(),
+                RECOMMENDED_ES_VERSION.toString());
+            LOGGER.warn(esVersionCompatibilityWarn);
+
+            return CheckResult.builder()
+                .checkName(checkName())
+                .resultType(ResultType.BAD)
+                .description(esVersionCompatibilityWarn)
+                .build();
+        } catch (IOException e) {
+            LOGGER.error(VERSION_CHECKING_ERROR_MESSAGE, e);
+            return CheckResult.builder()
+                .checkName(checkName())
+                .resultType(ResultType.BAD)
+                .description(VERSION_CHECKING_ERROR_MESSAGE + ": " + e.getMessage())
+                .build();
+        }
+    }
+
+    @Override
+    public String checkName() {
+        return CHECK_NAME;
+    }
+}
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
index 3a4c0b5..22830c3 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
@@ -24,11 +24,13 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.backends.es.DockerElasticSearch;
+import org.apache.james.lifecycle.api.StartUpCheck;
+import org.apache.james.lifecycle.api.StartUpCheck.CheckResult;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.PDFTextExtractor;
 import org.apache.james.modules.TestJMAPServerModule;
+import org.apache.james.modules.mailbox.ElasticSearchStartUpCheck;
 import org.apache.james.util.docker.Images;
-import org.elasticsearch.ElasticsearchStatusException;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -58,7 +60,14 @@ class JamesWithNonCompatibleElasticSearchServerTest {
     @Test
     void jamesShouldStopWhenStartingWithANonCompatibleElasticSearchServer(GuiceJamesServer server) throws Exception {
         assertThatThrownBy(server::start)
-            .isInstanceOf(ElasticsearchStatusException.class);
+            .isInstanceOfSatisfying(
+                StartUpChecksPerformer.StartUpChecksException.class,
+                ex -> assertThat(ex.getBadChecks())
+                    .containsOnly(CheckResult.builder()
+                        .checkName(ElasticSearchStartUpCheck.CHECK_NAME)
+                        .resultType(StartUpCheck.ResultType.BAD)
+                        .description("ES version(2.4.6) is not compatible with the recommendation(6.7.2)")
+                        .build()));
 
         assertThat(server.isStarted())
             .isFalse();
diff --git a/server/container/lifecycle-api/pom.xml b/server/container/lifecycle-api/pom.xml
index 4c9e47a..8de68af 100644
--- a/server/container/lifecycle-api/pom.xml
+++ b/server/container/lifecycle-api/pom.xml
@@ -42,6 +42,16 @@
             <artifactId>commons-configuration</artifactId>
         </dependency>
         <dependency>
+            <groupId>nl.jqno.equalsverifier</groupId>
+            <artifactId>equalsverifier</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>jcl-over-slf4j</artifactId>
         </dependency>
diff --git a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java
index 87c3420..af0d013 100644
--- a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java
+++ b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.lifecycle.api;
 
+import java.util.Objects;
 import java.util.Optional;
 
 import com.google.common.base.MoreObjects;
@@ -105,6 +106,24 @@ public interface StartUpCheck {
             return resultType.equals(ResultType.GOOD);
         }
 
+
+        @Override
+        public final boolean equals(Object o) {
+            if (o instanceof CheckResult) {
+                CheckResult that = (CheckResult) o;
+
+                return Objects.equals(this.name, that.name)
+                    && Objects.equals(this.resultType, that.resultType)
+                    && Objects.equals(this.description, that.description);
+            }
+            return false;
+        }
+
+        @Override
+        public final int hashCode() {
+            return Objects.hash(name, resultType, description);
+        }
+
         @Override
         public String toString() {
             return MoreObjects.toStringHelper(this)
diff --git a/server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/StartUpCheckTest.java b/server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/StartUpCheckTest.java
new file mode 100644
index 0000000..3aca485
--- /dev/null
+++ b/server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/StartUpCheckTest.java
@@ -0,0 +1,37 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.lifecycle.api;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+class StartUpCheckTest {
+
+    @Nested
+    class CheckResultTest {
+        @Test
+        void shouldMatchBeanContract() {
+            EqualsVerifier.forClass(StartUpCheck.CheckResult.class)
+                .verify();
+        }
+    }
+}
\ No newline at end of file


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


[james-project] 12/19: MAILBOX-351 Test ReIndexing tasks information upon failures

Posted by bt...@apache.org.
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 a5214fd6534ca45807498d4cab0597487dd35d3c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri May 24 13:59:40 2019 +0700

    MAILBOX-351 Test ReIndexing tasks information upon failures
---
 .../indexer/ReprocessingContextInformation.java    |   2 +-
 .../webadmin/routes/ReindexingRoutesTest.java      | 153 ++++++++++++++++++++-
 2 files changed, 152 insertions(+), 3 deletions(-)

diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java
index 6590e43..c3bc0ae 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformation.java
@@ -49,7 +49,7 @@ public class ReprocessingContextInformation implements TaskExecutionDetails.Addi
         return reprocessingContext.failures();
     }
 
-    @JsonProperty
+    @JsonProperty("failures")
     public SerializableReIndexingExecutionFailures failuresAsJson() {
         return SerializableReIndexingExecutionFailures.from(failures());
     }
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
index 091ddb9..fc3c701 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ReindexingRoutesTest.java
@@ -197,6 +197,40 @@ class ReindexingRoutesTest {
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
             }
+
+            @Test
+            void fullReprocessingShouldReturnTaskDetailsWhenFailing() throws Exception {
+                MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+                MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
+                ComposedMessageId composedMessageId = mailboxManager.getMailbox(INBOX, systemSession)
+                    .appendMessage(
+                        MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+                        systemSession);
+
+                doThrow(new RuntimeException())
+                    .when(searchIndex)
+                    .add(any(MailboxSession.class), any(Mailbox.class), any(MailboxMessage.class));
+
+                String taskId = with()
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                long uidAsLong = composedMessageId.getUid().asLong();
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(taskId + "/await")
+                .then()
+                    .body("status", is("failed"))
+                    .body("taskId", is(notNullValue()))
+                    .body("type", is(FullReindexingTask.FULL_RE_INDEXING))
+                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.failedReprocessedMailCount", is(1))
+                    .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()));
+            }
         }
 
         @Nested
@@ -344,6 +378,42 @@ class ReindexingRoutesTest {
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
             }
+
+            @Test
+            void userReprocessingShouldReturnTaskDetailsWhenFailing() throws Exception {
+                MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+                MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
+                ComposedMessageId composedMessageId = mailboxManager.getMailbox(INBOX, systemSession)
+                    .appendMessage(
+                        MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+                        systemSession);
+
+                doThrow(new RuntimeException())
+                    .when(searchIndex)
+                    .add(any(MailboxSession.class), any(Mailbox.class), any(MailboxMessage.class));
+
+                String taskId = with()
+                    .queryParam("user", USERNAME)
+                    .queryParam("task", "reIndex")
+                    .post("/mailboxes")
+                    .jsonPath()
+                    .get("taskId");
+
+                long uidAsLong = composedMessageId.getUid().asLong();
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(taskId + "/await")
+                .then()
+                    .body("status", is("failed"))
+                    .body("taskId", is(notNullValue()))
+                    .body("type", is(UserReindexingTask.USER_RE_INDEXING))
+                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.failedReprocessedMailCount", is(1))
+                    .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()));
+            }
         }
 
         @Nested
@@ -498,8 +568,42 @@ class ReindexingRoutesTest {
                     .body("additionalInformation.successfullyReprocessMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
                     .body("startedDate", is(notNullValue()))
-                    .body("submitDate", is(notNullValue()))
-                    .body("completedDate", is(notNullValue()));
+                    .body("submitDate", is(notNullValue()));
+            }
+
+            @Test
+            void mailboxReprocessingShouldReturnTaskDetailsWhenFailing() throws Exception {
+                MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+                MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
+                ComposedMessageId composedMessageId = mailboxManager.getMailbox(INBOX, systemSession)
+                    .appendMessage(
+                        MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+                        systemSession);
+
+                doThrow(new RuntimeException())
+                    .when(searchIndex)
+                    .add(any(MailboxSession.class), any(Mailbox.class), any(MailboxMessage.class));
+
+                String taskId = with()
+                    .queryParam("task", "reIndex")
+                    .post("/mailboxes/" + mailboxId.serialize())
+                    .jsonPath()
+                    .get("taskId");
+
+                long uidAsLong = composedMessageId.getUid().asLong();
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(taskId + "/await")
+                .then()
+                    .body("status", is("failed"))
+                    .body("taskId", is(notNullValue()))
+                    .body("type", is(SingleMailboxReindexingTask.MAILBOX_RE_INDEXING))
+                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.failedReprocessedMailCount", is(1))
+                    .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()));
             }
         }
 
@@ -1000,6 +1104,51 @@ class ReindexingRoutesTest {
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
             }
+
+            @Test
+            void mailboxReprocessingShouldReturnTaskDetailsWhenFailing() throws Exception {
+                MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+                MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
+                ComposedMessageId composedMessageId = mailboxManager.getMailbox(INBOX, systemSession)
+                    .appendMessage(
+                        MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+                        systemSession);
+
+                doThrow(new RuntimeException())
+                    .when(searchIndex)
+                    .add(any(MailboxSession.class), any(Mailbox.class), any(MailboxMessage.class));
+
+                String taskId = with()
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                with()
+                    .basePath(TasksRoutes.BASE)
+                    .get(taskId + "/await");
+
+                String fixingTaskId = with()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                    .queryParam("task", "reIndex")
+                    .post("/mailboxes")
+                    .jsonPath()
+                    .get("taskId");
+
+                long uidAsLong = composedMessageId.getUid().asLong();
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(fixingTaskId + "/await")
+                .then()
+                    .body("status", is("failed"))
+                    .body("taskId", is(notNullValue()))
+                    .body("type", is("ReIndexPreviousFailures"))
+                    .body("additionalInformation.successfullyReprocessMailCount", is(0))
+                    .body("additionalInformation.failedReprocessedMailCount", is(1))
+                    .body("additionalInformation.failures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()));
+            }
         }
 
         @Nested


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


[james-project] 06/19: MAILBOX-351 Interface for task information providing failures details

Posted by bt...@apache.org.
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 2fd5f4c871114eab30f46834a56801e14f357389
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu May 23 11:49:17 2019 +0700

    MAILBOX-351 Interface for task information providing failures details
---
 .../mailbox/tools/indexer/FullReindexingTask.java  |  5 +++-
 .../tools/indexer/IndexingDetailInformation.java   | 28 ++++++++++++++++++++++
 .../indexer/PreviousFailuresReIndexationTask.java  |  2 +-
 .../tools/indexer/SingleMailboxReindexingTask.java |  5 +++-
 .../mailbox/tools/indexer/UserReindexingTask.java  |  9 ++++++-
 5 files changed, 45 insertions(+), 4 deletions(-)

diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
index a9ebec8..848f8c7 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
@@ -31,21 +31,24 @@ public class FullReindexingTask implements Task {
 
     public static final String FULL_RE_INDEXING = "FullReIndexing";
 
-    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
         private final ReprocessingContext reprocessingContext;
 
         AdditionalInformation(ReprocessingContext reprocessingContext) {
             this.reprocessingContext = reprocessingContext;
         }
 
+        @Override
         public int getSuccessfullyReprocessMailCount() {
             return reprocessingContext.successfullyReprocessedMailCount();
         }
 
+        @Override
         public int getFailedReprocessedMailCount() {
             return reprocessingContext.failedReprocessingMailCount();
         }
 
+        @Override
         public ReIndexingExecutionFailures failures() {
             return reprocessingContext.failures();
         }
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/IndexingDetailInformation.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/IndexingDetailInformation.java
new file mode 100644
index 0000000..063092a
--- /dev/null
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/IndexingDetailInformation.java
@@ -0,0 +1,28 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.mailbox.tools.indexer;
+
+public interface IndexingDetailInformation {
+    int getSuccessfullyReprocessMailCount();
+
+    int getFailedReprocessedMailCount();
+
+    ReIndexingExecutionFailures failures();
+}
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
index ceed5cd..a64b2d7 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/PreviousFailuresReIndexationTask.java
@@ -27,7 +27,7 @@ import org.apache.james.task.TaskExecutionDetails;
 public class PreviousFailuresReIndexationTask implements Task {
     public static final String PREVIOUS_FAILURES_INDEXING = "ReIndexPreviousFailures";
 
-    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
         private final ReprocessingContext reprocessingContext;
 
         AdditionalInformation(ReprocessingContext reprocessingContext) {
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
index 138f8a4..9a66481 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
@@ -31,7 +31,7 @@ public class SingleMailboxReindexingTask implements Task {
 
     public static final String MAILBOX_RE_INDEXING = "mailboxReIndexing";
 
-    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
         private final MailboxId mailboxId;
         private final ReprocessingContext reprocessingContext;
 
@@ -45,14 +45,17 @@ public class SingleMailboxReindexingTask implements Task {
             return mailboxId.serialize();
         }
 
+        @Override
         public int getSuccessfullyReprocessMailCount() {
             return reprocessingContext.successfullyReprocessedMailCount();
         }
 
+        @Override
         public int getFailedReprocessedMailCount() {
             return reprocessingContext.failedReprocessingMailCount();
         }
 
+        @Override
         public ReIndexingExecutionFailures failures() {
             return reprocessingContext.failures();
         }
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
index dab53e7..4088db2 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
@@ -32,7 +32,7 @@ public class UserReindexingTask implements Task {
 
     public static final String USER_RE_INDEXING = "userReIndexing";
 
-    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
+    public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
         private final ReprocessingContext reprocessingContext;
         private final User user;
 
@@ -41,14 +41,21 @@ public class UserReindexingTask implements Task {
             this.user = user;
         }
 
+        @Override
         public int getSuccessfullyReprocessMailCount() {
             return reprocessingContext.successfullyReprocessedMailCount();
         }
 
+        @Override
         public int getFailedReprocessedMailCount() {
             return reprocessingContext.failedReprocessingMailCount();
         }
 
+        @Override
+        public ReIndexingExecutionFailures failures() {
+            return reprocessingContext.failures();
+        }
+
         public String getUser() {
             return user.asString();
         }


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