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