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