Author: btellier
Date: Fri Jul  3 14:37:04 2015
New Revision: 1689021

URL: http://svn.apache.org/r1689021
Log:
MAILBOX-208 Avoid to fetch all mailbox messages upon EXPUNGE 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=1689021&r1=1689020&r2=1689021&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:37:04 2015
@@ -141,7 +141,11 @@ public class CassandraTableManager {
         SeenMessages(SchemaBuilder.createIndex(INDEX_PREFIX + 
CassandraMessageTable.Flag.SEEN)
             .ifNotExists()
             .onTable(CassandraMessageTable.TABLE_NAME)
-            .andColumn(CassandraMessageTable.Flag.SEEN))
+            .andColumn(CassandraMessageTable.Flag.SEEN)),
+        DeletedMessages(SchemaBuilder.createIndex(INDEX_PREFIX + 
CassandraMessageTable.Flag.DELETED)
+            .ifNotExists()
+            .onTable(CassandraMessageTable.TABLE_NAME)
+            .andColumn(CassandraMessageTable.Flag.DELETED))
         ;
         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=1689021&r1=1689020&r2=1689021&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:37:04 2015
@@ -161,7 +161,7 @@ public class CassandraMessageMapper impl
     }
 
     @Override
-    public void delete(Mailbox<CassandraId> mailbox, Message<CassandraId> 
message) throws MailboxException {
+    public void delete(Mailbox<CassandraId> mailbox, Message<CassandraId> 
message) {
         session.execute(
             QueryBuilder.delete()
                 .from(TABLE_NAME)
@@ -311,16 +311,10 @@ public class CassandraMessageMapper impl
 
     @Override
     public Map<Long, MessageMetaData> expungeMarkedForDeletionInMailbox(final 
Mailbox<CassandraId> mailbox, MessageRange set) throws MailboxException {
-        ImmutableMap.Builder<Long, MessageMetaData> deletedMessages = 
ImmutableMap.builder();
-        ResultSet messages = session.execute(buildQuery(mailbox, set));
-        for (Row row : messages) {
-            if (row.getBool(DELETED)) {
-                Message<CassandraId> message = message(row);
-                delete(mailbox, message);
-                deletedMessages.put(message.getUid(), new 
SimpleMessageMetaData(message));
-            }
-        }
-        return deletedMessages.build();
+        return convertToStream(session.execute(buildQuery(mailbox, 
set).and(eq(DELETED, true))))
+            .map(this::message)
+            .peek((message) -> delete(mailbox, message))
+            .collect(Collectors.toMap(Message::getUid, 
SimpleMessageMetaData::new));
     }
 
     @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