Author: btellier
Date: Fri Jul  3 14:36:33 2015
New Revision: 1689020

URL: http://svn.apache.org/r1689020
Log:
MAILBOX-208 Avoid to fetch all mailbox messages upon UNSEEN related operations 
using a Cassandra index

Modified:
    
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
    
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java

Modified: 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java?rev=1689020&r1=1689019&r2=1689020&view=diff
==============================================================================
--- 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
 (original)
+++ 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
 Fri Jul  3 14:36:33 2015
@@ -137,7 +137,11 @@ public class CassandraTableManager {
         RecentMessages(SchemaBuilder.createIndex(INDEX_PREFIX + 
CassandraMessageTable.Flag.RECENT)
             .ifNotExists()
             .onTable(CassandraMessageTable.TABLE_NAME)
-            .andColumn(CassandraMessageTable.Flag.RECENT))
+            .andColumn(CassandraMessageTable.Flag.RECENT)),
+        SeenMessages(SchemaBuilder.createIndex(INDEX_PREFIX + 
CassandraMessageTable.Flag.SEEN)
+            .ifNotExists()
+            .onTable(CassandraMessageTable.TABLE_NAME)
+            .andColumn(CassandraMessageTable.Flag.SEEN))
         ;
         private SchemaStatement createIndexStatement;
 

Modified: 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java?rev=1689020&r1=1689019&r2=1689020&view=diff
==============================================================================
--- 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 (original)
+++ 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 Fri Jul  3 14:36:33 2015
@@ -302,13 +302,11 @@ public class CassandraMessageMapper impl
 
     @Override
     public Long findFirstUnseenMessageUid(Mailbox<CassandraId> mailbox) throws 
MailboxException {
-        ResultSet rows = 
session.execute(selectAll(mailbox).orderBy(asc(IMAP_UID)));
-        for (Row row : rows) {
-            if (!row.getBool(SEEN)) {
-                return row.getLong(IMAP_UID);
-            }
-        }
-        return null;
+        return 
convertToStream(session.execute(selectAll(mailbox).and((eq(SEEN, false)))))
+            .map((row) -> row.getLong(IMAP_UID))
+            .sorted()
+            .findFirst()
+            .orElse(null);
     }
 
     @Override



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

Reply via email to