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 2020/04/02 04:32:10 UTC
[james-project] 03/15: JAMES-2632 Lazy loading for backend parentId
computation
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 5e670d124058ae917d31fc1960292e88abc53165
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Mar 30 11:46:01 2020 +0700
JAMES-2632 Lazy loading for backend parentId computation
The value was aggressively read for each mailbox read by GetMailboxes
resulting in the following extra reads per mailbox:
- mailboxPathV2
- then mailbox
- then acl
This accounts according to glowroot to roughly 60% of GetMailboxes time
---
.../james/jmap/draft/model/MailboxFactory.java | 2 +-
.../james/jmap/draft/model/MailboxFactoryTest.java | 30 ++++++++++++++++++++++
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MailboxFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MailboxFactory.java
index 3d520bb..c0ea2b8 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MailboxFactory.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MailboxFactory.java
@@ -223,7 +223,7 @@ public class MailboxFactory {
}
MailboxPath parent = levels.get(levels.size() - 2);
return userMailboxesMetadata.map(list -> retrieveParentFromMetadata(parent, list))
- .orElse(retrieveParentFromBackend(mailboxSession, parent));
+ .orElseGet(Throwing.supplier(() -> retrieveParentFromBackend(mailboxSession, parent)).sneakyThrow());
}
private Optional<MailboxId> retrieveParentFromBackend(MailboxSession mailboxSession, MailboxPath parent) throws MailboxException {
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MailboxFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MailboxFactoryTest.java
index 24d8cb4..14d9d42 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MailboxFactoryTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MailboxFactoryTest.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.inmemory.InMemoryId;
import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
import org.apache.james.mailbox.manager.ManagerTestProvisionner;
import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxCounters;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxMetaData;
import org.apache.james.mailbox.model.MailboxPath;
@@ -198,6 +199,35 @@ public class MailboxFactoryTest {
}
@Test
+ public void buildShouldRelyOnPreloadedMailboxes() throws Exception {
+ MailboxPath inbox = MailboxPath.inbox(user);
+ Optional<MailboxId> inboxId = mailboxManager.createMailbox(inbox, mailboxSession);
+ Optional<MailboxId> otherId = mailboxManager.createMailbox(MailboxPath.forUser(user, "INBOX.child"), mailboxSession);
+
+ InMemoryId preLoadedId = InMemoryId.of(45);
+ Mailbox retrievedMailbox = sut.builder()
+ .id(otherId.get())
+ .session(mailboxSession)
+ .usingPreloadedMailboxesMetadata(Optional.of(ImmutableList.of(new MailboxMetaData(
+ inbox,
+ preLoadedId,
+ DELIMITER,
+ MailboxMetaData.Children.NO_INFERIORS,
+ MailboxMetaData.Selectability.NONE,
+ MailboxACL.EMPTY,
+ MailboxCounters.builder()
+ .mailboxId(preLoadedId)
+ .count(0)
+ .unseen(0)
+ .build()))))
+ .build()
+ .get();
+
+ assertThat(retrievedMailbox.getParentId())
+ .contains(preLoadedId);
+ }
+
+ @Test
public void getNamespaceShouldReturnDelegatedNamespaceWhenUserMailboxPathAndUserMailboxSessionAreNotTheSame() throws Exception {
MailboxPath inbox = MailboxPath.inbox(user);
Optional<MailboxId> mailboxId = mailboxManager.createMailbox(inbox, mailboxSession);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org