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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to