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:53 UTC
[james-project] 03/12: JAMES-3184 Update task serialization for
SingleMailboxReindexingTask
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 <kh...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org