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:54 UTC
[james-project] 04/12: JAMES-3184 Update task serialization for
UserReindexingTask
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 <kh...@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\": \"foo@apache.org\"}";
- private final String serializedAdditionalInformation = "{\"type\": \"user-reindexing\", \"user\": \"foo@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\": \"foo@apache.org\", \"runningOptions\":{\"messagesPerSecond\":50}}";
+ private final String legacySerializedUserReindexingTask = "{\"type\": \"user-reindexing\", \"username\": \"foo@apache.org\"}";
+ private final String serializedAdditionalInformation = "{\"type\": \"user-reindexing\", \"user\": \"foo@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\": \"foo@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org