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

[james-project] 02/12: JAMES-3184 Update task serialization for FullReindexingTask

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 6a7088c4521b5ed5c3f3e15ff3dd71976100ef0d
Author: LanKhuat <kh...@gmail.com>
AuthorDate: Thu May 21 15:04:26 2020 +0700

    JAMES-3184 Update task serialization for FullReindexingTask
---
 .../mailbox/tools/indexer/FullReindexingTask.java  | 49 +++++----------
 ...ndexingTask.java => FullReindexingTaskDTO.java} | 69 ++++++++--------------
 .../indexer/ReprocessingContextInformation.java    | 28 +++------
 .../indexer/ReprocessingContextInformationDTO.java | 61 ++++++++++++++-----
 .../mailbox/tools/indexer/RunningOptionsDTO.java   | 49 +++++++++++++++
 .../FullReindexingTaskSerializationTest.java       | 46 +++++++++++++--
 .../james/modules/TaskSerializationModule.java     |  4 +-
 7 files changed, 187 insertions(+), 119 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 0e99cdb..e841d12 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
@@ -19,19 +19,16 @@
 
 package org.apache.mailbox.tools.indexer;
 
+import java.time.Clock;
 import java.util.Optional;
 
 import javax.inject.Inject;
 
-import org.apache.james.json.DTOModule;
-import org.apache.james.server.task.json.dto.TaskDTO;
-import org.apache.james.server.task.json.dto.TaskDTOModule;
+import org.apache.james.mailbox.indexer.ReIndexer.RunningOptions;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 import org.apache.james.task.TaskType;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-
 import reactor.core.publisher.Mono;
 
 public class FullReindexingTask implements Task {
@@ -40,41 +37,18 @@ public class FullReindexingTask implements Task {
 
     private final ReIndexerPerformer reIndexerPerformer;
     private final ReprocessingContext reprocessingContext;
-
-    public static TaskDTOModule<FullReindexingTask, FullReindexingTaskDTO> module(ReIndexerPerformer reIndexerPerformer) {
-        return DTOModule
-            .forDomainObject(FullReindexingTask.class)
-            .convertToDTO(FullReindexingTask.FullReindexingTaskDTO.class)
-            .toDomainObjectConverter(dto -> new FullReindexingTask(reIndexerPerformer))
-            .toDTOConverter((task, type) -> new FullReindexingTaskDTO(type))
-            .typeName(FULL_RE_INDEXING.asString())
-            .withFactory(TaskDTOModule::new);
-    }
-
-    public static class FullReindexingTaskDTO implements TaskDTO {
-
-        private final String type;
-
-        public FullReindexingTaskDTO(@JsonProperty("type") String type) {
-            this.type = type;
-        }
-
-        @Override
-        public String getType() {
-            return type;
-        }
-
-    }
+    private final RunningOptions runningOptions;
 
     @Inject
-    public FullReindexingTask(ReIndexerPerformer reIndexerPerformer) {
+    public FullReindexingTask(ReIndexerPerformer reIndexerPerformer, RunningOptions runningOptions) {
         this.reIndexerPerformer = reIndexerPerformer;
         this.reprocessingContext = new ReprocessingContext();
+        this.runningOptions = runningOptions;
     }
 
     @Override
     public Result run() {
-        return reIndexerPerformer.reIndex(reprocessingContext)
+        return reIndexerPerformer.reIndex(reprocessingContext, runningOptions)
             .onErrorResume(e -> Mono.just(Result.PARTIAL))
             .block();
     }
@@ -84,8 +58,17 @@ public class FullReindexingTask implements Task {
         return FULL_RE_INDEXING;
     }
 
+    public RunningOptions getRunningOptions() {
+        return runningOptions;
+    }
+
     @Override
     public Optional<TaskExecutionDetails.AdditionalInformation> details() {
-        return Optional.of(ReprocessingContextInformation.forFullReindexingTask(reprocessingContext));
+        return Optional.of(new ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask(
+            reprocessingContext.successfullyReprocessedMailCount(),
+            reprocessingContext.failedReprocessingMailCount(),
+            reprocessingContext.failures(),
+            Clock.systemUTC().instant(),
+            runningOptions));
     }
 }
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/FullReindexingTaskDTO.java
similarity index 52%
copy from mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
copy to mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTaskDTO.java
index 0e99cdb..2fdd0f9 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/FullReindexingTaskDTO.java
@@ -19,73 +19,54 @@
 
 package org.apache.mailbox.tools.indexer;
 
-import java.util.Optional;
+import static org.apache.mailbox.tools.indexer.FullReindexingTask.FULL_RE_INDEXING;
 
-import javax.inject.Inject;
+import java.util.Optional;
 
 import org.apache.james.json.DTOModule;
+import org.apache.james.mailbox.indexer.ReIndexer.RunningOptions;
 import org.apache.james.server.task.json.dto.TaskDTO;
 import org.apache.james.server.task.json.dto.TaskDTOModule;
-import org.apache.james.task.Task;
-import org.apache.james.task.TaskExecutionDetails;
-import org.apache.james.task.TaskType;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-import reactor.core.publisher.Mono;
-
-public class FullReindexingTask implements Task {
-
-    public static final TaskType FULL_RE_INDEXING = TaskType.of("full-reindexing");
-
-    private final ReIndexerPerformer reIndexerPerformer;
-    private final ReprocessingContext reprocessingContext;
+public class FullReindexingTaskDTO implements TaskDTO {
+    private static FullReindexingTaskDTO toDTO(FullReindexingTask task, String type) {
+        return new FullReindexingTaskDTO(type, Optional.of(RunningOptionsDTO.toDTO(task.getRunningOptions())));
+    }
 
     public static TaskDTOModule<FullReindexingTask, FullReindexingTaskDTO> module(ReIndexerPerformer reIndexerPerformer) {
         return DTOModule
             .forDomainObject(FullReindexingTask.class)
-            .convertToDTO(FullReindexingTask.FullReindexingTaskDTO.class)
-            .toDomainObjectConverter(dto -> new FullReindexingTask(reIndexerPerformer))
-            .toDTOConverter((task, type) -> new FullReindexingTaskDTO(type))
+            .convertToDTO(FullReindexingTaskDTO.class)
+            .toDomainObjectConverter(dto -> dto.toDomainObject(reIndexerPerformer))
+            .toDTOConverter(FullReindexingTaskDTO::toDTO)
             .typeName(FULL_RE_INDEXING.asString())
             .withFactory(TaskDTOModule::new);
     }
 
-    public static class FullReindexingTaskDTO implements TaskDTO {
-
-        private final String type;
+    private final String type;
+    private final Optional<RunningOptionsDTO> runningOptions;
 
-        public FullReindexingTaskDTO(@JsonProperty("type") String type) {
-            this.type = type;
-        }
-
-        @Override
-        public String getType() {
-            return type;
-        }
-
-    }
-
-    @Inject
-    public FullReindexingTask(ReIndexerPerformer reIndexerPerformer) {
-        this.reIndexerPerformer = reIndexerPerformer;
-        this.reprocessingContext = new ReprocessingContext();
+    public FullReindexingTaskDTO(@JsonProperty("type") String type,
+                                 @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) {
+        this.type = type;
+        this.runningOptions = runningOptions;
     }
 
     @Override
-    public Result run() {
-        return reIndexerPerformer.reIndex(reprocessingContext)
-            .onErrorResume(e -> Mono.just(Result.PARTIAL))
-            .block();
+    public String getType() {
+        return type;
     }
 
-    @Override
-    public TaskType type() {
-        return FULL_RE_INDEXING;
+    public Optional<RunningOptionsDTO> getRunningOptions() {
+        return runningOptions;
     }
 
-    @Override
-    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
-        return Optional.of(ReprocessingContextInformation.forFullReindexingTask(reprocessingContext));
+    private FullReindexingTask toDomainObject(ReIndexerPerformer reIndexerPerformer) {
+        return new FullReindexingTask(reIndexerPerformer,
+            runningOptions
+                .map(RunningOptionsDTO::toDomainObject)
+                .orElse(RunningOptions.DEFAULT));
     }
 }
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 2b6e656..c2927c9 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
@@ -19,47 +19,31 @@
 
 package org.apache.mailbox.tools.indexer;
 
-import java.time.Clock;
 import java.time.Instant;
 
 import org.apache.james.mailbox.indexer.IndexingDetailInformation;
+import org.apache.james.mailbox.indexer.ReIndexer.RunningOptions;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.task.TaskExecutionDetails;
-import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO.ReprocessingContextInformationForErrorRecoveryIndexationTask;
-import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class ReprocessingContextInformation implements TaskExecutionDetails.AdditionalInformation, IndexingDetailInformation {
 
-    public static ReprocessingContextInformationForErrorRecoveryIndexationTask forErrorRecoveryIndexationTask(ReprocessingContext reprocessingContext) {
-        return new ReprocessingContextInformationForErrorRecoveryIndexationTask(
-            reprocessingContext.successfullyReprocessedMailCount(),
-            reprocessingContext.failedReprocessingMailCount(),
-            reprocessingContext.failures(),
-            Clock.systemUTC().instant());
-    }
-
-    public static ReprocessingContextInformationForFullReindexingTask forFullReindexingTask(ReprocessingContext reprocessingContext) {
-        return new ReprocessingContextInformationForFullReindexingTask(
-            reprocessingContext.successfullyReprocessedMailCount(),
-            reprocessingContext.failedReprocessingMailCount(),
-            reprocessingContext.failures(),
-            Clock.systemUTC().instant());
-    }
-
     private final int successfullyReprocessedMailCount;
     private final int failedReprocessedMailCount;
     private final ReIndexingExecutionFailures failures;
     private final Instant timestamp;
+    private final RunningOptions runningOptions;
 
     ReprocessingContextInformation(int successfullyReprocessedMailCount, int failedReprocessedMailCount,
-                                   ReIndexingExecutionFailures failures, Instant timestamp) {
+                                   ReIndexingExecutionFailures failures, Instant timestamp, RunningOptions runningOptions) {
         this.successfullyReprocessedMailCount = successfullyReprocessedMailCount;
         this.failedReprocessedMailCount = failedReprocessedMailCount;
         this.failures = failures;
         this.timestamp = timestamp;
+        this.runningOptions = runningOptions;
     }
 
     @Override
@@ -87,4 +71,8 @@ public class ReprocessingContextInformation implements TaskExecutionDetails.Addi
     public Instant timestamp() {
         return timestamp;
     }
+
+    public RunningOptions getRunningOptions() {
+        return runningOptions;
+    }
 }
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
index f711c1d..446b387 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
@@ -22,10 +22,12 @@ import java.time.Instant;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Stream;
 
 import org.apache.james.json.DTOModule;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.indexer.ReIndexer.RunningOptions;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
@@ -65,8 +67,9 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
                 @JsonProperty("successfullyReprocessedMailCount") int successfullyReprocessedMailCount,
                 @JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
                 @JsonProperty("failures") List<ReindexingFailureDTO> failures,
-                @JsonProperty("timestamp") Instant timestamp) {
-                super(type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+                @JsonProperty("timestamp") Instant timestamp,
+                @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) {
+                super(type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp, runningOptions);
             }
         }
 
@@ -77,19 +80,28 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
                     dto.successfullyReprocessedMailCount,
                     dto.failedReprocessedMailCount,
                     deserializeFailures(mailboxIdFactory, dto.failures),
-                    dto.getTimestamp()))
+                    dto.getTimestamp(),
+                    dto.getRunningOptions()
+                        .map(RunningOptionsDTO::toDomainObject)
+                        .orElse(RunningOptions.DEFAULT)
+                    ))
                 .toDTOConverter((details, type) -> new DTO(
                     type,
                     details.getSuccessfullyReprocessedMailCount(),
                     details.getFailedReprocessedMailCount(),
                     serializeFailures(details.failures()),
-                    details.timestamp()))
+                    details.timestamp(),
+                    Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions()))))
                 .typeName(ErrorRecoveryIndexationTask.PREVIOUS_FAILURES_INDEXING.asString())
                 .withFactory(AdditionalInformationDTOModule::new);
         }
 
