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 7974e9f29dd56d5db541cdaa4bb9ede2515c1ff4
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Mon Jun 6 15:19:55 2022 +0700

    JAMES-3774 Migrate server/protocols/protocols-pop3-distributed to Cassandra 
driver 4
---
 .../mailbox/CassandraPop3MetadataStore.java        | 100 +++++++++++----------
 .../pop3server/mailbox/Pop3MetadataModule.java     |  19 ++--
 2 files changed, 62 insertions(+), 57 deletions(-)

diff --git 
a/server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/CassandraPop3MetadataStore.java
 
b/server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/CassandraPop3MetadataStore.java
index b9e4e238e6..3da897ae43 100644
--- 
a/server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/CassandraPop3MetadataStore.java
+++ 
b/server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/CassandraPop3MetadataStore.java
@@ -19,15 +19,17 @@
 
 package org.apache.james.pop3server.mailbox;
 
-import static com.datastax.driver.core.querybuilder.QueryBuilder.asc;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.delete;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static 
com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder.ASC;
+import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.bindMarker;
+import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.deleteFrom;
+import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.insertInto;
+import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.selectFrom;
 
 import java.util.function.Function;
 
 import javax.inject.Inject;
 
+import 
org.apache.james.backends.cassandra.init.configuration.JamesExecutionProfiles;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
@@ -35,13 +37,12 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 import org.reactivestreams.Publisher;
 
