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: [email protected]
For additional commands, e-mail: [email protected]