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 2019/12/18 11:29:51 UTC

[james-project] 04/06: JAMES-2993 Not all guice products supports indexation

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 3184372c30aa2031b6bcc09350572b095d5eafee
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Dec 17 10:07:39 2019 +0700

    JAMES-2993 Not all guice products supports indexation
    
    This is not the case of memory which relies on scrolling search
---
 .../org/apache/james/CassandraJamesServerMain.java |  2 ++
 .../java/org/apache/james/JPAJamesServerMain.java  |  6 ++--
 .../james/modules/server/MailboxRoutesModule.java  |  6 ++++
 ...lboxRoutesModule.java => ReIndexingModule.java} | 28 ++++++------------
 .../webadmin/tasks/TaskFromRequestRegistry.java    |  9 ++++--
 .../james/webadmin/routes/UserMailboxesRoutes.java | 34 +++++++++++++++-------
 .../webadmin/routes/MalformedUrlRoutesTest.java    |  8 +++--
 .../webadmin/routes/UserMailboxesRoutesTest.java   |  4 ++-
 8 files changed, 59 insertions(+), 38 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
index 84953d0..67bf8b5 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -64,6 +64,7 @@ import org.apache.james.modules.server.MailRepositoriesRoutesModule;
 import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.MailboxesRoutesModule;
 import org.apache.james.modules.server.MessagesRoutesModule;
+import org.apache.james.modules.server.ReIndexingModule;
 import org.apache.james.modules.server.SieveRoutesModule;
 import org.apache.james.modules.server.SwaggerRoutesModule;
 import org.apache.james.modules.server.TaskManagerModule;
@@ -91,6 +92,7 @@ public class CassandraJamesServerMain {
         new SwaggerRoutesModule(),
         new WebAdminServerModule(),
         new DLPRoutesModule(),
+        new ReIndexingModule(),
         new SieveRoutesModule(),
         new MailboxesRoutesModule(),
         new MessagesRoutesModule());
diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
index 2fb60b8..b4f2b64 100644
--- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
+++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java
@@ -44,6 +44,7 @@ import org.apache.james.modules.server.MailboxRoutesModule;
 import org.apache.james.modules.server.MailboxesRoutesModule;
 import org.apache.james.modules.server.NoJwtModule;
 import org.apache.james.modules.server.RawPostDequeueDecoratorModule;
+import org.apache.james.modules.server.ReIndexingModule;
 import org.apache.james.modules.server.SieveRoutesModule;
 import org.apache.james.modules.server.SwaggerRoutesModule;
 import org.apache.james.modules.server.TaskManagerModule;
