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:53 UTC

[james-project] 03/12: JAMES-3184 Update task serialization for SingleMailboxReindexingTask

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 d46bb6f30987e1c58c8b186d28b4a05a72bf1a83
Author: LanKhuat <kh...@gmail.com>
AuthorDate: Thu May 21 15:06:51 2020 +0700

    JAMES-3184 Update task serialization for SingleMailboxReindexingTask
---
 .../tools/indexer/SingleMailboxReindexingTask.java | 25 +++++++++---
 ...lboxReindexingTaskAdditionalInformationDTO.java | 22 +++++++++--
 .../indexer/SingleMailboxReindexingTaskDTO.java    | 19 +++++++---
 ...ngleMailboxReindexingTaskSerializationTest.java | 44 ++++++++++++++++++++--
 4 files changed, 91 insertions(+), 19 deletions(-)

diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
index 0e9580d..29dd231 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
@@ -25,6 +25,7 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
+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;
@@ -38,8 +39,10 @@ public class SingleMailboxReindexingTask implements Task {
     public static class AdditionalInformation extends ReprocessingContextInformation {
         private final MailboxId mailboxId;
 
-        AdditionalInformation(MailboxId mailboxId, int successfullyReprocessedMailCount, int failedReprocessedMailCount, ReIndexingExecutionFailures failures, Instant timestamp) {
-            super(successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+        AdditionalInformation(MailboxId mailboxId, int successfullyReprocessedMailCount,
+                              int failedReprocessedMailCount, ReIndexingExecutionFailures failures,
+                              Instant timestamp, RunningOptions runningOptions) {
+            super(successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp, runningOptions);
             this.mailboxId = mailboxId;
         }
 
@@ -61,25 +64,30 @@ public class SingleMailboxReindexingTask implements Task {
 
         public SingleMailboxReindexingTask create(SingleMailboxReindexingTaskDTO dto) {
             MailboxId mailboxId = mailboxIdFactory.fromString(dto.getMailboxId());
-            return new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId);
+            return new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId,
+                dto.getRunningOptions()
+                    .map(RunningOptionsDTO::toDomainObject)
+                    .orElse(RunningOptions.DEFAULT));
         }
     }
 
     private final ReIndexerPerformer reIndexerPerformer;
     private final MailboxId mailboxId;
     private final ReprocessingContext reprocessingContext;
+    private final RunningOptions runningOptions;
 
     @Inject
-    public SingleMailboxReindexingTask(ReIndexerPerformer reIndexerPerformer, MailboxId mailboxId) {
+    public SingleMailboxReindexingTask(ReIndexerPerformer reIndexerPerformer, MailboxId mailboxId, RunningOptions runningOptions) {
         this.reIndexerPerformer = reIndexerPerformer;
         this.mailboxId = mailboxId;
         this.reprocessingContext = new ReprocessingContext();
+        this.runningOptions = runningOptions;
     }
 
     @Override
     public Result run() {
         try {
-            return reIndexerPerformer.reIndex(mailboxId, reprocessingContext)
+            return reIndexerPerformer.reIndex(mailboxId, reprocessingContext, runningOptions)
                 .block();
         } catch (Exception e) {
             return Result.PARTIAL;
@@ -95,6 +103,10 @@ public class SingleMailboxReindexingTask implements Task {
         return MAILBOX_RE_INDEXING;
     }
 
+    public RunningOptions getRunningOptions() {
+        return runningOptions;
+    }
+
     @Override
     public Optional<TaskExecutionDetails.AdditionalInformation> details() {
         return Optional.of(
@@ -103,7 +115,8 @@ public class SingleMailboxReindexingTask implements Task {
                 reprocessingContext.successfullyReprocessedMailCount(),
                 reprocessingContext.failedReprocessingMailCount(),
                 reprocessingContext.failures(),
-                Clock.systemUTC().instant())
+                Clock.systemUTC().instant(),
+                runningOptions)
         );
     }
 
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
index 7ac4084..ab2bfc8 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
@@ -20,8 +20,10 @@ package org.apache.mailbox.tools.indexer;
 
 import java.time.Instant;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.james.json.DTOModule;
+import org.apache.james.mailbox.indexer.ReIndexer.RunningOptions;
 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;
@@ -38,14 +40,20 @@ public class SingleMailboxReindexingTaskAdditionalInformationDTO implements Addi
                 dto.getSuccessfullyReprocessedMailCount(),
                 dto.getFailedReprocessedMailCount(),
                 ReprocessingContextInformationDTO.deserializeFailures(factory, dto.getFailures()),
-                dto.getTimestamp()))
+                dto.getTimestamp(),
+                dto.getRunningOptions()
+                    .map(RunningOptionsDTO::toDomainObject)
+                    .orElse(RunningOptions.DEFAULT)
+                ))
             .toDTOConverter((details, type) -> new SingleMailboxReindexingTaskAdditionalInformationDTO(
                 type,
                 details.getMailboxId(),
                 details.getSuccessfullyReprocessedMailCount(),
                 details.getFailedReprocessedMailCount(),
                 ReprocessingContextInformationDTO.serializeFailures(details.failures()),
-                details.timestamp()))
+                details.timestamp(),
+                Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions()))
+                ))
             .typeName(SingleMailboxReindexingTask.MAILBOX_RE_INDEXING.asString())
             .withFactory(AdditionalInformationDTOModule::new);
     }
