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