You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/07/03 02:04:08 UTC

[james-project] 13/15: JAMES-3184 Add serialized info for reindexing tasks RunningOptions

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 ce9d7ba6ab5b3af21205ddc20d84013c7c76adb9
Author: LanKhuat <kh...@gmail.com>
AuthorDate: Wed Jul 1 16:09:23 2020 +0700

    JAMES-3184 Add serialized info for reindexing tasks RunningOptions
---
 .../apache/james/mailbox/indexer/ReIndexer.java    |   4 -
 .../WebAdminReprocessingContextInformationDTO.java |  21 ++--
 ...lboxReindexingTaskAdditionalInformationDTO.java |   9 +-
 ...UserReindexingTaskAdditionalInformationDTO.java |   8 ++
 ...AdminReprocessingContextInformationDTOTest.java |   2 +
 .../WebAdminSingleMailboxReprocessingDTOTest.java  |   1 +
 .../dto/WebAdminUserReprocessingDTOTest.java       |   1 +
 .../james/webadmin/routes/MailboxesRoutesTest.java | 136 +++++++++++++++++++++
 .../webadmin/routes/UserMailboxesRoutesTest.java   |  43 +++++++
 9 files changed, 213 insertions(+), 12 deletions(-)

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 60c08a4..e953059 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
@@ -46,10 +46,6 @@ public interface ReIndexer {
                 return this;
             }
 