@@ -59,13 +67,15 @@ public class SingleMailboxReindexingTaskAdditionalInformationDTO implements Addi
                                                                 @JsonProperty("successfullyReprocessedMailCount") int successfullyReprocessedMailCount,
                                                                 @JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
                                                                 @JsonProperty("failures") List<ReprocessingContextInformationDTO.ReindexingFailureDTO> failures,
-                                                                @JsonProperty("timestamp") Instant timestamp) {
+                                                                @JsonProperty("timestamp") Instant timestamp,
+                                                                @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) {
         this.mailboxId = mailboxId;
         this.reprocessingContextInformationDTO = new ReprocessingContextInformationDTO(
             type,
             successfullyReprocessedMailCount,
             failedReprocessedMailCount, failures,
-            timestamp);
+            timestamp,
+            runningOptions);
     }
 
     @Override
@@ -92,4 +102,8 @@ public class SingleMailboxReindexingTaskAdditionalInformationDTO implements Addi
     public List<ReprocessingContextInformationDTO.ReindexingFailureDTO> getFailures() {
         return reprocessingContextInformationDTO.getFailures();
     }
+
+    public Optional<RunningOptionsDTO> getRunningOptions() {
+        return reprocessingContextInformationDTO.getRunningOptions();
+    }
 }
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskDTO.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskDTO.java
index 1a46177..067c07a 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskDTO.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskDTO.java
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.mailbox.tools.indexer;
 
+import java.util.Optional;
+
 import org.apache.james.json.DTOModule;
 import org.apache.james.server.task.json.dto.TaskDTO;
 import org.apache.james.server.task.json.dto.TaskDTOModule;
