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