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/11/18 02:51:16 UTC
[james-project] 42/44: JAMES-2632 Allow bulk mailbox counter
retrieval
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 f0d13b5b65772a72d483798bf4a9a31ae1d1053d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Nov 8 13:22:04 2019 +0700
JAMES-2632 Allow bulk mailbox counter retrieval
---
.../cassandra/mail/CassandraMessageMapper.java | 39 +++++++++-------------
.../james/mailbox/jpa/mail/JPAMessageMapper.java | 14 ++------
.../jpa/mail/TransactionalMessageMapper.java | 4 +--
.../mailbox/maildir/mail/MaildirMessageMapper.java | 8 ++---
.../inmemory/mail/InMemoryMessageMapper.java | 5 +--
.../james/mailbox/store/StoreMailboxManager.java | 1 -
.../james/mailbox/store/mail/MessageMapper.java | 3 +-
.../StoreMailboxMessageResultIteratorTest.java | 2 +-
.../store/mail/model/MessageMapperTest.java | 2 +-
9 files changed, 31 insertions(+), 47 deletions(-)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index 675d648..b11c836 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -42,7 +42,6 @@ import org.apache.james.mailbox.model.ComposedMessageId;
import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
import org.apache.james.mailbox.model.Mailbox;
import org.apache.james.mailbox.model.MailboxCounters;
-import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.UpdatedFlags;
@@ -115,41 +114,35 @@ public class CassandraMessageMapper implements MessageMapper {
}
@Override
- public long countMessagesInMailbox(Mailbox mailbox) throws MailboxException {
- return mailboxCounterDAO.countMessagesInMailbox(mailbox)
- .defaultIfEmpty(0L)
- .block();
+ public long countMessagesInMailbox(Mailbox mailbox) {
+ return getMailboxCounters(mailbox).getCount();
}
@Override
- public long countUnseenMessagesInMailbox(Mailbox mailbox) throws MailboxException {
- return mailboxCounterDAO.countUnseenMessagesInMailbox(mailbox)
- .defaultIfEmpty(0L)
- .block();
+ public long countUnseenMessagesInMailbox(Mailbox mailbox) {
+ return getMailboxCounters(mailbox).getUnseen();
}
@Override
- public MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException {
- CassandraId mailboxId = (CassandraId) mailbox.getMailboxId();
- return getMailboxCounters(mailboxId)
- .block();
+ public MailboxCounters getMailboxCounters(Mailbox mailbox) {
+ return getMailboxCountersAsMono(mailbox).block();
}
- private Mono<MailboxCounters> getMailboxCounters(CassandraId mailboxId) {
+ private Mono<MailboxCounters> getMailboxCountersAsMono(Mailbox mailbox) {
+ CassandraId mailboxId = (CassandraId) mailbox.getMailboxId();
return mailboxCounterDAO.retrieveMailboxCounters(mailboxId)
- .defaultIfEmpty(MailboxCounters.builder()
- .mailboxId(mailboxId)
- .count(0)
- .unseen(0)
- .build());
+ .defaultIfEmpty(MailboxCounters.builder()
+ .mailboxId(mailboxId)
+ .count(0)
+ .unseen(0)
+ .build());
}
@Override
- public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) {
- return Flux.fromIterable(mailboxIds)
+ public List<MailboxCounters> getMailboxCounters(Collection<Mailbox> mailboxes) {
+ return Flux.fromIterable(mailboxes)
.publishOn(Schedulers.boundedElastic())
- .map(id -> (CassandraId) id)
- .concatMap(this::getMailboxCounters)
+ .concatMap(this::getMailboxCountersAsMono)
.toStream()
.collect(Guavate.toImmutableList());
}
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
index 6c88f59..a2475fe 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
@@ -42,7 +42,6 @@ import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMailboxMessage;
import org.apache.james.mailbox.model.Mailbox;
import org.apache.james.mailbox.model.MailboxCounters;
-import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageRange.Type;
@@ -154,16 +153,9 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM
}
@Override
- public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) throws MailboxException {
- return mailboxIds.stream()
- .map(id -> (JPAId) id)
- .map(Throwing.<JPAId, MailboxCounters>function(
- id -> MailboxCounters.builder()
- .mailboxId(id)
- .count(countMessagesInMailbox(id))
- .unseen(countUnseenMessagesInMailbox(id))
- .build())
- .sneakyThrow())
+ public List<MailboxCounters> getMailboxCounters(Collection<Mailbox> mailboxes) throws MailboxException {
+ return mailboxes.stream()
+ .map(Throwing.<Mailbox, MailboxCounters>function(this::getMailboxCounters).sneakyThrow())
.collect(Guavate.toImmutableList());
}
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
index 58d34a4..658547c 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
@@ -156,7 +156,7 @@ public class TransactionalMessageMapper implements MessageMapper {
}
@Override
- public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) throws MailboxException {
- throw new NotImplementedException("not implemented");
+ public List<MailboxCounters> getMailboxCounters(Collection<Mailbox> mailboxes) throws MailboxException {
+ return messageMapper.getMailboxCounters(mailboxes);
}
}
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
index 17e6f44..2c9e427 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
@@ -36,7 +36,6 @@ import javax.mail.Flags;
import javax.mail.Flags.Flag;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.NotImplementedException;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.exception.MailboxException;
@@ -46,7 +45,6 @@ import org.apache.james.mailbox.maildir.MaildirStore;
import org.apache.james.mailbox.maildir.mail.model.MaildirMailboxMessage;
import org.apache.james.mailbox.model.Mailbox;
import org.apache.james.mailbox.model.MailboxCounters;
-import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageRange.Type;
@@ -153,8 +151,10 @@ public class MaildirMessageMapper extends AbstractMessageMapper {
}
@Override
- public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) {
- throw new NotImplementedException("Not available as maildir relies on mailboxPath");
+ public List<MailboxCounters> getMailboxCounters(Collection<Mailbox> mailboxes) throws MailboxException {
+ return mailboxes.stream()
+ .map(Throwing.<Mailbox, MailboxCounters>function(this::getMailboxCounters).sneakyThrow())
+ .collect(Guavate.toImmutableList());
}
@Override
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
index 6ef7781..f87f946 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
@@ -99,8 +99,9 @@ public class InMemoryMessageMapper extends AbstractMessageMapper {
}
@Override
- public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) {
- return mailboxIds.stream()
+ public List<MailboxCounters> getMailboxCounters(Collection<Mailbox> mailboxes) {
+ return mailboxes.stream()
+ .map(Mailbox::getMailboxId)
.map(id -> MailboxCounters.builder()
.mailboxId(id)
.count(countMessagesInMailbox(id))
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 b80196b..671bc8c 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
@@ -794,7 +794,6 @@ public class StoreMailboxManager implements MailboxManager {
MessageMapper messageMapper = mailboxSessionMapperFactory.getMessageMapper(session);
return messageMapper.getMailboxCounters(mailboxes.stream()
.filter(Throwing.<Mailbox>predicate(mailbox -> storeRightManager.hasRight(mailbox, Right.Read, session)).sneakyThrow())
- .map(Mailbox::getMailboxId)
.collect(Guavate.toImmutableList()));
}
}
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
index 3fab26f..f01ddb0 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
@@ -30,7 +30,6 @@ import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.Mailbox;
import org.apache.james.mailbox.model.MailboxCounters;
-import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.UpdatedFlags;
@@ -76,7 +75,7 @@ public interface MessageMapper extends Mapper {
MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException;
- List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) throws MailboxException;
+ List<MailboxCounters> getMailboxCounters(Collection<Mailbox> mailboxes) throws MailboxException;
/**
* Delete the given {@link MailboxMessage}
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
index 28e164c..b3f7528 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
@@ -99,7 +99,7 @@ public class StoreMailboxMessageResultIteratorTest {
}
@Override
- public List<MailboxCounters> getMailboxCounters(Collection<MailboxId> mailboxIds) throws MailboxException {
+ public List<MailboxCounters> getMailboxCounters(Collection<Mailbox> mailboxes) {
throw new UnsupportedOperationException();
}
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index f57fde6..09323b8 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -131,7 +131,7 @@ public abstract class MessageMapperTest {
@Test
public void getMailboxCountersShouldReturnStoredValue() throws MailboxException {
saveMessages();
- assertThat(messageMapper.getMailboxCounters(ImmutableList.of(benwaInboxMailbox.getMailboxId(), benwaWorkMailbox.getMailboxId())))
+ assertThat(messageMapper.getMailboxCounters(ImmutableList.of(benwaInboxMailbox, benwaWorkMailbox)))
.containsExactlyInAnyOrder(
MailboxCounters.builder()
.mailboxId(benwaInboxMailbox.getMailboxId())
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org