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/03/06 03:07:14 UTC
[james-project] 13/21: JAMES-3058 Expose task solving mailbox
inconsistencies over webadmin
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 81383330c89c6bd51999c6022a61322f50d3c2d8
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Feb 14 14:45:05 2020 +0700
JAMES-3058 Expose task solving mailbox inconsistencies over webadmin
Detailed unit testing is performed at the mailbox level and will not be
repeated here.
---
.../mail/task/SolveMailboxInconsistenciesTask.java | 8 +++++-
.../webadmin/InconsistencySolvingRoutesModule.java | 14 +++++++++
.../RabbitMQWebAdminServerIntegrationTest.java | 32 +++++++++++++++++++++
.../SolveMailboxInconsistenciesRequestToTask.java} | 33 ++++++++--------------
4 files changed, 65 insertions(+), 22 deletions(-)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java
index f345689..8cbb7e8 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java
@@ -29,6 +29,7 @@ import org.apache.james.task.TaskType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableList;
public class SolveMailboxInconsistenciesTask implements Task {
@@ -59,22 +60,27 @@ public class SolveMailboxInconsistenciesTask implements Task {
return instant;
}
+ @JsonProperty("processedMailboxEntries")
long getProcessedMailboxEntries() {
return processedMailboxEntries;
}
+ @JsonProperty("processedMailboxPathEntries")
long getProcessedMailboxPathEntries() {
return processedMailboxPathEntries;
}
+ @JsonProperty("fixedInconsistencies")
long getFixedInconsistencies() {
return fixedInconsistencies;
}
+ @JsonProperty("conflictingEntries")
ImmutableList<ConflictingEntry> getConflictingEntries() {
return conflictingEntries;
}
+ @JsonProperty("errors")
long getErrors() {
return errors;
}
@@ -82,7 +88,7 @@ public class SolveMailboxInconsistenciesTask implements Task {
private final SolveMailboxInconsistenciesService service;
- SolveMailboxInconsistenciesTask(SolveMailboxInconsistenciesService service) {
+ public SolveMailboxInconsistenciesTask(SolveMailboxInconsistenciesService service) {
this.service = service;
this.context = new SolveMailboxInconsistenciesService.Context();
}
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java
index fc49a21..bf995c1 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java
@@ -21,11 +21,15 @@ package org.apache.james.modules.webadmin;
import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.routes.CassandraMappingsRoutes;
+import org.apache.james.webadmin.routes.MailboxesRoutes;
+import org.apache.james.webadmin.routes.SolveMailboxInconsistenciesRequestToTask;
import org.apache.james.webadmin.service.CassandraMappingsService;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Names;
public class InconsistencySolvingRoutesModule extends AbstractModule {
public static class SolveRRTInconsistenciesModules extends AbstractModule {
@@ -39,8 +43,18 @@ public class InconsistencySolvingRoutesModule extends AbstractModule {
}
}
+ public static class SolveMailboxInconsistenciesModules extends AbstractModule {
+ @Override
+ protected void configure() {
+ Multibinder.newSetBinder(binder(), TaskFromRequestRegistry.TaskRegistration.class,
+ Names.named(MailboxesRoutes.ALL_MAILBOXES_TASKS))
+ .addBinding().to(SolveMailboxInconsistenciesRequestToTask.class);
+ }
+ }
+
@Override
protected void configure() {
install(new SolveRRTInconsistenciesModules());
+ install(new SolveMailboxInconsistenciesModules());
}
}
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
index 0d425d1..dcf26ba 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
@@ -26,6 +26,7 @@ import static org.apache.james.webadmin.Constants.JSON_CONTENT_TYPE;
import static org.apache.james.webadmin.Constants.SEPARATOR;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import org.apache.james.CassandraExtension;
@@ -164,6 +165,37 @@ class RabbitMQWebAdminServerIntegrationTest extends WebAdminServerIntegrationTes
.body("source", hasItems(ALIAS_1, ALIAS_2));
}
+ @Test
+ void solveMailboxInconsistenciesTaskShouldBeExposed() {
+ // schema version 6 or higher required to run solve mailbox inconsistencies task
+ String taskId = with().post(UPGRADE_TO_LATEST_VERSION)
+ .jsonPath()
+ .get("taskId");
+
+ with()
+ .get("/tasks/" + taskId + "/await")
+ .then()
+ .body("status", is("completed"));
+
+ taskId = with()
+ .queryParam("task", "SolveInconsistencies")
+ .post("/mailboxes")
+ .jsonPath()
+ .get("taskId");
+
+ given()
+ .basePath(TasksRoutes.BASE)
+ .when()
+ .get(taskId + "/await")
+ .then()
+ .body("status", is("completed"))
+ .body("type", is("solve-mailbox-inconsistencies"))
+ .body("additionalInformation.processedMailboxEntries", is(0))
+ .body("additionalInformation.processedMailboxPathEntries", is(0))
+ .body("additionalInformation.errors", is(0))
+ .body("additionalInformation.fixedInconsistencies", hasSize(0))
+ .body("additionalInformation.conflictingEntries", hasSize(0));
+ }
@Test
void getSwaggerShouldContainDistributedEndpoints() {
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java b/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java
similarity index 54%
copy from server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java
copy to server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java
index fc49a21..7418226 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java
+++ b/server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java
@@ -17,30 +17,21 @@
* under the License. *
****************************************************************/
-package org.apache.james.modules.webadmin;
+package org.apache.james.webadmin.routes;
-import org.apache.james.webadmin.Routes;
-import org.apache.james.webadmin.routes.CassandraMappingsRoutes;
-import org.apache.james.webadmin.service.CassandraMappingsService;
+import javax.inject.Inject;
-import com.google.inject.AbstractModule;
-import com.google.inject.Scopes;
-import com.google.inject.multibindings.Multibinder;
+import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesService;
+import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesTask;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
+import org.apache.james.webadmin.tasks.TaskRegistrationKey;
-public class InconsistencySolvingRoutesModule extends AbstractModule {
- public static class SolveRRTInconsistenciesModules extends AbstractModule {
- @Override
- protected void configure() {
- bind(CassandraMappingsRoutes.class).in(Scopes.SINGLETON);
- bind(CassandraMappingsService.class).in(Scopes.SINGLETON);
+public class SolveMailboxInconsistenciesRequestToTask extends TaskFromRequestRegistry.TaskRegistration {
+ private static final TaskRegistrationKey REGISTRATION_KEY = TaskRegistrationKey.of("SolveInconsistencies");
- Multibinder<Routes> routesMultibinder = Multibinder.newSetBinder(binder(), Routes.class);
- routesMultibinder.addBinding().to(CassandraMappingsRoutes.class);
- }
- }
-
- @Override
- protected void configure() {
- install(new SolveRRTInconsistenciesModules());
+ @Inject
+ public SolveMailboxInconsistenciesRequestToTask(SolveMailboxInconsistenciesService service) {
+ super(REGISTRATION_KEY,
+ request -> new SolveMailboxInconsistenciesTask(service));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org