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 rc...@apache.org on 2020/05/20 01:58:13 UTC
[james-project] 04/11: JAMES-3184 RecomputeFastViewProjection task
should take runningOptions as argument
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 7ec600de1a1237fafedc5816cc4b398a26398cd9
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed May 13 14:36:50 2020 +0700
JAMES-3184 RecomputeFastViewProjection task should take runningOptions as argument
Handle deserialization for running options, and legacy tasks
deserialization
---
...uteAllFastViewProjectionItemsRequestToTask.java | 4 ++-
.../RecomputeAllFastViewProjectionItemsTask.java | 30 +++++++++++++---
...teUserFastViewProjectionItemsRequestToTask.java | 3 +-
.../RecomputeUserFastViewProjectionItemsTask.java | 37 ++++++++++++++++----
.../webadmin/data/jmap/RunningOptionsDTO.java} | 40 +++++++++++++---------
...stViewProjectionItemsTaskSerializationTest.java | 19 +++++++++-
...stViewProjectionItemsTaskSerializationTest.java | 21 +++++++++++-
.../src/test/resources/json/recomputeAll.task.json | 7 +++-
...All.task.json => recomputeAll.task.legacy.json} | 0
.../test/resources/json/recomputeUser.task.json | 5 ++-
...er.task.json => recomputeUser.task.legacy.json} | 0
11 files changed, 131 insertions(+), 35 deletions(-)
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTask.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTask.java
index e8d8a23..e81cf79 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTask.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTask.java
@@ -19,6 +19,8 @@
package org.apache.james.webadmin.data.jmap;
+import static org.apache.james.webadmin.data.jmap.MessageFastViewProjectionCorrector.RunningOptions;
+
import javax.inject.Inject;
import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
@@ -27,6 +29,6 @@ public class RecomputeAllFastViewProjectionItemsRequestToTask extends TaskFromRe
@Inject
RecomputeAllFastViewProjectionItemsRequestToTask(MessageFastViewProjectionCorrector corrector) {
super(Constants.TASK_REGISTRATION_KEY,
- request -> new RecomputeAllFastViewProjectionItemsTask(corrector));
+ request -> new RecomputeAllFastViewProjectionItemsTask(corrector, RunningOptions.DEFAULT));
}
}
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTask.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTask.java
index 6acba49..a34e412 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTask.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTask.java
@@ -86,38 +86,58 @@ public class RecomputeAllFastViewProjectionItemsTask implements Task {
public static class RecomputeAllFastViewTaskDTO implements TaskDTO {
private final String type;
+ private final Optional<RunningOptionsDTO> runningOptions;
- public RecomputeAllFastViewTaskDTO(@JsonProperty("type") String type) {
+ public RecomputeAllFastViewTaskDTO(@JsonProperty("type") String type,
+ @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) {
this.type = type;
+ this.runningOptions = runningOptions;
}
@Override
public String getType() {
return type;
}
+
+ public Optional<RunningOptionsDTO> getRunningOptions() {
+ return runningOptions;
+ }
}
public static TaskDTOModule<RecomputeAllFastViewProjectionItemsTask, RecomputeAllFastViewTaskDTO> module(MessageFastViewProjectionCorrector corrector) {
return DTOModule
.forDomainObject(RecomputeAllFastViewProjectionItemsTask.class)
.convertToDTO(RecomputeAllFastViewTaskDTO.class)
- .toDomainObjectConverter(dto -> new RecomputeAllFastViewProjectionItemsTask(corrector))
- .toDTOConverter((task, type) -> new RecomputeAllFastViewTaskDTO(type))
+ .toDomainObjectConverter(dto -> asTask(corrector, dto))
+ .toDTOConverter(RecomputeAllFastViewProjectionItemsTask::asDTO)
.typeName(TASK_TYPE.asString())
.withFactory(TaskDTOModule::new);
}
+ private static RecomputeAllFastViewTaskDTO asDTO(RecomputeAllFastViewProjectionItemsTask task, String type) {
+ return new RecomputeAllFastViewTaskDTO(type, Optional.of(RunningOptionsDTO.asDTO(task.runningOptions)));
+ }
+
+ private static RecomputeAllFastViewProjectionItemsTask asTask(MessageFastViewProjectionCorrector corrector, RecomputeAllFastViewTaskDTO dto) {
+ return new RecomputeAllFastViewProjectionItemsTask(corrector,
+ dto.getRunningOptions()
+ .map(RunningOptionsDTO::asDomainObject)
+ .orElse(RunningOptions.DEFAULT));
+ }
+
private final MessageFastViewProjectionCorrector corrector;
private final MessageFastViewProjectionCorrector.Progress progress;
+ private final RunningOptions runningOptions;
- RecomputeAllFastViewProjectionItemsTask(MessageFastViewProjectionCorrector corrector) {
+ RecomputeAllFastViewProjectionItemsTask(MessageFastViewProjectionCorrector corrector, RunningOptions runningOptions) {
this.corrector = corrector;
+ this.runningOptions = runningOptions;
this.progress = new MessageFastViewProjectionCorrector.Progress();
}
@Override
public Result run() {
- return corrector.correctAllProjectionItems(progress, RunningOptions.DEFAULT)
+ return corrector.correctAllProjectionItems(progress, runningOptions)
.subscribeOn(Schedulers.elastic())
.block();
}
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTask.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTask.java
index c3a9f44..7b32ec6 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTask.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTask.java
@@ -25,6 +25,7 @@ import org.apache.james.core.Username;
import org.apache.james.task.Task;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.james.webadmin.data.jmap.MessageFastViewProjectionCorrector.RunningOptions;
import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
import org.apache.james.webadmin.utils.ErrorResponder;
import org.eclipse.jetty.http.HttpStatus;
@@ -43,7 +44,7 @@ public class RecomputeUserFastViewProjectionItemsRequestToTask extends TaskFromR
private static Task toTask(MessageFastViewProjectionCorrector corrector, UsersRepository usersRepository, Request request) throws UsersRepositoryException {
Username username = Username.of(request.params("username"));
if (usersRepository.contains(username)) {
- return new RecomputeUserFastViewProjectionItemsTask(corrector, username);
+ return new RecomputeUserFastViewProjectionItemsTask(corrector, RunningOptions.DEFAULT, username);
}
throw ErrorResponder.builder()
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTask.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTask.java
index 3e44238..ca41a3f 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTask.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTask.java
@@ -82,12 +82,16 @@ public class RecomputeUserFastViewProjectionItemsTask implements Task {
public static class RecomputeUserFastViewTaskDTO implements TaskDTO {
private final String type;
private final String username;
+ private final Optional<RunningOptionsDTO> runningOptions;
public RecomputeUserFastViewTaskDTO(
- @JsonProperty("type") String type,
- @JsonProperty("username") String username) {
+ @JsonProperty("type") String type,
+ @JsonProperty("username") String username,
+ @JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) {
+
this.type = type;
this.username = username;
+ this.runningOptions = runningOptions;
}
@Override
@@ -98,31 +102,50 @@ public class RecomputeUserFastViewProjectionItemsTask implements Task {
public String getUsername() {
return username;
}
+
+ public Optional<RunningOptionsDTO> getRunningOptions() {
+ return runningOptions;
+ }
}
public static TaskDTOModule<RecomputeUserFastViewProjectionItemsTask, RecomputeUserFastViewTaskDTO> module(MessageFastViewProjectionCorrector corrector) {
return DTOModule
.forDomainObject(RecomputeUserFastViewProjectionItemsTask.class)
.convertToDTO(RecomputeUserFastViewTaskDTO.class)
- .toDomainObjectConverter(dto -> new RecomputeUserFastViewProjectionItemsTask(corrector, Username.of(dto.username)))
- .toDTOConverter((task, type) -> new RecomputeUserFastViewTaskDTO(type, task.username.asString()))
+ .toDomainObjectConverter(dto -> asTask(corrector, dto))
+ .toDTOConverter(RecomputeUserFastViewProjectionItemsTask::asDTO)
.typeName(TASK_TYPE.asString())
.withFactory(TaskDTOModule::new);
}
+ private static RecomputeUserFastViewTaskDTO asDTO(RecomputeUserFastViewProjectionItemsTask task, String type) {
+ return new RecomputeUserFastViewTaskDTO(type, task.username.asString(),
+ Optional.of(RunningOptionsDTO.asDTO(task.runningOptions)));
+ }
+
+ private static RecomputeUserFastViewProjectionItemsTask asTask(MessageFastViewProjectionCorrector corrector, RecomputeUserFastViewTaskDTO dto) {
+ return new RecomputeUserFastViewProjectionItemsTask(corrector,
+ dto.getRunningOptions()
+ .map(RunningOptionsDTO::asDomainObject)
+ .orElse(RunningOptions.DEFAULT),
+ Username.of(dto.username));
+ }
+
private final MessageFastViewProjectionCorrector corrector;
- private final MessageFastViewProjectionCorrector.Progress progress;
+ private final RunningOptions runningOptions;
+ private final Progress progress;
private final Username username;
- RecomputeUserFastViewProjectionItemsTask(MessageFastViewProjectionCorrector corrector, Username username) {
+ RecomputeUserFastViewProjectionItemsTask(MessageFastViewProjectionCorrector corrector, RunningOptions runningOptions, Username username) {
this.corrector = corrector;
+ this.runningOptions = runningOptions;
this.username = username;
this.progress = new MessageFastViewProjectionCorrector.Progress();
}
@Override
public Result run() {
- return corrector.correctUsersProjectionItems(progress, username, RunningOptions.DEFAULT)
+ return corrector.correctUsersProjectionItems(progress, username, runningOptions)
.subscribeOn(Schedulers.elastic())
.block();
}
diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptionsDTO.java
similarity index 56%
copy from server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java
copy to server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptionsDTO.java
index 3d1b949..5fae5b5 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptionsDTO.java
@@ -19,26 +19,32 @@
package org.apache.james.webadmin.data.jmap;
-import static org.mockito.Mockito.mock;
+import java.util.Optional;
-import org.apache.james.JsonSerializationVerifier;
-import org.apache.james.util.ClassLoaderUtils;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.apache.james.webadmin.data.jmap.MessageFastViewProjectionCorrector.RunningOptions;
-class RecomputeAllFastViewProjectionItemsTaskSerializationTest {
- MessageFastViewProjectionCorrector corrector;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
- @BeforeEach
- void setUp() {
- corrector = mock(MessageFastViewProjectionCorrector.class);
+public class RunningOptionsDTO {
+ public static RunningOptionsDTO asDTO(RunningOptions domainObject) {
+ return new RunningOptionsDTO(Optional.of(domainObject.getMessageRatePerSecond()));
}
- @Test
- void shouldMatchJsonSerializationContract() throws Exception {
- JsonSerializationVerifier.dtoModule(RecomputeAllFastViewProjectionItemsTask.module(corrector))
- .bean(new RecomputeAllFastViewProjectionItemsTask(corrector))
- .json(ClassLoaderUtils.getSystemResourceAsString("json/recomputeAll.task.json"))
- .verify();
+ private final Optional<Integer> messageRatePerSecond;
+
+ @JsonCreator
+ public RunningOptionsDTO(
+ @JsonProperty("messageRatePerSecond") Optional<Integer> messageRatePerSecond) {
+ this.messageRatePerSecond = messageRatePerSecond;
+ }
+
+ public Optional<Integer> getMessageRatePerSecond() {
+ return messageRatePerSecond;
+ }
+
+ public RunningOptions asDomainObject() {
+ return messageRatePerSecond.map(RunningOptions::withMessageRatePerSecond)
+ .orElse(RunningOptions.DEFAULT);
}
-}
\ No newline at end of file
+}
diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java
index 3d1b949..fc9f89e 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java
@@ -19,10 +19,13 @@
package org.apache.james.webadmin.data.jmap;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import org.apache.james.JsonSerializationVerifier;
+import org.apache.james.json.JsonGenericSerializer;
import org.apache.james.util.ClassLoaderUtils;
+import org.apache.james.webadmin.data.jmap.MessageFastViewProjectionCorrector.RunningOptions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -37,8 +40,22 @@ class RecomputeAllFastViewProjectionItemsTaskSerializationTest {
@Test
void shouldMatchJsonSerializationContract() throws Exception {
JsonSerializationVerifier.dtoModule(RecomputeAllFastViewProjectionItemsTask.module(corrector))
- .bean(new RecomputeAllFastViewProjectionItemsTask(corrector))
+ .bean(new RecomputeAllFastViewProjectionItemsTask(corrector,
+ RunningOptions.withMessageRatePerSecond(2)))
.json(ClassLoaderUtils.getSystemResourceAsString("json/recomputeAll.task.json"))
.verify();
}
+
+ @Test
+ void shouldDeserializeLegacy() throws Exception {
+ RecomputeAllFastViewProjectionItemsTask legacyTask = JsonGenericSerializer.forModules(RecomputeAllFastViewProjectionItemsTask.module(corrector))
+ .withoutNestedType()
+ .deserialize(ClassLoaderUtils.getSystemResourceAsString("json/recomputeAll.task.legacy.json"));
+
+ RecomputeAllFastViewProjectionItemsTask expected = new RecomputeAllFastViewProjectionItemsTask(corrector,
+ RunningOptions.DEFAULT);
+
+ assertThat(legacyTask)
+ .isEqualToComparingFieldByFieldRecursively(expected);
+ }
}
\ No newline at end of file
diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTaskSerializationTest.java b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTaskSerializationTest.java
index 2d7d75d..b5796ba 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTaskSerializationTest.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTaskSerializationTest.java
@@ -19,11 +19,14 @@
package org.apache.james.webadmin.data.jmap;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import org.apache.james.JsonSerializationVerifier;
import org.apache.james.core.Username;
+import org.apache.james.json.JsonGenericSerializer;
import org.apache.james.util.ClassLoaderUtils;
+import org.apache.james.webadmin.data.jmap.MessageFastViewProjectionCorrector.RunningOptions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -38,8 +41,24 @@ class RecomputeUserFastViewProjectionItemsTaskSerializationTest {
@Test
void shouldMatchJsonSerializationContract() throws Exception {
JsonSerializationVerifier.dtoModule(RecomputeUserFastViewProjectionItemsTask.module(corrector))
- .bean(new RecomputeUserFastViewProjectionItemsTask(corrector, Username.of("bob")))
+ .bean(new RecomputeUserFastViewProjectionItemsTask(corrector,
+ RunningOptions.withMessageRatePerSecond(2),
+ Username.of("bob")))
.json(ClassLoaderUtils.getSystemResourceAsString("json/recomputeUser.task.json"))
.verify();
}
+
+ @Test
+ void shouldDeserializeLegacy() throws Exception {
+ RecomputeUserFastViewProjectionItemsTask legacyTask = JsonGenericSerializer.forModules(RecomputeUserFastViewProjectionItemsTask.module(corrector))
+ .withoutNestedType()
+ .deserialize(ClassLoaderUtils.getSystemResourceAsString("json/recomputeUser.task.legacy.json"));
+
+ RecomputeUserFastViewProjectionItemsTask expected = new RecomputeUserFastViewProjectionItemsTask(corrector,
+ RunningOptions.DEFAULT,
+ Username.of("bob"));
+
+ assertThat(legacyTask)
+ .isEqualToComparingFieldByFieldRecursively(expected);
+ }
}
\ No newline at end of file
diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.json b/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.json
index a76c799..0a61bed 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.json
+++ b/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.json
@@ -1 +1,6 @@
-{"type":"RecomputeAllFastViewProjectionItemsTask"}
\ No newline at end of file
+{
+ "type":"RecomputeAllFastViewProjectionItemsTask",
+ "runningOptions": {
+ "messageRatePerSecond":2
+ }
+}
\ No newline at end of file
diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.json b/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.legacy.json
similarity index 100%
copy from server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.json
copy to server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.legacy.json
diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.json b/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.json
index fcd7712..2612c4c 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.json
+++ b/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.json
@@ -1,4 +1,7 @@
{
"type":"RecomputeUserFastViewProjectionItemsTask",
- "username": "bob"
+ "username": "bob",
+ "runningOptions": {
+ "messageRatePerSecond":2
+ }
}
\ No newline at end of file
diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.json b/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.legacy.json
similarity index 100%
copy from server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.json
copy to server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.legacy.json
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org