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:01 UTC

[james-project] branch master updated (7e02f9b3b7 -> ecb25692ec)

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


    from 7e02f9b3b7 JAMES-3755 RspamdScanner should specify requiredProcessingState (#1174)
     new 392281576c [PERF] Switch Mailboxes/get operations to parallel scheduler
     new ecb25692ec [PERF] Optimize MailboxPath+Username hashcodes

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 core/src/main/java/org/apache/james/core/Username.java              | 2 +-
 core/src/test/java/org/apache/james/core/UsernameTest.java          | 1 +
 .../src/main/java/org/apache/james/mailbox/model/MailboxPath.java   | 6 +++++-
 .../test/java/org/apache/james/mailbox/model/MailboxPathTest.java   | 1 +
 .../java/org/apache/james/mailbox/store/StoreMailboxManager.java    | 2 ++
 .../org/apache/james/jmap/draft/methods/GetMailboxesMethod.java     | 2 ++
 6 files changed, 12 insertions(+), 2 deletions(-)


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


[james-project] 01/02: [PERF] Switch Mailboxes/get operations to parallel scheduler

Posted by bt...@apache.org.
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


[james-project] 02/02: [PERF] Optimize MailboxPath+Username hashcodes

Posted by bt...@apache.org.
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 ecb25692ec9647c0ab90db7743924184de86ac0c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Aug 31 21:24:10 2022 +0700

    [PERF] Optimize MailboxPath+Username hashcodes
    
    This is called very often when building the maps for very large
    Mailbox/get, avoiding a call to [] is worth it.
---
 core/src/main/java/org/apache/james/core/Username.java              | 2 +-
 core/src/test/java/org/apache/james/core/UsernameTest.java          | 1 +
 .../src/main/java/org/apache/james/mailbox/model/MailboxPath.java   | 6 +++++-
 .../test/java/org/apache/james/mailbox/model/MailboxPathTest.java   | 1 +
 4 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/org/apache/james/core/Username.java b/core/src/main/java/org/apache/james/core/Username.java
index f1bc031210..43f75ca655 100644
--- a/core/src/main/java/org/apache/james/core/Username.java
+++ b/core/src/main/java/org/apache/james/core/Username.java
@@ -143,7 +143,7 @@ public class Username {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(localPart, domainPart);
+        return localPart.hashCode() + 31 * domainPart.hashCode();
     }
 
     @Override
diff --git a/core/src/test/java/org/apache/james/core/UsernameTest.java b/core/src/test/java/org/apache/james/core/UsernameTest.java
index b6c5a28e8c..de519e9806 100644
--- a/core/src/test/java/org/apache/james/core/UsernameTest.java
+++ b/core/src/test/java/org/apache/james/core/UsernameTest.java
@@ -33,6 +33,7 @@ class UsernameTest {
     @Test
     void shouldRespectBeanContract() {
         EqualsVerifier.forClass(Username.class)
+            .withNonnullFields("localPart", "domainPart")
             .verify();
     }
 
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
index e182ab333e..dd7e0fe72a 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
@@ -237,7 +237,11 @@ public class MailboxPath {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(namespace, user, name);
+        int result = 1;
+        result += result * 31 + namespace.hashCode();
+        result += result * 31 + Objects.hashCode(user);
+        result += result * 31 + Objects.hashCode(name);
+        return result;
     }
 
     /**
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
index 68a448d2c4..66fe741230 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
@@ -41,6 +41,7 @@ class MailboxPathTest {
     @Test
     void shouldMatchBeanContract() {
         EqualsVerifier.forClass(MailboxPath.class)
+            .withNonnullFields("namespace")
             .verify();
     }
 


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