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