You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/04/05 03:00:40 UTC

[james-project] 01/02: [PERF] Fasten searching deleted messages

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 361fd65dd22d3dc2ea642c57fd14b59128e06e82
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Apr 4 17:55:47 2023 +0700

    [PERF] Fasten searching deleted messages
---
 .../james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
index ee4624d847..c6d3f902f1 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
@@ -39,6 +39,7 @@ import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.model.MessageRange;
 
 import com.datastax.oss.driver.api.core.CqlSession;
+import com.datastax.oss.driver.api.core.ProtocolVersion;
 import com.datastax.oss.driver.api.core.cql.BatchStatement;
 import com.datastax.oss.driver.api.core.cql.BatchStatementBuilder;
 import com.datastax.oss.driver.api.core.cql.BatchType;
@@ -64,6 +65,7 @@ public class CassandraDeletedMessageDAO {
     private final PreparedStatement selectOneUidStatement;
     private final PreparedStatement selectBetweenUidStatement;
     private final PreparedStatement selectFromUidStatement;
+    private final ProtocolVersion protocolVersion;
 
     @Inject
     public CassandraDeletedMessageDAO(CqlSession session) {
@@ -75,6 +77,7 @@ public class CassandraDeletedMessageDAO {
         this.selectOneUidStatement = prepareOneUidStatement(session);
         this.selectBetweenUidStatement = prepareBetweenUidStatement(session);
         this.selectFromUidStatement = prepareFromUidStatement(session);
+        this.protocolVersion = session.getContext().getProtocolVersion();
     }
 
     private PreparedStatement prepareAllUidStatement(CqlSession session) {
@@ -192,7 +195,7 @@ public class CassandraDeletedMessageDAO {
 
     public Flux<MessageUid> retrieveDeletedMessage(CassandraId cassandraId, MessageRange range) {
         return retrieveResultSetOfDeletedMessage(cassandraId, range)
-            .map(row -> MessageUid.of(row.getLong(0)));
+            .map(this::asMessageUid);
     }
 
     private Flux<Row> retrieveResultSetOfDeletedMessage(CassandraId cassandraId, MessageRange range) {
@@ -237,4 +240,8 @@ public class CassandraDeletedMessageDAO {
                 .setUuid(MAILBOX_ID, cassandraId.asUuid())
                 .setLong(UID_FROM, from.asLong()));
     }
+
+    private MessageUid asMessageUid(Row row) {
+        return MessageUid.of(TypeCodecs.BIGINT.decodePrimitive(row.getBytesUnsafe(0), protocolVersion));
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org