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]
