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