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 <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org