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 <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org