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 2022/12/06 08:03:58 UTC

[james-project] 07/15: [PERF] Adopt CqlIdentifier within cassandra blob store

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 c5a3958e8f0b462cfa49e0b012674b2b5d420705
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Nov 2 16:27:14 2022 +0700

    [PERF] Adopt CqlIdentifier within cassandra blob store
---
 .../apache/james/blob/cassandra/BlobTables.java    | 32 ++++++++++++----------
 .../cassandra/cache/CassandraBlobStoreCache.java   |  5 ++--
 .../blob/cassandra/cache/CachedBlobStoreTest.java  |  3 +-
 3 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTables.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTables.java
index 09a6823911..11ca1d40f0 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTables.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTables.java
@@ -19,40 +19,42 @@
 
 package org.apache.james.blob.cassandra;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface BlobTables {
 
     interface DefaultBucketBlobTable {
         String TABLE_NAME = "blobs";
-        String ID = "id";
-        String NUMBER_OF_CHUNK = "position";
+        CqlIdentifier ID = CqlIdentifier.fromCql("id");
+        CqlIdentifier NUMBER_OF_CHUNK = CqlIdentifier.fromCql("position");
     }
 
     interface DefaultBucketBlobParts {
         String TABLE_NAME = "blobParts";
-        String ID = "id";
-        String CHUNK_NUMBER = "chunkNumber";
-        String DATA = "data";
+        CqlIdentifier ID = CqlIdentifier.fromCql("id");
+        CqlIdentifier CHUNK_NUMBER = CqlIdentifier.fromCql("chunkNumber");
+        CqlIdentifier DATA = CqlIdentifier.fromCql("data");
     }
 
     interface BucketBlobTable {
         String TABLE_NAME = "blobsInBucket";
-        String BUCKET = "bucket";
-        String ID = "id";
-        String NUMBER_OF_CHUNK = "position";
+        CqlIdentifier BUCKET = CqlIdentifier.fromCql("bucket");
+        CqlIdentifier ID = CqlIdentifier.fromCql("id");
+        CqlIdentifier NUMBER_OF_CHUNK = CqlIdentifier.fromCql("position");
     }
 
     interface BucketBlobParts {
         String TABLE_NAME = "blobPartsInBucket";
-        String BUCKET = "bucket";
-        String ID = "id";
-        String CHUNK_NUMBER = "chunkNumber";
-        String DATA = "data";
+        CqlIdentifier BUCKET = CqlIdentifier.fromCql("bucket");
+        CqlIdentifier ID = CqlIdentifier.fromCql("id");
+        CqlIdentifier CHUNK_NUMBER = CqlIdentifier.fromCql("chunkNumber");
+        CqlIdentifier DATA = CqlIdentifier.fromCql("data");
     }
 
     interface BlobStoreCache {
         String TABLE_NAME = "blob_cache";
-        String ID = "id";
-        String DATA = "data";
-        String TTL_FOR_ROW = "ttl";
+        CqlIdentifier ID = CqlIdentifier.fromCql("id");
+        CqlIdentifier DATA = CqlIdentifier.fromCql("data");
+        CqlIdentifier TTL_FOR_ROW = CqlIdentifier.fromCql("ttl");
     }
 }
diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java
index 8d66ccc8bc..cdfd3d3d47 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java
@@ -45,6 +45,7 @@ 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;
+import com.datastax.oss.driver.api.core.type.codec.TypeCodecs;
 import com.google.common.annotations.VisibleForTesting;
 
 import reactor.core.publisher.Mono;
@@ -75,7 +76,7 @@ public class CassandraBlobStoreCache implements BlobStoreCache {
             .build());
 
         this.selectStatement = session.prepare(selectFrom(TABLE_NAME)
-            .all()
+            .column(DATA)
             .whereColumn(ID).isEqualTo(bindMarker(ID))
             .build());
 
@@ -130,7 +131,7 @@ public class CassandraBlobStoreCache implements BlobStoreCache {
     }
 
     private byte[] toByteArray(Row row) {
-        ByteBuffer byteBuffer = row.getByteBuffer(DATA);
+        ByteBuffer byteBuffer = row.get(0, TypeCodecs.BLOB);
         assert byteBuffer != null;
         byte[] data = new byte[byteBuffer.remaining()];
         byteBuffer.get(data);
diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
index f7a20799ba..c273a25316 100644
--- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
+++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
@@ -354,6 +354,7 @@ public class CachedBlobStoreTest implements BlobStoreContract {
 
     @Test
     public void cachedBlobStoreShouldOnlyBeQueriedForHeaders(CassandraCluster cassandra) throws Exception {
+        cassandra.getConf().printStatements();
         MimeMessage message = MimeMessageBuilder.mimeMessageBuilder()
             .addHeader("Date", "Thu, 6 Sep 2018 13:29:13 +0700 (ICT)")
             .addHeader("Message-ID", "<84...@localhost.localdomain>")
@@ -374,7 +375,7 @@ public class CachedBlobStoreTest implements BlobStoreContract {
 
         mimeMessageStore.read(partsId).block();
 
-        assertThat(statementRecorder.listExecutedStatements(Selector.preparedStatementStartingWith("SELECT * FROM blob_cache")))
+        assertThat(statementRecorder.listExecutedStatements(Selector.preparedStatementStartingWith("SELECT data FROM blob_cache")))
             .hasSize(1);
     }
 


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