@@ -60,11 +61,12 @@ public class JPAJamesServerMain {
         new WebAdminServerModule(),
         new DataRoutesModules(),
         new MailboxRoutesModule(),
+        new MailboxesRoutesModule(),
         new MailQueueRoutesModule(),
         new MailRepositoriesRoutesModule(),
+        new ReIndexingModule(),
         new SwaggerRoutesModule(),
-        new SieveRoutesModule(),
-        new MailboxesRoutesModule());
+        new SieveRoutesModule());
 
     public static final Module PROTOCOLS = Modules.combine(
         new IMAPServerModule(),
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
index b942500..9b05566 100644
--- a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.modules.server;
 
+import static org.apache.james.webadmin.routes.UserMailboxesRoutes.USER_MAILBOXES_OPERATIONS_INJECTION_KEY;
+
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.jackson.QuotaModule;
 import org.apache.james.webadmin.routes.DomainQuotaRoutes;
@@ -26,10 +28,12 @@ import org.apache.james.webadmin.routes.EventDeadLettersRoutes;
 import org.apache.james.webadmin.routes.GlobalQuotaRoutes;
 import org.apache.james.webadmin.routes.UserMailboxesRoutes;
 import org.apache.james.webadmin.routes.UserQuotaRoutes;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry.TaskRegistration;
 import org.apache.james.webadmin.utils.JsonTransformerModule;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Names;
 
 public class MailboxRoutesModule extends AbstractModule {
 
@@ -44,5 +48,7 @@ public class MailboxRoutesModule extends AbstractModule {
 
         Multibinder<JsonTransformerModule> jsonTransformerModuleMultibinder = Multibinder.newSetBinder(binder(), JsonTransformerModule.class);
         jsonTransformerModuleMultibinder.addBinding().to(QuotaModule.class);
+
+        Multibinder.newSetBinder(binder(), TaskRegistration.class, Names.named(USER_MAILBOXES_OPERATIONS_INJECTION_KEY));
     }
 }
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/ReIndexingModule.java
similarity index 53%
copy from server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
copy to server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/ReIndexingModule.java
index b942500..8825cf6 100644
--- a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/ReIndexingModule.java
@@ -19,30 +19,20 @@
 
 package org.apache.james.modules.server;
 
-import org.apache.james.webadmin.Routes;
-import org.apache.james.webadmin.jackson.QuotaModule;
-import org.apache.james.webadmin.routes.DomainQuotaRoutes;
-import org.apache.james.webadmin.routes.EventDeadLettersRoutes;
-import org.apache.james.webadmin.routes.GlobalQuotaRoutes;
-import org.apache.james.webadmin.routes.UserMailboxesRoutes;
-import org.apache.james.webadmin.routes.UserQuotaRoutes;
-import org.apache.james.webadmin.utils.JsonTransformerModule;
+import static org.apache.james.webadmin.routes.UserMailboxesRoutes.USER_MAILBOXES_OPERATIONS_INJECTION_KEY;
+
+import org.apache.james.webadmin.routes.UserMailboxesRoutes.UserReIndexingTaskRegistration;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry.TaskRegistration;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Names;
 
-public class MailboxRoutesModule extends AbstractModule {
-
+public class ReIndexingModule extends AbstractModule {
     @Override
     protected void configure() {
-        Multibinder<Routes> routesMultibinder = Multibinder.newSetBinder(binder(), Routes.class);
-        routesMultibinder.addBinding().to(DomainQuotaRoutes.class);
-        routesMultibinder.addBinding().to(EventDeadLettersRoutes.class);
-        routesMultibinder.addBinding().to(GlobalQuotaRoutes.class);
-        routesMultibinder.addBinding().to(UserQuotaRoutes.class);
-        routesMultibinder.addBinding().to(UserMailboxesRoutes.class);
-
-        Multibinder<JsonTransformerModule> jsonTransformerModuleMultibinder = Multibinder.newSetBinder(binder(), JsonTransformerModule.class);
-        jsonTransformerModuleMultibinder.addBinding().to(QuotaModule.class);
+        Multibinder.newSetBinder(binder(), TaskRegistration.class, Names.named(USER_MAILBOXES_OPERATIONS_INJECTION_KEY))
+            .addBinding()
+            .to(UserReIndexingTaskRegistration.class);
     }
 }
diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskFromRequestRegistry.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskFromRequestRegistry.java
index 505e4f1..e823aba 100644
--- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskFromRequestRegistry.java
+++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskFromRequestRegistry.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.webadmin.tasks;
 
-import java.util.Arrays;
+import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.Function;
@@ -34,6 +34,7 @@ import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 
 import spark.Request;
 import spark.Route;
@@ -56,7 +57,11 @@ public class TaskFromRequestRegistry implements TaskFromRequest {
         }
 
         public Builder registrations(TaskRegistration... taskRegistrations) {
-            this.tasks.putAll(Arrays.stream(taskRegistrations)
+            return this.registrations(ImmutableSet.copyOf(taskRegistrations));
+        }
+
+        public Builder registrations(Collection<TaskRegistration> taskRegistrations) {
+            this.tasks.putAll(taskRegistrations.stream()
                 .collect(Guavate.toImmutableMap(
                     TaskRegistration::registrationKey,
                     Function.identity())));
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserMailboxesRoutes.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserMailboxesRoutes.java
index 9e040a0..3281ffc 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserMailboxesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserMailboxesRoutes.java
@@ -22,7 +22,10 @@ package org.apache.james.webadmin.routes;
 import static org.apache.james.webadmin.routes.MailboxesRoutes.RE_INDEX;
 import static org.apache.james.webadmin.routes.MailboxesRoutes.TASK_PARAMETER;
 
+import java.util.Set;
+
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -32,12 +35,12 @@ import javax.ws.rs.Produces;
 
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.indexer.ReIndexer;
-import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.task.TaskManager;
 import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.service.UserMailboxesService;
 import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry.TaskRegistration;
 import org.apache.james.webadmin.tasks.TaskIdDto;
 import org.apache.james.webadmin.utils.ErrorResponder;
 import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
@@ -65,6 +68,18 @@ import spark.Service;
 public class UserMailboxesRoutes implements Routes {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(UserMailboxesRoutes.class);
+    public static final String USER_MAILBOXES_OPERATIONS_INJECTION_KEY = "userMailboxesOperations";
+
+    public static class UserReIndexingTaskRegistration extends TaskRegistration {
+        @Inject
+        public UserReIndexingTaskRegistration(ReIndexer reIndexer) {
+            super(RE_INDEX, request -> reIndexer.reIndex(getUsernameParam(request)));
+        }
+    }
+
+    private static Username getUsernameParam(Request request) {
+        return Username.of(request.params(USER_NAME));
+    }
 
     public static final String MAILBOX_NAME = ":mailboxName";
     public static final String MAILBOXES = "mailboxes";
@@ -76,17 +91,18 @@ public class UserMailboxesRoutes implements Routes {
     private final UserMailboxesService userMailboxesService;
     private final JsonTransformer jsonTransformer;
     private final TaskManager taskManager;
-    private final MailboxId.Factory mailboxIdFactory;
-    private final ReIndexer reIndexer;
+    private final Set<TaskRegistration> usersMailboxesTaskRegistration;
     private Service service;
 
     @Inject
-    UserMailboxesRoutes(UserMailboxesService userMailboxesService, JsonTransformer jsonTransformer, TaskManager taskManager, MailboxId.Factory mailboxIdFactory, ReIndexer reIndexer) {
+    UserMailboxesRoutes(UserMailboxesService userMailboxesService,
+                        JsonTransformer jsonTransformer,
+                        TaskManager taskManager,
+                        @Named(USER_MAILBOXES_OPERATIONS_INJECTION_KEY) Set<TaskRegistration> usersMailboxesTaskRegistration) {
         this.userMailboxesService = userMailboxesService;
         this.jsonTransformer = jsonTransformer;
         this.taskManager = taskManager;
-        this.mailboxIdFactory = mailboxIdFactory;
-        this.reIndexer = reIndexer;
+        this.usersMailboxesTaskRegistration = usersMailboxesTaskRegistration;
     }
 
     @Override
@@ -160,7 +176,7 @@ public class UserMailboxesRoutes implements Routes {
     public Route defineReIndexMailboxes() {
         return TaskFromRequestRegistry.builder()
             .parameterName(TASK_PARAMETER)
-            .register(RE_INDEX, request -> reIndexer.reIndex(getUsernameParam(request)))
+            .registrations(usersMailboxesTaskRegistration)
             .buildAsRoute(taskManager);
     }
 
@@ -323,8 +339,4 @@ public class UserMailboxesRoutes implements Routes {
             }
         });
     }
-
-    private Username getUsernameParam(Request request) {
-        return Username.of(request.params(USER_NAME));
-    }
 }
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MalformedUrlRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MalformedUrlRoutesTest.java
index 1589fde..a768c3f 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MalformedUrlRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MalformedUrlRoutesTest.java
@@ -35,8 +35,6 @@ import java.nio.charset.StandardCharsets;
 
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.indexer.ReIndexer;
-import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.task.Hostname;
 import org.apache.james.task.MemoryTaskManager;
@@ -44,15 +42,19 @@ import org.apache.james.user.api.UsersRepository;
 import org.apache.james.webadmin.WebAdminServer;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.service.UserMailboxesService;
+import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
 import org.apache.james.webadmin.utils.JsonTransformer;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import com.google.common.collect.ImmutableSet;
+
 class MalformedUrlRoutesTest {
     private static final Username USERNAME = Username.of("username");
     private static final String MALFORMED_MAILBOX_NAME = "inbox%work";
+    private static final ImmutableSet<TaskFromRequestRegistry.TaskRegistration> NO_TASKS = ImmutableSet.of();
 
     private WebAdminServer webAdminServer;
     private UsersRepository usersRepository;
@@ -64,7 +66,7 @@ class MalformedUrlRoutesTest {
         MemoryTaskManager taskManager = new MemoryTaskManager(new Hostname("foo"));
         webAdminServer = WebAdminUtils.createWebAdminServer(
             new UserMailboxesRoutes(new UserMailboxesService(mailboxManager, usersRepository), new JsonTransformer(),
-                taskManager, new InMemoryId.Factory(), mock(ReIndexer.class)))
+                taskManager, NO_TASKS))
             .start();
     }
 
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index c73e71e..2dc0a3b 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -79,6 +79,7 @@ import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
@@ -111,7 +112,8 @@ class UserMailboxesRoutesTest {
 
         webAdminServer = WebAdminUtils.createWebAdminServer(
                 new UserMailboxesRoutes(new UserMailboxesService(mailboxManager, usersRepository), new JsonTransformer(),
-                    taskManager, mailboxIdFactory, reIndexer),
+                    taskManager,
+                    ImmutableSet.of(new UserMailboxesRoutes.UserReIndexingTaskRegistration(reIndexer))),
                 new TasksRoutes(taskManager, new JsonTransformer()))
             .start();
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org