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 <khuatdang...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org