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