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 5e67b0d350d2810a9cbdad8241f38e64752bc3ea
Author: LanKhuat <khuatdang...@gmail.com>
AuthorDate: Thu May 21 15:10:58 2020 +0700

    JAMES-3184 Update task serialization for ErrorRecoveryIndexationTask
---
 .../tools/indexer/ErrorRecoveryIndexationTask.java | 25 ++++++++++---
 .../indexer/ErrorRecoveryIndexationTaskDTO.java    | 12 +++++--
 ...rorRecoveryIndexationTaskSerializationTest.java | 42 ++++++++++++++++++++--
 3 files changed, 70 insertions(+), 9 deletions(-)

diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
index 716f578..8517465 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
@@ -19,12 +19,14 @@
 
 package org.apache.mailbox.tools.indexer;
 
+import java.time.Clock;
 import java.util.List;
 import java.util.Optional;
 
 import javax.inject.Inject;
 
 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.task.Task;
@@ -57,23 +59,29 @@ public class ErrorRecoveryIndexationTask implements Task {
         }
 
         public ErrorRecoveryIndexationTask 
create(ErrorRecoveryIndexationTaskDTO dto) {
-            return new ErrorRecoveryIndexationTask(reIndexerPerformer, new 
ReIndexingExecutionFailures(failuresFromDTO(dto.getPreviousFailures())));
+            return new ErrorRecoveryIndexationTask(reIndexerPerformer,
+                new 
ReIndexingExecutionFailures(failuresFromDTO(dto.getPreviousFailures())),
+                dto.getRunningOptions()
+                    .map(RunningOptionsDTO::toDomainObject)
+                    .orElse(RunningOptions.DEFAULT));
         }
     }
 
     private final ReIndexerPerformer reIndexerPerformer;
     private final ReprocessingContext reprocessingContext;
     private final ReIndexingExecutionFailures previousFailures;
+    private final RunningOptions runningOptions;
 
-    public ErrorRecoveryIndexationTask(ReIndexerPerformer reIndexerPerformer, 
ReIndexingExecutionFailures previousFailures) {
+    public ErrorRecoveryIndexationTask(ReIndexerPerformer reIndexerPerformer, 
ReIndexingExecutionFailures previousFailures, RunningOptions runningOptions) {
         this.reIndexerPerformer = reIndexerPerformer;
         this.previousFailures = previousFailures;
         this.reprocessingContext = new ReprocessingContext();
+        this.runningOptions = runningOptions;
     }
 
     @Override
     public Result run() {
-        return reIndexerPerformer.reIndex(reprocessingContext, 
previousFailures).block();
+        return reIndexerPerformer.reIndex(reprocessingContext, 
previousFailures, runningOptions).block();
     }
 
     @Override
@@ -85,8 +93,17 @@ public class ErrorRecoveryIndexationTask implements Task {
         return previousFailures;
     }
 
+    public RunningOptions getRunningOptions() {
+        return runningOptions;
+    }
+
     @Override
     public Optional<TaskExecutionDetails.AdditionalInformation> details() {
-        return 
Optional.of(ReprocessingContextInformation.forErrorRecoveryIndexationTask(reprocessingContext));
+        return Optional.of(new 
ReprocessingContextInformationDTO.ReprocessingContextInformationForErrorRecoveryIndexationTask(
+            reprocessingContext.successfullyReprocessedMailCount(),
+            reprocessingContext.failedReprocessingMailCount(),
+            reprocessingContext.failures(),
+            Clock.systemUTC().instant(),
+            runningOptions));
     }
 }
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
index bfaeaaf..1385686 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
@@ -21,6 +21,7 @@ package org.apache.mailbox.tools.indexer;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.function.Function;
 
 import org.apache.james.json.DTOModule;
@@ -57,7 +58,7 @@ public class ErrorRecoveryIndexationTaskDTO implements 
TaskDTO {
             .stream()
             
.map(ErrorRecoveryIndexationTaskDTO::failuresByMailboxToReindexingFailureDTO)
             .collect(Guavate.toImmutableList());
-        return new ErrorRecoveryIndexationTaskDTO(type, failureDTOs);
+        return new ErrorRecoveryIndexationTaskDTO(type, failureDTOs, 
Optional.of(RunningOptionsDTO.toDTO(task.getRunningOptions())));
     }
 
     private static ReindexingFailureDTO 