-        ReprocessingContextInformationForErrorRecoveryIndexationTask(int successfullyReprocessedMailCount, int failedReprocessedMailCount, ReIndexingExecutionFailures failures, Instant timestamp) {
-            super(successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+        ReprocessingContextInformationForErrorRecoveryIndexationTask(int successfullyReprocessedMailCount,
+                                                                     int failedReprocessedMailCount,
+                                                                     ReIndexingExecutionFailures failures,
+                                                                     Instant timestamp,
+                                                                     RunningOptions runningOptions) {
+            super(successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp, runningOptions);
         }
     }
 
@@ -101,27 +113,40 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
                 @JsonProperty("successfullyReprocessedMailCount") int successfullyReprocessedMailCount,
                 @JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
                 @JsonProperty("failures") List<ReindexingFailureDTO> failures,
-                @JsonProperty("timestamp") Instant timestamp) {
-                super(type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+                @JsonProperty("timestamp") Instant timestamp,
+                @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) {
+                super(type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp, runningOptions);
             }
         }
 
         public static AdditionalInformationDTOModule<ReprocessingContextInformationForFullReindexingTask, DTO> serializationModule(MailboxId.Factory mailboxIdFactory) {
             return DTOModule.forDomainObject(ReprocessingContextInformationForFullReindexingTask.class)
                 .convertToDTO(DTO.class)
-                .toDomainObjectConverter(dto -> new ReprocessingContextInformationForFullReindexingTask(dto.successfullyReprocessedMailCount, dto.failedReprocessedMailCount, deserializeFailures(mailboxIdFactory, dto.failures), dto.getTimestamp()))
+                .toDomainObjectConverter(dto -> new ReprocessingContextInformationForFullReindexingTask(
+                    dto.successfullyReprocessedMailCount,
+                    dto.failedReprocessedMailCount,
+                    deserializeFailures(mailboxIdFactory, dto.failures),
+                    dto.getTimestamp(),
+                    dto.getRunningOptions()
+                        .map(RunningOptionsDTO::toDomainObject)
+                        .orElse(RunningOptions.DEFAULT)))
                 .toDTOConverter((details, type) -> new DTO(
                     type,
                     details.getSuccessfullyReprocessedMailCount(),
                     details.getFailedReprocessedMailCount(),
                     serializeFailures(details.failures()),
-                    details.timestamp()))
+                    details.timestamp(),
+                    Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions()))))
                 .typeName(FullReindexingTask.FULL_RE_INDEXING.asString())
                 .withFactory(AdditionalInformationDTOModule::new);
         }
 
