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