failuresByMailboxToReindexingFailureDTO(Map.Entry<MailboxId,
@@ -92,10 +93,14 @@ public class ErrorRecoveryIndexationTaskDTO implements 
TaskDTO {
 
     private final String type;
     private final List<ReindexingFailureDTO> previousFailures;
+    private final Optional<RunningOptionsDTO> runningOptions;
 
-    private ErrorRecoveryIndexationTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("previousFailures") List<ReindexingFailureDTO> previousFailures) {
+    private ErrorRecoveryIndexationTaskDTO(@JsonProperty("type") String type,
+                                           @JsonProperty("previousFailures") 
List<ReindexingFailureDTO> previousFailures,
+                                           @JsonProperty("runningOptions") 
Optional<RunningOptionsDTO> runningOptions) {
         this.type = type;
         this.previousFailures = previousFailures;
+        this.runningOptions = runningOptions;
     }
 
     @Override
@@ -107,4 +112,7 @@ public class ErrorRecoveryIndexationTaskDTO implements 
TaskDTO {
         return previousFailures;
     }
 
+    public Optional<RunningOptionsDTO> getRunningOptions() {
+        return runningOptions;
+    }
 }
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
index f81af92..929d34c 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
@@ -18,13 +18,16 @@
  ****************************************************************/
 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 java.util.List;
 
 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.ReprocessingContextInformationForErrorRecoveryIndexationTask;
@@ -40,8 +43,11 @@ class ErrorRecoveryIndexationTaskSerializationTest {
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
     private final String serializedErrorRecoveryReindexingTask = "{\"type\": 
\"error-recovery-indexation\"," +
+        " \"previousFailures\" : 
[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], 
\"runningOptions\":{\"messagesPerSecond\":50}}";
+    private final String legacySerializedErrorRecoveryReindexingTask = 
"{\"type\": \"error-recovery-indexation\"," +
         " \"previousFailures\" : 
[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}]}";
-    private final String serializedAdditionalInformation = "{\"type\": 
\"error-recovery-indexation\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{\"type\": 
\"error-recovery-indexation\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
+    private final String legacySerializedAdditionalInformation = "{\"type\": 
\"error-recovery-indexation\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\"}";
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
     private final ReIndexingExecutionFailures.ReIndexingFailure 
indexingFailure = new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid);
@@ -63,18 +69,48 @@ class ErrorRecoveryIndexationTaskSerializationTest {
     @Test
     void errorRecoveryReindexingShouldBeSerializable() throws Exception {
         
JsonSerializationVerifier.dtoModule(ErrorRecoveryIndexationTaskDTO.module(factory))
-            .bean(new ErrorRecoveryIndexationTask(reIndexerPerformer, 
executionFailures))
+            .bean(new ErrorRecoveryIndexationTask(reIndexerPerformer, 
executionFailures, RunningOptions.DEFAULT))
             .json(serializedErrorRecoveryReindexingTask)
             .verify();
     }
 
     @Test
+    void legacyTaskshouldBeDeserializable() throws Exception {
+        ErrorRecoveryIndexationTask legacyTask = 
JsonGenericSerializer.forModules(ErrorRecoveryIndexationTaskDTO.module(factory))
+            .withoutNestedType()
+            .deserialize(legacySerializedErrorRecoveryReindexingTask);
+
+        ErrorRecoveryIndexationTask expected = new 
ErrorRecoveryIndexationTask(reIndexerPerformer, executionFailures, 
RunningOptions.DEFAULT);
+
+        assertThat(legacyTask)
+            .isEqualToComparingFieldByFieldRecursively(expected);
+    }
+
+    @Test
     void additionalInformationShouldBeSerializable() throws Exception {
-        ReprocessingContextInformationForErrorRecoveryIndexationTask details = 
new 
ReprocessingContextInformationForErrorRecoveryIndexationTask(successfullyReprocessedMailCount,
 failedReprocessedMailCount, executionFailures, TIMESTAMP);
+        ReprocessingContextInformationForErrorRecoveryIndexationTask details = 
new 
ReprocessingContextInformationForErrorRecoveryIndexationTask(successfullyReprocessedMailCount,
 failedReprocessedMailCount, executionFailures, TIMESTAMP, 
RunningOptions.DEFAULT);
         
JsonSerializationVerifier.dtoModule(ReprocessingContextInformationForErrorRecoveryIndexationTask.serializationModule(mailboxIdFactory))
             .bean(details)
             .json(serializedAdditionalInformation)
             .verify();
     }
+
+    @Test
+    void legacyAdditionalInformationShouldBeDeserializable() throws Exception {
+        ReprocessingContextInformationForErrorRecoveryIndexationTask 
legacyAdditionalInformation = 
JsonGenericSerializer.forModules(ReprocessingContextInformationDTO.ReprocessingContextInformationForErrorRecoveryIndexationTask.serializationModule(new
 TestId.Factory()))
+            .withoutNestedType()
+            .deserialize(legacySerializedAdditionalInformation);
+
+        
ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask
 expected = new 
ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask(
+            42,
+            2,
+            executionFailures,
+            TIMESTAMP,
+            RunningOptions.DEFAULT
+        );
+
+        assertThat(legacyAdditionalInformation)
+            .isEqualToComparingFieldByFieldRecursively(expected);
+    }
 }
 


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

Reply via email to