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

[james-project] 38/44: JAMES-2632 Add mailboxId in mailbox counter

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 3281e542aaab18ae4187b60dd643269a841d8efb
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Oct 16 18:11:02 2019 +0700

    JAMES-2632 Add mailboxId in mailbox counter
---
 .../james/mailbox/model/MailboxCounters.java       | 22 ++++++++++++++++++----
 .../apache/james/mailbox/MailboxManagerTest.java   | 10 ++++++----
 .../cassandra/mail/CassandraMailboxCounterDAO.java |  2 ++
 .../cassandra/mail/CassandraMessageMapper.java     | 10 ----------
 .../mail/CassandraMailboxCounterDAOTest.java       |  3 +++
 .../james/mailbox/jpa/mail/JPAMessageMapper.java   |  1 +
 .../jpa/mail/TransactionalMessageMapper.java       |  1 +
 .../james/mailbox/store/StoreMessageManager.java   | 11 +++++------
 .../mailbox/store/mail/AbstractMessageMapper.java  |  1 +
 .../StoreMailboxMessageResultIteratorTest.java     |  1 +
 10 files changed, 38 insertions(+), 24 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
index 324149d..270eb4e 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
@@ -29,6 +29,12 @@ public class MailboxCounters {
     public static class Builder {
         private Optional<Long> count = Optional.empty();
         private Optional<Long> unseen = Optional.empty();
+        private Optional<MailboxId> mailboxId = Optional.empty();
+
+        public Builder mailboxId(MailboxId mailboxId) {
+            this.mailboxId = Optional.of(mailboxId);
+            return this;
+        }
 
         public Builder count(long count) {
             this.count = Optional.of(count);
@@ -43,7 +49,8 @@ public class MailboxCounters {
         public MailboxCounters build() {
             Preconditions.checkState(count.isPresent(), "count is compulsory");
             Preconditions.checkState(unseen.isPresent(), "unseen is compulsory");
-            return new MailboxCounters(count.get(), unseen.get());
+            Preconditions.checkState(mailboxId.isPresent(), "mailboxId is compulsory");
+            return new MailboxCounters(mailboxId.get(), count.get(), unseen.get());
         }
     }
 
@@ -51,14 +58,20 @@ public class MailboxCounters {
         return new Builder();
     }
 
+    private final MailboxId mailboxId;
     private final long count;
     private final long unseen;
 
-    private MailboxCounters(long count, long unseen) {
+    private MailboxCounters(MailboxId mailboxId, long count, long unseen) {
+        this.mailboxId = mailboxId;
         this.count = count;
         this.unseen = unseen;
     }
 
+    public MailboxId getMailboxId() {
+        return mailboxId;
+    }
+
     public long getCount() {
         return count;
     }
@@ -73,13 +86,14 @@ public class MailboxCounters {
             MailboxCounters that = (MailboxCounters) o;
 
             return Objects.equal(this.count, that.count)
-                && Objects.equal(this.unseen, that.unseen);
+                && Objects.equal(this.unseen, that.unseen)
+                && Objects.equal(this.mailboxId, that.mailboxId);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hashCode(count, unseen);
+        return Objects.hashCode(count, unseen, mailboxId);
     }
 }
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 5f634be..14fd87e 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -965,7 +965,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
             MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
             MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
             MailboxPath inbox1 = MailboxPath.inbox(session1);
-            mailboxManager.createMailbox(inbox1, session1);
+            Optional<MailboxId> mailboxIdInbox1 = mailboxManager.createMailbox(inbox1, session1);
             mailboxManager.setRights(inbox1,
                 MailboxACL.EMPTY.apply(MailboxACL.command()
                     .forUser(USER_2)
@@ -1271,7 +1271,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
             MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
             MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
             MailboxPath inbox1 = MailboxPath.inbox(session1);
-            mailboxManager.createMailbox(inbox1, session1);
+            Optional<MailboxId> mailboxIdInbox1 = mailboxManager.createMailbox(inbox1, session1);
             mailboxManager.setRights(inbox1,
                 MailboxACL.EMPTY.apply(MailboxACL.command()
                     .forUser(USER_2)
@@ -1303,7 +1303,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
             MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
             MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
             MailboxPath inbox1 = MailboxPath.inbox(session1);
-            mailboxManager.createMailbox(inbox1, session1);
+            Optional<MailboxId> mailboxIdInbox1 = mailboxManager.createMailbox(inbox1, session1);
             mailboxManager.setRights(inbox1,
                 MailboxACL.EMPTY.apply(MailboxACL.command()
                     .forUser(USER_2)
@@ -1318,6 +1318,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
 
             assertThat(mailboxCounters)
                 .isEqualTo(MailboxCounters.builder()
+                    .mailboxId(mailboxIdInbox1.get())
                     .count(0)
                     .unseen(0)
                     .build());
@@ -1329,7 +1330,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
             MailboxSession session1 = mailboxManager.createSystemSession(USER_1);
             MailboxSession session2 = mailboxManager.createSystemSession(USER_2);
             MailboxPath inbox1 = MailboxPath.inbox(session1);
-            mailboxManager.createMailbox(inbox1, session1);
+            Optional<MailboxId> mailboxIdInbox1 = mailboxManager.createMailbox(inbox1, session1);
             mailboxManager.setRights(inbox1,
                 MailboxACL.EMPTY.apply(MailboxACL.command()
                     .forUser(USER_2)
@@ -1347,6 +1348,7 @@ public abstract class MailboxManagerTest<T extends MailboxManager> {
 
             assertThat(mailboxCounters)
                 .isEqualTo(MailboxCounters.builder()
+                    .mailboxId(mailboxIdInbox1.get())
                     .count(1)
                     .unseen(1)
                     .build());
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
index d1c3180..0c12e28 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
@@ -39,6 +39,7 @@ import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.Assignment;
+
 import reactor.core.publisher.Mono;
 
 public class CassandraMailboxCounterDAO {
@@ -77,6 +78,7 @@ public class CassandraMailboxCounterDAO {
     public Mono<MailboxCounters> retrieveMailboxCounters(CassandraId mailboxId) {
         return cassandraAsyncExecutor.executeSingleRow(bindWithMailbox(mailboxId, readStatement))
             .map(row ->  MailboxCounters.builder()
+                .mailboxId(mailboxId)
                 .count(row.getLong(CassandraMailboxCountersTable.COUNT))
                 .unseen(row.getLong(CassandraMailboxCountersTable.UNSEEN))
                 .build());
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 de6407ff..675d648 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
@@ -65,10 +65,6 @@ import reactor.core.publisher.Mono;
 import reactor.core.scheduler.Schedulers;
 
 public class CassandraMessageMapper implements MessageMapper {
-    public static final MailboxCounters INITIAL_COUNTERS =  MailboxCounters.builder()
-        .count(0L)
-        .unseen(0L)
-        .build();
     public static final Logger LOGGER = LoggerFactory.getLogger(CassandraMessageMapper.class);
 
     private final CassandraModSeqProvider modSeqProvider;
@@ -134,11 +130,6 @@ public class CassandraMessageMapper implements MessageMapper {
 
     @Override
     public MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException {
-<<<<<<< HEAD
-        return mailboxCounterDAO.retrieveMailboxCounters(mailbox)
-                .defaultIfEmpty(INITIAL_COUNTERS)
-                .block();
-=======
         CassandraId mailboxId = (CassandraId) mailbox.getMailboxId();
         return getMailboxCounters(mailboxId)
                 .block();
@@ -161,7 +152,6 @@ public class CassandraMessageMapper implements MessageMapper {
             .concatMap(this::getMailboxCounters)
             .toStream()
             .collect(Guavate.toImmutableList());
->>>>>>> f4ef8da35d... JAMES-2632 Allow bulk mailbox counter retrieval
     }
 
     @Override
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
index 073b4a2..c9b41b6 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
@@ -88,6 +88,7 @@ class CassandraMailboxCounterDAOTest {
 
         assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block())
             .isEqualTo(MailboxCounters.builder()
+                .mailboxId(MAILBOX_ID)
                 .count(0L)
                 .unseen(1L)
                 .build());
@@ -99,6 +100,7 @@ class CassandraMailboxCounterDAOTest {
 
         assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block())
             .isEqualTo(MailboxCounters.builder()
+                .mailboxId(MAILBOX_ID)
                 .count(1L)
                 .unseen(0L)
                 .build());
@@ -111,6 +113,7 @@ class CassandraMailboxCounterDAOTest {
 
         assertThat(testee.retrieveMailboxCounters(MAILBOX_ID).block())
             .isEqualTo(MailboxCounters.builder()
+                .mailboxId(MAILBOX_ID)
                 .count(1L)
                 .unseen(1L)
                 .build());
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 a1ebacd..6c88f59 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
@@ -79,6 +79,7 @@ public class JPAMessageMapper extends JPATransactionalMapper implements MessageM
     @Override
     public MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException {
         return MailboxCounters.builder()
+            .mailboxId(mailbox.getMailboxId())
             .count(countMessagesInMailbox(mailbox))
             .unseen(countUnseenMessagesInMailbox(mailbox))
             .build();
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 6b45c1d..58d34a4 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
@@ -56,6 +56,7 @@ public class TransactionalMessageMapper implements MessageMapper {
     @Override
     public MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException {
         return MailboxCounters.builder()
+            .mailboxId(mailbox.getMailboxId())
             .count(countMessagesInMailbox(mailbox))
             .unseen(countUnseenMessagesInMailbox(mailbox))
             .build();
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index e46ebce..5cfca6d 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -117,11 +117,6 @@ import reactor.core.scheduler.Schedulers;
  * {@link MailboxSession}'s.
  */
 public class StoreMessageManager implements MessageManager {
-    private static final MailboxCounters ZERO_MAILBOX_COUNTERS = MailboxCounters.builder()
-        .count(0)
-        .unseen(0)
-        .build();
-
     /**
      * The minimal Permanent flags the {@link MessageManager} must support. <br>
      * 
@@ -221,7 +216,11 @@ public class StoreMessageManager implements MessageManager {
         if (storeRightManager.hasRight(mailbox, MailboxACL.Right.Read, mailboxSession)) {
             return mapperFactory.createMessageMapper(mailboxSession).getMailboxCounters(mailbox);
         }
-        return ZERO_MAILBOX_COUNTERS;
+        return MailboxCounters.builder()
+            .mailboxId(mailbox.getMailboxId())
+            .unseen(0)
+            .count(0)
+            .build();
     }
 
     /**
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java
index 646e092..f183728 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java
@@ -71,6 +71,7 @@ public abstract class AbstractMessageMapper extends TransactionalMapper implemen
     @Override
     public MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException {
         return MailboxCounters.builder()
+            .mailboxId(mailbox.getMailboxId())
             .count(countMessagesInMailbox(mailbox))
             .unseen(countUnseenMessagesInMailbox(mailbox))
             .build();
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 053dc3d..28e164c 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
@@ -92,6 +92,7 @@ public class StoreMailboxMessageResultIteratorTest {
         @Override
         public MailboxCounters getMailboxCounters(Mailbox mailbox) throws MailboxException {
             return MailboxCounters.builder()
+                .mailboxId(mailbox.getMailboxId())
                 .count(countMessagesInMailbox(mailbox))
                 .unseen(countUnseenMessagesInMailbox(mailbox))
                 .build();


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