You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/09/06 20:06:02 UTC
[james-project] 01/02: [PERF] Switch Mailboxes/get operations to parallel scheduler
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 392281576c1ac0793aa22acaab99a18e801f527c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Aug 31 21:20:34 2022 +0700
[PERF] Switch Mailboxes/get operations to parallel scheduler
Expensive computation performed for large mailboxes count, are
better performed on a thread dedicated to computations
---
.../main/java/org/apache/james/mailbox/store/StoreMailboxManager.java | 2 ++
.../java/org/apache/james/jmap/draft/methods/GetMailboxesMethod.java | 2 ++
2 files changed, 4 insertions(+)
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 551ff5b970..031bb88df4 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -97,6 +97,7 @@ import com.google.common.collect.ImmutableSet;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
import reactor.util.retry.Retry;
import reactor.util.retry.RetryBackoffSpec;
@@ -731,6 +732,7 @@ public class StoreMailboxManager implements MailboxManager {
Mono<List<Mailbox>> mailboxesMono = searchMailboxes(expression, session, Right.Lookup).collectList();
return mailboxesMono
+ .publishOn(Schedulers.parallel())
.flatMapMany(mailboxes -> Flux.fromIterable(mailboxes)
.filter(expression::matches)
.transform(metadataTransformation(fetchType, session, mailboxes)))
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMailboxesMethod.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMailboxesMethod.java
index 602fd4be4d..3f0a319148 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMailboxesMethod.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMailboxesMethod.java
@@ -57,6 +57,7 @@ import com.google.common.collect.Sets;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
public class GetMailboxesMethod implements Method {
@@ -154,6 +155,7 @@ public class GetMailboxesMethod implements Method {
Mono<QuotaLoaderWithDefaultPreloaded> quotaLoaderMono = QuotaLoaderWithDefaultPreloaded.preLoad(quotaRootResolver, quotaManager, mailboxSession);
return userMailboxesMono.zipWith(quotaLoaderMono)
+ .publishOn(Schedulers.parallel())
.flatMapMany(
tuple -> Flux.fromIterable(tuple.getT1().values())
.flatMap(mailboxMetaData -> mailboxFactory.builder()
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org