-            public Builder messagesPerSeconds(int messagesPerSecond) {
-                return messagesPerSeconds(Optional.of(messagesPerSecond));
-            }
-
             public Builder mode(Optional<Mode> mode) {
                 this.mode = mode;
                 return this;
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTO.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTO.java
index 124fec3..89efaeb 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTO.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTO.java
@@ -30,6 +30,7 @@ import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
 import org.apache.mailbox.tools.indexer.ErrorRecoveryIndexationTask;
 import org.apache.mailbox.tools.indexer.FullReindexingTask;
 import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO;
+import org.apache.mailbox.tools.indexer.RunningOptionsDTO;
 
 import com.github.steveash.guavate.Guavate;
 
@@ -43,6 +44,7 @@ public class WebAdminReprocessingContextInformationDTO implements AdditionalInfo
                 })
                 .toDTOConverter((details, type) -> new WebAdminErrorRecoveryIndexationDTO(
                     type,
+                    RunningOptionsDTO.toDTO(details.getRunningOptions()),
                     details.getSuccessfullyReprocessedMailCount(),
                     details.getFailedReprocessedMailCount(),
                     details.failures(),
@@ -51,9 +53,9 @@ public class WebAdminReprocessingContextInformationDTO implements AdditionalInfo
                 .withFactory(AdditionalInformationDTOModule::new);
         }
 
-        WebAdminErrorRecoveryIndexationDTO(String type, int successfullyReprocessedMailCount, int failedReprocessedMailCount,
+        WebAdminErrorRecoveryIndexationDTO(String type, RunningOptionsDTO runningOptionsDTO, int successfullyReprocessedMailCount, int failedReprocessedMailCount,
                                            ReIndexingExecutionFailures failures, Instant timestamp) {
-            super(type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+            super(type, runningOptionsDTO, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
         }
     }
 
@@ -66,6 +68,7 @@ public class WebAdminReprocessingContextInformationDTO implements AdditionalInfo
                 })
                 .toDTOConverter((details, type) -> new WebAdminFullIndexationDTO(
                     type,
+                    RunningOptionsDTO.toDTO(details.getRunningOptions()),
                     details.getSuccessfullyReprocessedMailCount(),
                     details.getFailedReprocessedMailCount(),
                     details.failures(),
@@ -74,25 +77,25 @@ public class WebAdminReprocessingContextInformationDTO implements AdditionalInfo
                 .withFactory(AdditionalInformationDTOModule::new);
         }
 
-        WebAdminFullIndexationDTO(String type, int successfullyReprocessedMailCount, int failedReprocessedMailCount,
+        WebAdminFullIndexationDTO(String type, RunningOptionsDTO runningOptions, int successfullyReprocessedMailCount, int failedReprocessedMailCount,
                                   ReIndexingExecutionFailures failures, Instant timestamp) {
-            super(type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+            super(type, runningOptions, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
         }
-
     }
 
     protected final String type;
+    protected final RunningOptionsDTO runningOptions;
     protected final int successfullyReprocessedMailCount;
     protected final int failedReprocessedMailCount;
     protected final SerializableReIndexingExecutionFailures messageFailures;
     private final List<String> mailboxFailures;
     protected final Instant timestamp;
 
-
-    WebAdminReprocessingContextInformationDTO(String type, int successfullyReprocessedMailCount, int failedReprocessedMailCount,
+    WebAdminReprocessingContextInformationDTO(String type, RunningOptionsDTO runningOptions, int successfullyReprocessedMailCount, int failedReprocessedMailCount,
                                               ReIndexingExecutionFailures failures,
                                               Instant timestamp) {
         this.type = type;
+        this.runningOptions = runningOptions;
         this.successfullyReprocessedMailCount = successfullyReprocessedMailCount;
         this.failedReprocessedMailCount = failedReprocessedMailCount;
         this.messageFailures = SerializableReIndexingExecutionFailures.from(failures);
@@ -102,6 +105,10 @@ public class WebAdminReprocessingContextInformationDTO implements AdditionalInfo
         this.timestamp = timestamp;
     }
 
+    public RunningOptionsDTO getRunningOptions() {
+        return runningOptions;
+    }
+
     public int getSuccessfullyReprocessedMailCount() {
         return successfullyReprocessedMailCount;
     }
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
index 19733ae..d6348e1 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
@@ -27,6 +27,7 @@ import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+import org.apache.mailbox.tools.indexer.RunningOptionsDTO;
 import org.apache.mailbox.tools.indexer.SingleMailboxReindexingTask;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
@@ -42,6 +43,7 @@ public class WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO impleme
             .toDTOConverter((details, type) -> new WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO(
                 type,
                 details.getMailboxId(),
+                RunningOptionsDTO.toDTO(details.getRunningOptions()),
                 details.getSuccessfullyReprocessedMailCount(),
                 details.getFailedReprocessedMailCount(),
                 details.failures(),
@@ -56,13 +58,14 @@ public class WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO impleme
     @JsonCreator
     private WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO(String type,
                                                                         String mailboxId,
+                                                                        RunningOptionsDTO runningOptions,
                                                                         int successfullyReprocessedMailCount,
                                                                         int failedReprocessedMailCount,
                                                                         ReIndexingExecutionFailures failures,
                                                                         Instant timestamp) {
         this.mailboxId = mailboxId;
         this.reprocessingContextInformationDTO = new WebAdminReprocessingContextInformationDTO(
-            type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+            type, runningOptions, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
     }
 
     @Override
@@ -78,6 +81,10 @@ public class WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO impleme
         return mailboxId;
     }
 
+    public RunningOptionsDTO getRunningOptions() {
+        return reprocessingContextInformationDTO.getRunningOptions();
+    }
+
     public int getSuccessfullyReprocessedMailCount() {
         return reprocessingContextInformationDTO.getSuccessfullyReprocessedMailCount();
     }
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
index 2b00d4f..ff555b1 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
@@ -27,6 +27,7 @@ import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+import org.apache.mailbox.tools.indexer.RunningOptionsDTO;
 import org.apache.mailbox.tools.indexer.UserReindexingTask;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
@@ -42,6 +43,7 @@ public class WebAdminUserReindexingTaskAdditionalInformationDTO implements Addit
             .toDTOConverter((details, type) -> new WebAdminUserReindexingTaskAdditionalInformationDTO(
                 type,
                 details.getUsername(),
+                RunningOptionsDTO.toDTO(details.getRunningOptions()),
                 details.getSuccessfullyReprocessedMailCount(),
                 details.getFailedReprocessedMailCount(),
                 details.failures(),
@@ -56,6 +58,7 @@ public class WebAdminUserReindexingTaskAdditionalInformationDTO implements Addit
     @JsonCreator
     private WebAdminUserReindexingTaskAdditionalInformationDTO(String type,
                                                                String username,
+                                                               RunningOptionsDTO runningOptions,
                                                                int successfullyReprocessedMailCount,
                                                                int failedReprocessedMailCount,
                                                                ReIndexingExecutionFailures failures,
@@ -63,6 +66,7 @@ public class WebAdminUserReindexingTaskAdditionalInformationDTO implements Addit
         this.username = username;
         this.reprocessingContextInformationDTO = new WebAdminReprocessingContextInformationDTO(
             type,
+            runningOptions,
             successfullyReprocessedMailCount,
             failedReprocessedMailCount, failures, timestamp);
     }
@@ -80,6 +84,10 @@ public class WebAdminUserReindexingTaskAdditionalInformationDTO implements Addit
         return username;
     }
 
+    public RunningOptionsDTO getRunningOptions() {
+        return reprocessingContextInformationDTO.getRunningOptions();
+    }
+
     public int getSuccessfullyReprocessedMailCount() {
         return reprocessingContextInformationDTO.getSuccessfullyReprocessedMailCount();
     }
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTOTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTOTest.java
index 48ffab4..6bcfa5f 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTOTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminReprocessingContextInformationDTOTest.java
@@ -41,6 +41,7 @@ class WebAdminReprocessingContextInformationDTOTest {
 
     private final String serializedErrorRecoveryAdditionalInformation = "{" +
         "  \"type\":\"error-recovery-indexation\"," +
+        "  \"runningOptions\":{\"messagesPerSecond\":50,\"mode\":\"REBUILD_ALL\"}," +
         "  \"successfullyReprocessedMailCount\":42," +
         "  \"failedReprocessedMailCount\":2," +
         "  \"messageFailures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]}," +
@@ -48,6 +49,7 @@ class WebAdminReprocessingContextInformationDTOTest {
         "  \"timestamp\":\"2018-11-13T12:00:55Z\"}";
     private final String serializedFullAdditionalInformation = "{" +
         "  \"type\":\"full-reindexing\"," +
+        "  \"runningOptions\":{\"messagesPerSecond\":50,\"mode\":\"REBUILD_ALL\"}," +
         "  \"successfullyReprocessedMailCount\":42," +
         "  \"failedReprocessedMailCount\":2," +
         "  \"messageFailures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]}," +
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReprocessingDTOTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReprocessingDTOTest.java
index 6409881..c112ea5 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReprocessingDTOTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReprocessingDTOTest.java
@@ -42,6 +42,7 @@ class WebAdminSingleMailboxReprocessingDTOTest {
     private final String serializedAdditionalInformation = "{" +
         "  \"type\":\"mailbox-reindexing\"," +
         "  \"mailboxId\":\"1\"," +
+        "  \"runningOptions\":{\"messagesPerSecond\":50,\"mode\":\"REBUILD_ALL\"}," +
         "  \"successfullyReprocessedMailCount\":42," +
         "  \"failedReprocessedMailCount\":2," +
         "  \"messageFailures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]}," +
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReprocessingDTOTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReprocessingDTOTest.java
index 05987d4..09f49f3 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReprocessingDTOTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReprocessingDTOTest.java
@@ -42,6 +42,7 @@ class WebAdminUserReprocessingDTOTest {
 
     private final String serializedAdditionalInformation = "{" +
         "  \"type\":\"user-reindexing\",\"username\":\"bob\"," +
+        "  \"runningOptions\":{\"messagesPerSecond\":50,\"mode\":\"REBUILD_ALL\"}," +
         "  \"successfullyReprocessedMailCount\":42," +
         "  \"failedReprocessedMailCount\":2," +
         "  \"messageFailures\":{\"1\":[{\"uid\":10}],\"2\":[{\"uid\":20}]}," +
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
index c537a72..b64e4ab 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
@@ -250,6 +250,8 @@ class MailboxesRoutesTest {
                     .body("type", is(FullReindexingTask.FULL_RE_INDEXING.asString()))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
@@ -279,6 +281,40 @@ class MailboxesRoutesTest {
                     .body("type", is(FullReindexingTask.FULL_RE_INDEXING.asString()))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()))
+                    .body("completedDate", is(notNullValue()));
+            }
+
+            @Test
+            void fullReprocessingWithMessagesPerSecondShouldReturnTaskDetailsWhenMail() 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);
+
+                String taskId = with()
+                    .queryParam("messagesPerSecond", 1)
+                    .post("/mailboxes?task=reIndex")
+                    .jsonPath()
+                    .get("taskId");
+
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(taskId + "/await")
+                .then()
+                    .body("status", is("completed"))
+                    .body("taskId", is(notNullValue()))
+                    .body("type", is(FullReindexingTask.FULL_RE_INDEXING.asString()))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(1))
+                    .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(1))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
@@ -313,6 +349,8 @@ class MailboxesRoutesTest {
                     .body("type", is(FullReindexingTask.FULL_RE_INDEXING.asString()))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(1))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("additionalInformation.messageFailures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()));
@@ -386,6 +424,8 @@ class MailboxesRoutesTest {
                     .body("type", is(FullReindexingTask.FULL_RE_INDEXING.asString()))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(2))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("FIX_OUTDATED"))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
@@ -619,6 +659,8 @@ class MailboxesRoutesTest {
                     .body("additionalInformation.mailboxId", is(mailboxId.serialize()))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
@@ -649,6 +691,41 @@ class MailboxesRoutesTest {
                     .body("additionalInformation.mailboxId", is(mailboxId.serialize()))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()));
+            }
+
+            @Test
+            void mailboxReprocessingWithMessagesPerSecondShouldReturnTaskDetailsWhenMail() throws Exception {
+                MailboxSession systemSession = mailboxManager.createSystemSession(USERNAME);
+                MailboxId mailboxId = mailboxManager.createMailbox(INBOX, systemSession).get();
+                mailboxManager.getMailbox(INBOX, systemSession)
+                    .appendMessage(
+                        MessageManager.AppendCommand.builder().build("header: value\r\n\r\nbody"),
+                        systemSession);
+
+                String taskId = with()
+                    .queryParam("task", "reIndex")
+                    .queryParam("messagesPerSecond", 1)
+                    .post("/mailboxes/" + mailboxId.serialize())
+                    .jsonPath()
+                    .get("taskId");
+
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(taskId + "/await")
+                .then()
+                    .body("status", is("completed"))
+                    .body("taskId", is(notNullValue()))
+                    .body("type", is(SingleMailboxReindexingTask.TYPE.asString()))
+                    .body("additionalInformation.mailboxId", is(mailboxId.serialize()))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(1))
+                    .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(1))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()));
             }
@@ -683,6 +760,8 @@ class MailboxesRoutesTest {
                     .body("type", is(SingleMailboxReindexingTask.TYPE.asString()))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(1))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("additionalInformation.messageFailures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()));
@@ -760,6 +839,8 @@ class MailboxesRoutesTest {
                     .body("type", is(SingleMailboxReindexingTask.TYPE.asString()))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(2))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("FIX_OUTDATED"))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
@@ -1181,6 +1262,8 @@ class MailboxesRoutesTest {
                     .body("type", is("error-recovery-indexation"))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
@@ -1225,6 +1308,55 @@ class MailboxesRoutesTest {
                     .body("type", is("error-recovery-indexation"))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(1))
                     .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
+                    .body("startedDate", is(notNullValue()))
+                    .body("submitDate", is(notNullValue()))
+                    .body("completedDate", is(notNullValue()));
+            }
+
+            @Test
+            void fixingReIndexingWithMessagePerSecondShouldReturnTaskDetailsWhenMail() 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);
+
+                doReturn(Mono.error(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");
+
+                doReturn(Mono.empty()).when(searchIndex).add(any(MailboxSession.class), any(Mailbox.class), any(MailboxMessage.class));
+
+                String fixingTaskId = with()
+                    .queryParam("reIndexFailedMessagesOf", taskId)
+                    .queryParam("task", "reIndex")
+                    .queryParam("messagesPerSecond", 1)
+                    .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("error-recovery-indexation"))
+                    .body("additionalInformation.successfullyReprocessedMailCount", is(1))
+                    .body("additionalInformation.failedReprocessedMailCount", is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(1))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()))
                     .body("completedDate", is(notNullValue()));
@@ -1270,6 +1402,8 @@ class MailboxesRoutesTest {
                     .body("type", is("error-recovery-indexation"))
                     .body("additionalInformation.successfullyReprocessedMailCount", is(0))
                     .body("additionalInformation.failedReprocessedMailCount", is(1))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("additionalInformation.messageFailures.\"" + mailboxId.serialize() + "\"[0].uid", is(Long.valueOf(uidAsLong).intValue()))
                     .body("startedDate", is(notNullValue()))
                     .body("submitDate", is(notNullValue()));
@@ -1307,6 +1441,8 @@ class MailboxesRoutesTest {
                 .then()
                     .body("status", Matchers.is("failed"))
                     .body("taskId", Matchers.is(notNullValue()))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", is(50))
+                    .body("additionalInformation.runningOptions.mode", is("REBUILD_ALL"))
                     .body("additionalInformation.mailboxFailures", Matchers.containsInAnyOrder(mailboxId.serialize()));
             }
         }
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index 768913f..f6db1b5 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -1265,6 +1265,8 @@ class UserMailboxesRoutesTest {
                     .body("additionalInformation.username", Matchers.is("username"))
                     .body("additionalInformation.successfullyReprocessedMailCount", Matchers.is(0))
                     .body("additionalInformation.failedReprocessedMailCount", Matchers.is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", Matchers.is(50))
+                    .body("additionalInformation.runningOptions.mode", Matchers.is("REBUILD_ALL"))
                     .body("startedDate", Matchers.is(notNullValue()))
                     .body("submitDate", Matchers.is(notNullValue()))
                     .body("completedDate", Matchers.is(notNullValue()));
@@ -1297,6 +1299,43 @@ class UserMailboxesRoutesTest {
                     .body("additionalInformation.username", Matchers.is("username"))
                     .body("additionalInformation.successfullyReprocessedMailCount", Matchers.is(1))
                     .body("additionalInformation.failedReprocessedMailCount", Matchers.is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", Matchers.is(50))
+                    .body("additionalInformation.runningOptions.mode", Matchers.is("REBUILD_ALL"))
+                    .body("startedDate", Matchers.is(notNullValue()))
+                    .body("submitDate", Matchers.is(notNullValue()))
+                    .body("completedDate", Matchers.is(notNullValue()));
+            }
+
+            @Test
+            void userReprocessingWithMessagesPerSecondShouldReturnTaskDetailsWhenMail() 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);
+
+                String taskId = given()
+                    .queryParam("task", "reIndex")
+                    .queryParam("messagesPerSecond", 1)
+                .when()
+                    .post()
+                    .jsonPath()
+                    .get("taskId");
+
+                given()
+                    .basePath(TasksRoutes.BASE)
+                .when()
+                    .get(taskId + "/await")
+                .then()
+                    .body("status", Matchers.is("completed"))
+                    .body("taskId", Matchers.is(notNullValue()))
+                    .body("type", Matchers.is(UserReindexingTask.USER_RE_INDEXING.asString()))
+                    .body("additionalInformation.username", Matchers.is("username"))
+                    .body("additionalInformation.successfullyReprocessedMailCount", Matchers.is(1))
+                    .body("additionalInformation.failedReprocessedMailCount", Matchers.is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", Matchers.is(1))
+                    .body("additionalInformation.runningOptions.mode", Matchers.is("REBUILD_ALL"))
                     .body("startedDate", Matchers.is(notNullValue()))
                     .body("submitDate", Matchers.is(notNullValue()))
                     .body("completedDate", Matchers.is(notNullValue()));
@@ -1332,6 +1371,8 @@ class UserMailboxesRoutesTest {
                     .body("type", Matchers.is(UserReindexingTask.USER_RE_INDEXING.asString()))
                     .body("additionalInformation.successfullyReprocessedMailCount", Matchers.is(0))
                     .body("additionalInformation.failedReprocessedMailCount", Matchers.is(1))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", Matchers.is(50))
+                    .body("additionalInformation.runningOptions.mode", Matchers.is("REBUILD_ALL"))
                     .body("additionalInformation.messageFailures.\"" + mailboxId.serialize() + "\"[0].uid", Matchers.is(Long.valueOf(uidAsLong).intValue()))
                     .body("startedDate", Matchers.is(notNullValue()))
                     .body("submitDate", Matchers.is(notNullValue()));
@@ -1408,6 +1449,8 @@ class UserMailboxesRoutesTest {
                     .body("type", Matchers.is(UserReindexingTask.USER_RE_INDEXING.asString()))
                     .body("additionalInformation.successfullyReprocessedMailCount", Matchers.is(2))
                     .body("additionalInformation.failedReprocessedMailCount", Matchers.is(0))
+                    .body("additionalInformation.runningOptions.messagesPerSecond", Matchers.is(50))
+                    .body("additionalInformation.runningOptions.mode", Matchers.is("FIX_OUTDATED"))
                     .body("startedDate", Matchers.is(notNullValue()))
                     .body("submitDate", Matchers.is(notNullValue()))
                     .body("completedDate", Matchers.is(notNullValue()));


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