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