@@ -26,6 +28,10 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class SingleMailboxReindexingTaskDTO implements TaskDTO {
 
+    private static SingleMailboxReindexingTaskDTO of(SingleMailboxReindexingTask task, String typeName) {
+        return new SingleMailboxReindexingTaskDTO(typeName, task.getMailboxId().serialize(), Optional.of(RunningOptionsDTO.toDTO(task.getRunningOptions())));
+    }
+
     public static TaskDTOModule<SingleMailboxReindexingTask, SingleMailboxReindexingTaskDTO> module(SingleMailboxReindexingTask.Factory factory) {
         return DTOModule
             .forDomainObject(SingleMailboxReindexingTask.class)
@@ -36,16 +42,16 @@ public class SingleMailboxReindexingTaskDTO implements TaskDTO {
             .withFactory(TaskDTOModule::new);
     }
 
-    public static SingleMailboxReindexingTaskDTO of(SingleMailboxReindexingTask task, String typeName) {
-        return new SingleMailboxReindexingTaskDTO(typeName, task.getMailboxId().serialize());
-    }
-
     private final String type;
     private final String mailboxId;
+    private final Optional<RunningOptionsDTO> runningOptions;
 
-    public SingleMailboxReindexingTaskDTO(@JsonProperty("type") String type, @JsonProperty("mailboxId") String mailboxId) {
+    public SingleMailboxReindexingTaskDTO(@JsonProperty("type") String type,
+                                          @JsonProperty("mailboxId") String mailboxId,
+                                          @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) {
         this.type = type;
         this.mailboxId = mailboxId;
+        this.runningOptions = runningOptions;
     }
 
     @Override
@@ -57,4 +63,7 @@ public class SingleMailboxReindexingTaskDTO implements TaskDTO {
         return mailboxId;
     }
 
+    public Optional<RunningOptionsDTO> getRunningOptions() {
+        return runningOptions;
+    }
 }
diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
index 6e283f1..f0462d0 100644
--- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
+++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.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.junit.jupiter.api.BeforeEach;
@@ -37,8 +40,10 @@ class SingleMailboxReindexingTaskSerializationTest {
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
 
-    private final String serializedMailboxReindexingTask = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\"}";
-    private final String serializedAdditionalInformation = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10, 20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedMailboxReindexingTask = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\", \"runningOptions\":{\"messagesPerSecond\":50}}";
+    private final String legacySerializedMailboxReindexingTask = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\"}";
+    private final String serializedAdditionalInformation = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10, 20]}], \"timestamp\":\"2018-11-13T12:00:55Z\", \"runningOptions\":{\"messagesPerSecond\":50}}";
+    private final String legacySerializedAdditionalInformation = "{\"type\": \"mailbox-reindexing\", \"mailboxId\": \"1\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10, 20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
@@ -60,19 +65,50 @@ class SingleMailboxReindexingTaskSerializationTest {
     @Test
     void singleMailboxReindexingShouldBeSerializable() throws Exception {
         JsonSerializationVerifier.dtoModule(SingleMailboxReindexingTaskDTO.module(factory))
-            .bean(new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId))
+            .bean(new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId, RunningOptions.DEFAULT))
             .json(serializedMailboxReindexingTask)
             .verify();
     }
 
     @Test
+    void legacyTaskshouldBeDeserializable() throws Exception {
+        SingleMailboxReindexingTask legacyTask = JsonGenericSerializer.forModules(SingleMailboxReindexingTaskDTO.module(factory))
+            .withoutNestedType()
+            .deserialize(legacySerializedMailboxReindexingTask);
+
+        SingleMailboxReindexingTask expected = new SingleMailboxReindexingTask(reIndexerPerformer, mailboxId, RunningOptions.DEFAULT);
+
+        assertThat(legacyTask)
+            .isEqualToComparingFieldByFieldRecursively(expected);
+    }
+
+    @Test
     void additionalInformationShouldBeSerializable() throws Exception {
-        SingleMailboxReindexingTask.AdditionalInformation details = new SingleMailboxReindexingTask.AdditionalInformation(mailboxId, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP);
+        SingleMailboxReindexingTask.AdditionalInformation details = new SingleMailboxReindexingTask.AdditionalInformation(mailboxId, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP, RunningOptions.DEFAULT);
 
         JsonSerializationVerifier.dtoModule(SingleMailboxReindexingTaskAdditionalInformationDTO.serializationModule(new TestId.Factory()))
             .bean(details)
             .json(serializedAdditionalInformation)
             .verify();
     }
+
+    @Test
+    void legacyAdditionalInformationShouldBeDeserializable() throws Exception {
+        SingleMailboxReindexingTask.AdditionalInformation legacyAdditionalInformation = JsonGenericSerializer.forModules(SingleMailboxReindexingTaskAdditionalInformationDTO.serializationModule(new TestId.Factory()))
+            .withoutNestedType()
+            .deserialize(legacySerializedAdditionalInformation);
+
+        SingleMailboxReindexingTask.AdditionalInformation expected = new SingleMailboxReindexingTask.AdditionalInformation(
+            mailboxId,
+            42,
+            2,
+            reIndexingExecutionFailures,
+            TIMESTAMP,
+            RunningOptions.DEFAULT
+        );
+
+        assertThat(legacyAdditionalInformation)
+            .isEqualToComparingFieldByFieldRecursively(expected);
+    }
 }
 


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