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