-        ReprocessingContextInformationForFullReindexingTask(int successfullyReprocessedMailCount, int failedReprocessedMailCount, ReIndexingExecutionFailures failures, Instant timestamp) {
-            super(successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+        ReprocessingContextInformationForFullReindexingTask(int successfullyReprocessedMailCount,
+                                                            int failedReprocessedMailCount,
+                                                            ReIndexingExecutionFailures failures,
+                                                            Instant timestamp,
+                                                            RunningOptions runningOptions) {
+            super(successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp, runningOptions);
         }
     }
 
@@ -143,7 +168,6 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
                 new ReIndexingExecutionFailures.ReIndexingFailure(mailboxIdFactory.fromString(failuresForMailbox.mailboxId), MessageUid.of(uid)));
     }
 
-
     static List<ReindexingFailureDTO> serializeFailures(ReIndexingExecutionFailures failures) {
         ImmutableListMultimap<MailboxId, ReIndexingExecutionFailures.ReIndexingFailure> failuresByMailbox = failures.failures()
             .stream()
@@ -173,18 +197,21 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
     protected final int failedReprocessedMailCount;
     protected final List<ReindexingFailureDTO> failures;
     protected final Instant timestamp;
-
+    protected final Optional<RunningOptionsDTO> runningOptions;
 
     ReprocessingContextInformationDTO(@JsonProperty("type") String type,
                                       @JsonProperty("successfullyReprocessedMailCount") int successfullyReprocessedMailCount,
                                       @JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
                                       @JsonProperty("failures") List<ReindexingFailureDTO> failures,
-                                      @JsonProperty("timestamp") Instant timestamp) {
+                                      @JsonProperty("timestamp") Instant timestamp,
+                                      @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions
+                                      ) {
         this.type = type;
         this.successfullyReprocessedMailCount = successfullyReprocessedMailCount;
         this.failedReprocessedMailCount = failedReprocessedMailCount;
         this.failures = failures;
         this.timestamp = timestamp;
+        this.runningOptions = runningOptions;
     }
 
     public int getSuccessfullyReprocessedMailCount() {
@@ -203,6 +230,10 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
         return timestamp;
     }
 
+    public Optional<RunningOptionsDTO> getRunningOptions() {
+        return runningOptions;
+    }
+
     @Override
     public String getType() {
         return type;
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/RunningOptionsDTO.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/RunningOptionsDTO.java
new file mode 100644
index 0000000..16f3d5f
--- /dev/null
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/RunningOptionsDTO.java
@@ -0,0 +1,49 @@
+/****************************************************************
+ * 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.mailbox.indexer.ReIndexer.RunningOptions;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class RunningOptionsDTO {
+    public static RunningOptionsDTO toDTO(RunningOptions runningOptions) {
+        return new RunningOptionsDTO(Optional.of(runningOptions.getMessagesPerSecond()));
+    }
+
+    private final Optional<Integer> messagesPerSecond;
+
+    @JsonCreator
+    public RunningOptionsDTO(@JsonProperty("messagesPerSecond") Optional<Integer> messagesPerSecond) {
+        this.messagesPerSecond = messagesPerSecond;
+    }
+
+    public Optional<Integer> getMessagesPerSecond() {
+        return messagesPerSecond;
+    }
+
+    public RunningOptions toDomainObject() {
+        return new RunningOptions(messagesPerSecond.orElse(RunningOptions.DEFAULT.getMessagesPerSecond()));
+    }
+}
+
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
index dce79b2..5842e3e 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
@@ -18,12 +18,15 @@
  ****************************************************************/
 package org.apache.mailbox.tools.indexer;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
 import java.time.Instant;
 
 import org.apache.james.JsonSerializationVerifier;
+import org.apache.james.json.JsonGenericSerializer;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.indexer.ReIndexer.RunningOptions;
 import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask;
@@ -43,8 +46,11 @@ class FullReindexingTaskSerializationTest {
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
 
-    private final String serializedFullReindexingTask = "{\"type\": \"full-reindexing\"}";
-    private final String serializedAdditionalInformation = "{\"type\": \"full-reindexing\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedFullReindexingTask = "{\"type\":\"full-reindexing\", \"runningOptions\":{\"messagesPerSecond\":50}}";
+    private final String legacySerializedFullReindexingTask = "{\"type\":\"full-reindexing\"}";
+
+    private final String serializedAdditionalInformation = "{\"type\": \"full-reindexing\", \"runningOptions\":{\"messagesPerSecond\":50}, \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String legacySerializedAdditionalInformation = "{\"type\": \"full-reindexing\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private ReIndexingExecutionFailures reIndexingExecutionFailures;
     private ReIndexerPerformer reIndexerPerformer;
@@ -60,20 +66,50 @@ class FullReindexingTaskSerializationTest {
 
     @Test
     void fullReindexingShouldBeSerializable() throws Exception {
-        JsonSerializationVerifier.dtoModule(FullReindexingTask.module(reIndexerPerformer))
-            .bean(new FullReindexingTask(reIndexerPerformer))
+        JsonSerializationVerifier.dtoModule(FullReindexingTaskDTO.module(reIndexerPerformer))
+            .bean(new FullReindexingTask(reIndexerPerformer, RunningOptions.DEFAULT))
             .json(serializedFullReindexingTask)
             .verify();
     }
 
     @Test
+    void legacyTaskshouldBeDeserializable() throws Exception {
+        FullReindexingTask legacyTask = JsonGenericSerializer.forModules(FullReindexingTaskDTO.module(reIndexerPerformer))
+            .withoutNestedType()
+            .deserialize(legacySerializedFullReindexingTask);
+
+        FullReindexingTask expected = new FullReindexingTask(reIndexerPerformer, RunningOptions.DEFAULT);
+
+        assertThat(legacyTask)
+            .isEqualToComparingFieldByFieldRecursively(expected);
+    }
+
+    @Test
     void additionalInformationShouldBeSerializable() throws Exception {
-        ReprocessingContextInformationForFullReindexingTask details = new ReprocessingContextInformationForFullReindexingTask(successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
+        ReprocessingContextInformationForFullReindexingTask details = new ReprocessingContextInformationForFullReindexingTask(successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP, RunningOptions.DEFAULT);
 
         JsonSerializationVerifier.dtoModule(ReprocessingContextInformationForFullReindexingTask.serializationModule(new TestId.Factory()))
             .bean(details)
             .json(serializedAdditionalInformation)
             .verify();
     }
+
+    @Test
+    void legacyAdditionalInformationShouldBeDeserializable() throws Exception {
+        ReprocessingContextInformationForFullReindexingTask legacyAdditionalInformation = JsonGenericSerializer.forModules(ReprocessingContextInformationForFullReindexingTask.serializationModule(new TestId.Factory()))
+            .withoutNestedType()
+            .deserialize(legacySerializedAdditionalInformation);
+
+        ReprocessingContextInformationForFullReindexingTask expected = new ReprocessingContextInformationForFullReindexingTask(
+            42,
+            2,
+            reIndexingExecutionFailures,
+            TIMESTAMP,
+            RunningOptions.DEFAULT
+        );
+
+        assertThat(legacyAdditionalInformation)
+            .isEqualToComparingFieldByFieldRecursively(expected);
+    }
 }
 
diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java
index 0e8b86f..5c63753 100644
--- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java
+++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/TaskSerializationModule.java
@@ -100,7 +100,7 @@ import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRestoreTaskAdd
 import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRestoreTaskDTO;
 import org.apache.mailbox.tools.indexer.ErrorRecoveryIndexationTask;
 import org.apache.mailbox.tools.indexer.ErrorRecoveryIndexationTaskDTO;
-import org.apache.mailbox.tools.indexer.FullReindexingTask;
+import org.apache.mailbox.tools.indexer.FullReindexingTaskDTO;
 import org.apache.mailbox.tools.indexer.MessageIdReIndexingTask;
 import org.apache.mailbox.tools.indexer.MessageIdReindexingTaskAdditionalInformationDTO;
 import org.apache.mailbox.tools.indexer.MessageIdReindexingTaskDTO;
@@ -258,7 +258,7 @@ public class TaskSerializationModule extends AbstractModule {
 
     @ProvidesIntoSet
     public TaskDTOModule<? extends Task, ? extends TaskDTO> fullReindexTask(ReIndexerPerformer performer) {
-        return FullReindexingTask.module(performer);
+        return FullReindexingTaskDTO.module(performer);
     }
 
     @ProvidesIntoSet


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