-import com.datastax.driver.core.PreparedStatement;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.datastax.oss.driver.api.core.CqlSession;
+import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
+import com.datastax.oss.driver.api.core.cql.PreparedStatement;
+import com.datastax.oss.driver.api.core.cql.Row;
 
 public class CassandraPop3MetadataStore implements Pop3MetadataStore {
-    private static final int LIST_ALL_TIME_OUT_MILLIS = 3600000;
 
     private final CassandraAsyncExecutor executor;
 
@@ -51,9 +52,10 @@ public class CassandraPop3MetadataStore implements 
Pop3MetadataStore {
     private final PreparedStatement add;
     private final PreparedStatement remove;
     private final PreparedStatement clear;
+    private final DriverExecutionProfile batchProfile;
 
     @Inject
-    public CassandraPop3MetadataStore(Session session) {
+    public CassandraPop3MetadataStore(CqlSession session) {
         this.executor = new CassandraAsyncExecutor(session);
         this.clear = prepareClear(session);
         this.list = prepareList(session);
@@ -61,45 +63,49 @@ public class CassandraPop3MetadataStore implements 
Pop3MetadataStore {
         this.select = prepareSelect(session);
         this.add = prepareAdd(session);
         this.remove = prepareRemove(session);
+
+        batchProfile = JamesExecutionProfiles.getBatchProfile(session);
     }
 
-    private PreparedStatement prepareRemove(Session session) {
-        return session.prepare(delete()
-            .from(Pop3MetadataModule.TABLE_NAME)
-            .where(QueryBuilder.eq(Pop3MetadataModule.MAILBOX_ID, 
bindMarker(Pop3MetadataModule.MAILBOX_ID)))
-            .and(QueryBuilder.eq(Pop3MetadataModule.MESSAGE_ID, 
bindMarker(Pop3MetadataModule.MESSAGE_ID))));
+    private PreparedStatement prepareRemove(CqlSession session) {
+        return session.prepare(deleteFrom(Pop3MetadataModule.TABLE_NAME)
+            
.whereColumn(Pop3MetadataModule.MAILBOX_ID).isEqualTo(bindMarker(Pop3MetadataModule.MAILBOX_ID))
+            
.whereColumn(Pop3MetadataModule.MESSAGE_ID).isEqualTo(bindMarker(Pop3MetadataModule.MESSAGE_ID))
+            .build());
     }
 
-    private PreparedStatement prepareClear(Session session) {
-        return session.prepare(delete()
-            .from(Pop3MetadataModule.TABLE_NAME)
-            .where(QueryBuilder.eq(Pop3MetadataModule.MAILBOX_ID, 
bindMarker(Pop3MetadataModule.MAILBOX_ID))));
+    private PreparedStatement prepareClear(CqlSession session) {
+        return session.prepare(deleteFrom(Pop3MetadataModule.TABLE_NAME)
+            
.whereColumn(Pop3MetadataModule.MAILBOX_ID).isEqualTo(bindMarker(Pop3MetadataModule.MAILBOX_ID))
+            .build());
     }
 
-    private PreparedStatement prepareAdd(Session session) {
-        return 
session.prepare(QueryBuilder.insertInto(Pop3MetadataModule.TABLE_NAME)
+    private PreparedStatement prepareAdd(CqlSession session) {
+        return session.prepare(insertInto(Pop3MetadataModule.TABLE_NAME)
             .value(Pop3MetadataModule.MAILBOX_ID, 
bindMarker(Pop3MetadataModule.MAILBOX_ID))
             .value(Pop3MetadataModule.MESSAGE_ID, 
bindMarker(Pop3MetadataModule.MESSAGE_ID))
-            .value(Pop3MetadataModule.SIZE, 
bindMarker(Pop3MetadataModule.SIZE)));
+            .value(Pop3MetadataModule.SIZE, 
bindMarker(Pop3MetadataModule.SIZE))
+            .build());
     }
 
-    private PreparedStatement prepareList(Session session) {
-        return session.prepare(select()
-            .from(Pop3MetadataModule.TABLE_NAME)
-            .where(QueryBuilder.eq(Pop3MetadataModule.MAILBOX_ID, 
bindMarker(Pop3MetadataModule.MAILBOX_ID)))
-            .orderBy(asc(Pop3MetadataModule.MESSAGE_ID)));
+    private PreparedStatement prepareList(CqlSession session) {
+        return session.prepare(selectFrom(Pop3MetadataModule.TABLE_NAME)
+            .all()
+            
.whereColumn(Pop3MetadataModule.MAILBOX_ID).isEqualTo(bindMarker(Pop3MetadataModule.MAILBOX_ID))
+            .orderBy(Pop3MetadataModule.MESSAGE_ID, ASC)
+            .build());
     }
 
-    private PreparedStatement prepareListAll(Session session) {
-        return session.prepare(select()
-            .from(Pop3MetadataModule.TABLE_NAME));
+    private PreparedStatement prepareListAll(CqlSession session) {
+        return 
session.prepare(selectFrom(Pop3MetadataModule.TABLE_NAME).all().build());
     }
 
-    private PreparedStatement prepareSelect(Session session) {
-        return session.prepare(select()
-            .from(Pop3MetadataModule.TABLE_NAME)
-            .where(QueryBuilder.eq(Pop3MetadataModule.MAILBOX_ID, 
bindMarker(Pop3MetadataModule.MAILBOX_ID)))
-            .and(QueryBuilder.eq(Pop3MetadataModule.MESSAGE_ID, 
bindMarker(Pop3MetadataModule.MESSAGE_ID))));
+    private PreparedStatement prepareSelect(CqlSession session) {
+        return session.prepare(selectFrom(Pop3MetadataModule.TABLE_NAME)
+            .all()
+            
.whereColumn(Pop3MetadataModule.MAILBOX_ID).isEqualTo(bindMarker(Pop3MetadataModule.MAILBOX_ID))
+            
.whereColumn(Pop3MetadataModule.MESSAGE_ID).isEqualTo(bindMarker(Pop3MetadataModule.MESSAGE_ID))
+            .build());
     }
 
     @Override
@@ -107,16 +113,16 @@ public class CassandraPop3MetadataStore implements 
Pop3MetadataStore {
         CassandraId id = (CassandraId) mailboxId;
 
         return executor.executeRows(list.bind()
-                .setUUID(Pop3MetadataModule.MAILBOX_ID, id.asUuid()))
+                .setUuid(Pop3MetadataModule.MAILBOX_ID, id.asUuid()))
             .map(row -> new StatMetadata(
-                
CassandraMessageId.Factory.of(row.getUUID(Pop3MetadataModule.MESSAGE_ID)),
+                
CassandraMessageId.Factory.of(row.getUuid(Pop3MetadataModule.MESSAGE_ID)),
                 row.getLong(Pop3MetadataModule.SIZE)));
     }
 
     @Override
     public Publisher<FullMetadata> listAllEntries() {
         return executor.executeRows(listAll.bind()
-            .setReadTimeoutMillis(LIST_ALL_TIME_OUT_MILLIS))
+            .setExecutionProfile(batchProfile))
             .map(rowToFullMetadataFunction());
     }
 
@@ -125,8 +131,8 @@ public class CassandraPop3MetadataStore implements 
Pop3MetadataStore {
         CassandraId id = (CassandraId) mailboxId;
         CassandraMessageId cassandraMessageId = (CassandraMessageId) messageId;
         return executor.executeRows(select.bind()
-            .setUUID(Pop3MetadataModule.MAILBOX_ID, id.asUuid())
-            .setUUID(Pop3MetadataModule.MESSAGE_ID, cassandraMessageId.get()))
+            .setUuid(Pop3MetadataModule.MAILBOX_ID, id.asUuid())
+            .setUuid(Pop3MetadataModule.MESSAGE_ID, cassandraMessageId.get()))
             .map(rowToFullMetadataFunction());
     }
 
@@ -136,8 +142,8 @@ public class CassandraPop3MetadataStore implements 
Pop3MetadataStore {
         CassandraMessageId messageId = (CassandraMessageId) 
statMetadata.getMessageId();
 
         return executor.executeVoid(add.bind()
-            .setUUID(Pop3MetadataModule.MAILBOX_ID, id.asUuid())
-            .setUUID(Pop3MetadataModule.MESSAGE_ID, messageId.get())
+            .setUuid(Pop3MetadataModule.MAILBOX_ID, id.asUuid())
+            .setUuid(Pop3MetadataModule.MESSAGE_ID, messageId.get())
             .setLong(Pop3MetadataModule.SIZE, statMetadata.getSize()));
     }
 
@@ -147,8 +153,8 @@ public class CassandraPop3MetadataStore implements 
Pop3MetadataStore {
         CassandraMessageId cassandraMessageId = (CassandraMessageId) messageId;
 
         return executor.executeVoid(remove.bind()
-            .setUUID(Pop3MetadataModule.MAILBOX_ID, id.asUuid())
-            .setUUID(Pop3MetadataModule.MESSAGE_ID, cassandraMessageId.get()));
+            .setUuid(Pop3MetadataModule.MAILBOX_ID, id.asUuid())
+            .setUuid(Pop3MetadataModule.MESSAGE_ID, cassandraMessageId.get()));
     }
 
     @Override
@@ -156,13 +162,13 @@ public class CassandraPop3MetadataStore implements 
Pop3MetadataStore {
         CassandraId id = (CassandraId) mailboxId;
 
         return executor.executeVoid(clear.bind()
-            .setUUID(Pop3MetadataModule.MAILBOX_ID, id.asUuid()));
+            .setUuid(Pop3MetadataModule.MAILBOX_ID, id.asUuid()));
     }
 
     private Function<Row, FullMetadata> rowToFullMetadataFunction() {
         return row -> new FullMetadata(
-            CassandraId.of(row.getUUID(Pop3MetadataModule.MAILBOX_ID)),
-            
CassandraMessageId.Factory.of(row.getUUID(Pop3MetadataModule.MESSAGE_ID)),
+            CassandraId.of(row.getUuid(Pop3MetadataModule.MAILBOX_ID)),
+            
CassandraMessageId.Factory.of(row.getUuid(Pop3MetadataModule.MESSAGE_ID)),
             row.getLong(Pop3MetadataModule.SIZE));
     }
 }
diff --git 
a/server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/Pop3MetadataModule.java
 
b/server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/Pop3MetadataModule.java
index 06de6177a5..46c3304333 100644
--- 
a/server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/Pop3MetadataModule.java
+++ 
b/server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/Pop3MetadataModule.java
@@ -19,14 +19,13 @@
 
 package org.apache.james.pop3server.mailbox;
 
-import static com.datastax.driver.core.DataType.bigint;
-import static com.datastax.driver.core.DataType.timeuuid;
-import static 
com.datastax.driver.core.schemabuilder.SchemaBuilder.Direction.ASC;
+import static 
com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder.ASC;
+import static 
com.datastax.oss.driver.api.querybuilder.SchemaBuilder.RowsPerPartition.rows;
 import static 
org.apache.james.backends.cassandra.utils.CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
 
-import com.datastax.driver.core.schemabuilder.SchemaBuilder;
+import com.datastax.oss.driver.api.core.type.DataTypes;
 
 public interface Pop3MetadataModule {
     String TABLE_NAME = "pop3metadata";
@@ -37,11 +36,11 @@ public interface Pop3MetadataModule {
     CassandraModule MODULE = CassandraModule.table(TABLE_NAME)
         .comment("Store metadata to answer efficiently the STAT queries based 
on the messageId. No further reads required on other tables.")
         .options(options -> options
-            .clusteringOrder(MESSAGE_ID, ASC)
-            .caching(SchemaBuilder.KeyCaching.ALL, 
SchemaBuilder.rows(DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .statement(statement -> statement
-            .addPartitionKey(MAILBOX_ID, timeuuid())
-            .addClusteringColumn(MESSAGE_ID, timeuuid())
-            .addColumn(SIZE, bigint()))
+            .withClusteringOrder(MESSAGE_ID, ASC)
+            .withCaching(true, rows(DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> types -> statement
+            .withPartitionKey(MAILBOX_ID, DataTypes.TIMEUUID)
+            .withClusteringColumn(MESSAGE_ID, DataTypes.TIMEUUID)
+            .withColumn(SIZE, DataTypes.BIGINT))
         .build();
 }


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

Reply via email to