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 75ac541b425fc24921be5ddc271674f99eed2fbc Author: LanKhuat <khuatdang...@gmail.com> AuthorDate: Thu May 21 15:09:41 2020 +0700 JAMES-3184 Update task serialization for UserReindexingTask --- .../mailbox/tools/indexer/UserReindexingTask.java | 25 +++++++++--- ...UserReindexingTaskAdditionalInformationDTO.java | 28 +++++++++++--- .../tools/indexer/UserReindexingTaskDTO.java | 19 ++++++--- .../UserReindexingTaskSerializationTest.java | 45 +++++++++++++++++++--- 4 files changed, 95 insertions(+), 22 deletions(-) diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java index d1ff42b..eb06e88 100644 --- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java +++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java @@ -26,6 +26,7 @@ import java.util.Optional; import javax.inject.Inject; import org.apache.james.core.Username; +import org.apache.james.mailbox.indexer.ReIndexer.RunningOptions; import org.apache.james.mailbox.indexer.ReIndexingExecutionFailures; import org.apache.james.task.Task; import org.apache.james.task.TaskExecutionDetails; @@ -40,8 +41,10 @@ public class UserReindexingTask implements Task { public static class AdditionalInformation extends ReprocessingContextInformation { private final Username username; - AdditionalInformation(Username username, int successfullyReprocessedMailCount, int failedReprocessedMailCount, ReIndexingExecutionFailures failures, Instant timestamp) { - super(successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp); + AdditionalInformation(Username username, int successfullyReprocessedMailCount, + int failedReprocessedMailCount, ReIndexingExecutionFailures failures, + Instant timestamp, RunningOptions runningOptions) { + super(successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp, runningOptions); this.username = username; } @@ -54,12 +57,14 @@ public class UserReindexingTask implements Task { private final ReIndexerPerformer reIndexerPerformer; private final Username username; private final ReprocessingContext reprocessingContext; + private final RunningOptions runningOptions; @Inject - public UserReindexingTask(ReIndexerPerformer reIndexerPerformer, Username username) { + public UserReindexingTask(ReIndexerPerformer reIndexerPerformer, Username username, RunningOptions runningOptions) { this.reIndexerPerformer = reIndexerPerformer; this.username = username; this.reprocessingContext = new ReprocessingContext(); + this.runningOptions = runningOptions; } public static class Factory { @@ -73,13 +78,16 @@ public class UserReindexingTask implements Task { public UserReindexingTask create(UserReindexingTaskDTO dto) { Username username = Username.of(dto.getUsername()); - return new UserReindexingTask(reIndexerPerformer, username); + return new UserReindexingTask(reIndexerPerformer, username, + dto.getRunningOptions() + .map(RunningOptionsDTO::toDomainObject) + .orElse(RunningOptions.DEFAULT)); } } @Override public Result run() { - return reIndexerPerformer.reIndex(username, reprocessingContext) + return reIndexerPerformer.reIndex(username, reprocessingContext, runningOptions) .onErrorResume(e -> Mono.just(Result.PARTIAL)) .block(); } @@ -93,13 +101,18 @@ public class UserReindexingTask implements Task { return USER_RE_INDEXING; } + public RunningOptions getRunningOptions() { + return runningOptions; + } + @Override public Optional<TaskExecutionDetails.AdditionalInformation> details() { return Optional.of(new UserReindexingTask.AdditionalInformation(username, 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/UserReindexingTaskAdditionalInformationDTO.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java index 15e78ef..b76efe9 100644 --- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java +++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java @@ -20,9 +20,11 @@ package org.apache.mailbox.tools.indexer; import java.time.Instant; import java.util.List; +import java.util.Optional; import org.apache.james.core.Username; import org.apache.james.json.DTOModule; +import org.apache.james.mailbox.indexer.ReIndexer; 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; @@ -39,14 +41,20 @@ public class UserReindexingTaskAdditionalInformationDTO implements AdditionalInf dto.getSuccessfullyReprocessedMailCount(), dto.getFailedReprocessedMailCount(), ReprocessingContextInformationDTO.deserializeFailures(factory, dto.getFailures()), - dto.getTimestamp())) + dto.getTimestamp(), + dto.getRunningOptions() + .map(RunningOptionsDTO::toDomainObject) + .orElse(ReIndexer.RunningOptions.DEFAULT) + )) .toDTOConverter((details, type) -> new UserReindexingTaskAdditionalInformationDTO( type, details.getUsername(), details.getSuccessfullyReprocessedMailCount(), details.getFailedReprocessedMailCount(), ReprocessingContextInformationDTO.serializeFailures(details.failures()), - details.timestamp())) + details.timestamp(), + Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions())) + )) .typeName(UserReindexingTask.USER_RE_INDEXING.asString()) .withFactory(AdditionalInformationDTOModule::new); } @@ -60,12 +68,16 @@ public class UserReindexingTaskAdditionalInformationDTO implements AdditionalInf @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.user = user; - this.reprocessingContextInformationDTO = new ReprocessingContextInformationDTO( - type, + this.reprocessingContextInformationDTO = new ReprocessingContextInformationDTO(type, successfullyReprocessedMailCount, - failedReprocessedMailCount, failures, timestamp); + failedReprocessedMailCount, + failures, + timestamp, + runningOptions); } @Override @@ -92,4 +104,8 @@ public class UserReindexingTaskAdditionalInformationDTO implements AdditionalInf 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/UserReindexingTaskDTO.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskDTO.java index ac3a4ca..7ce4b7c 100644 --- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskDTO.java +++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskDTO.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 UserReindexingTaskDTO implements TaskDTO { + private static UserReindexingTaskDTO of(UserReindexingTask task, String type) { + return new UserReindexingTaskDTO(type, task.getUsername().asString(), Optional.of(RunningOptionsDTO.toDTO(task.getRunningOptions()))); + } + public static TaskDTOModule<UserReindexingTask, UserReindexingTaskDTO> module(UserReindexingTask.Factory factory) { return DTOModule .forDomainObject(UserReindexingTask.class) @@ -36,16 +42,16 @@ public class UserReindexingTaskDTO implements TaskDTO { .withFactory(TaskDTOModule::new); } - public static UserReindexingTaskDTO of(UserReindexingTask task, String type) { - return new UserReindexingTaskDTO(type, task.getUsername().asString()); - } - private final String type; private final String username; + private final Optional<RunningOptionsDTO> runningOptions; - private UserReindexingTaskDTO(@JsonProperty("type") String type, @JsonProperty("username") String username) { + private UserReindexingTaskDTO(@JsonProperty("type") String type, + @JsonProperty("username") String username, + @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) { this.type = type; this.username = username; + this.runningOptions = runningOptions; } @Override @@ -57,4 +63,7 @@ public class UserReindexingTaskDTO implements TaskDTO { return username; } + public Optional<RunningOptionsDTO> getRunningOptions() { + return runningOptions; + } } diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java index 39274b8..bcdcc3b 100644 --- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java +++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.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 org.apache.james.JsonSerializationVerifier; import org.apache.james.core.Username; +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; @@ -38,9 +41,10 @@ class UserReindexingTaskSerializationTest { private final int successfullyReprocessedMailCount = 42; private final int failedReprocessedMailCount = 2; - private final String serializedUserReindexingTask = "{\"type\": \"user-reindexing\", \"username\": \"f...@apache.org\"}"; - private final String serializedAdditionalInformation = "{\"type\": \"user-reindexing\", \"user\": \"f...@apache.org\", \"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}"; - + private final String serializedUserReindexingTask = "{\"type\": \"user-reindexing\", \"username\": \"f...@apache.org\", \"runningOptions\":{\"messagesPerSecond\":50}}"; + private final String legacySerializedUserReindexingTask = "{\"type\": \"user-reindexing\", \"username\": \"f...@apache.org\"}"; + private final String serializedAdditionalInformation = "{\"type\": \"user-reindexing\", \"user\": \"f...@apache.org\", \"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\": \"user-reindexing\", \"user\": \"f...@apache.org\", \"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 TestId mailboxId2 = TestId.of(2L); @@ -63,18 +67,49 @@ class UserReindexingTaskSerializationTest { @Test void userReindexingShouldBeSerializable() throws Exception { JsonSerializationVerifier.dtoModule(UserReindexingTaskDTO.module(factory)) - .bean(new UserReindexingTask(reIndexerPerformer, USERNAME)) + .bean(new UserReindexingTask(reIndexerPerformer, USERNAME, RunningOptions.DEFAULT)) .json(serializedUserReindexingTask) .verify(); } @Test + void legacyTaskshouldBeDeserializable() throws Exception { + UserReindexingTask legacyTask = JsonGenericSerializer.forModules(UserReindexingTaskDTO.module(factory)) + .withoutNestedType() + .deserialize(legacySerializedUserReindexingTask); + + UserReindexingTask expected = new UserReindexingTask(reIndexerPerformer, USERNAME, RunningOptions.DEFAULT); + + assertThat(legacyTask) + .isEqualToComparingFieldByFieldRecursively(expected); + } + + @Test void additionalInformationShouldBeSerializable() throws Exception { - UserReindexingTask.AdditionalInformation details = new UserReindexingTask.AdditionalInformation(USERNAME, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP); + UserReindexingTask.AdditionalInformation details = new UserReindexingTask.AdditionalInformation(USERNAME, successfullyReprocessedMailCount, failedReprocessedMailCount, reIndexingExecutionFailures, TIMESTAMP, RunningOptions.DEFAULT); JsonSerializationVerifier.dtoModule(UserReindexingTaskAdditionalInformationDTO.serializationModule(new TestId.Factory())) .bean(details) .json(serializedAdditionalInformation) .verify(); } + + @Test + void legacyAdditionalInformationShouldBeDeserializable() throws Exception { + UserReindexingTask.AdditionalInformation legacyAdditionalInformation = JsonGenericSerializer.forModules(UserReindexingTaskAdditionalInformationDTO.serializationModule(new TestId.Factory())) + .withoutNestedType() + .deserialize(legacySerializedAdditionalInformation); + + UserReindexingTask.AdditionalInformation expected = new UserReindexingTask.AdditionalInformation( + USERNAME, + 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