You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2021/05/19 09:52:34 UTC
[james-project] 03/04: JAMES-3586 Add metrics for hit/miss ratio on
Cassandra BlobStore reads with CL ONE
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit cdf0fa1960813ee9a3cfca691d1eab193d720aa7
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Tue May 18 16:30:42 2021 +0700
JAMES-3586 Add metrics for hit/miss ratio on Cassandra BlobStore reads with CL ONE
---
.../cassandra/mail/CassandraMessageDAOTest.java | 3 +-
.../cassandra/mail/CassandraMessageDAOV3Test.java | 3 +-
.../mail/migration/MessageV3MigrationTest.java | 3 +-
.../mailbox/cassandra/mail/utils/GuiceUtils.java | 3 +-
.../blob/cassandra/CassandraBlobStoreDAO.java | 24 +++++++-
.../blob/cassandra/CassandraBlobStoreFactory.java | 5 +-
.../cassandra/CassandraBlobStoreClOneTest.java | 68 +++++++++++++++++++++-
.../blob/cassandra/CassandraBlobStoreDAOTest.java | 12 ++--
.../blob/cassandra/CassandraBlobStoreTest.java | 6 +-
.../CassandraPassTroughBlobStoreTest.java | 14 +++--
.../blob/cassandra/cache/CachedBlobStoreTest.java | 2 +-
.../mailrepository-cassandra/pom.xml | 5 ++
.../cassandra/CassandraMailRepositoryTest.java | 5 +-
...aMailRepositoryWithFakeImplementationsTest.java | 3 +-
.../RabbitMQMailQueueConfigurationChangeTest.java | 2 +-
.../queue/rabbitmq/RabbitMQMailQueueTest.java | 7 ++-
16 files changed, 133 insertions(+), 32 deletions(-)
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
index d343025..7003aae 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
@@ -50,6 +50,7 @@ import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -86,7 +87,7 @@ class CassandraMessageDAOTest {
void setUp(CassandraCluster cassandra) {
messageIdFactory = new CassandraMessageId.Factory();
messageId = messageIdFactory.generate();
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough();
HashBlobId.Factory blobIdFactory = new HashBlobId.Factory();
testee = new CassandraMessageDAO(
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3Test.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3Test.java
index fe331c6..7ef00ea 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3Test.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3Test.java
@@ -50,6 +50,7 @@ import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -85,7 +86,7 @@ class CassandraMessageDAOV3Test {
void setUp(CassandraCluster cassandra) {
CassandraMessageId.Factory messageIdFactory = new CassandraMessageId.Factory();
messageId = messageIdFactory.generate();
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough();
HashBlobId.Factory blobIdFactory = new HashBlobId.Factory();
testee = new CassandraMessageDAOV3(
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MessageV3MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MessageV3MigrationTest.java
index 729759f..efd5cda 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MessageV3MigrationTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MessageV3MigrationTest.java
@@ -48,6 +48,7 @@ import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.assertj.core.api.SoftAssertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -76,7 +77,7 @@ class MessageV3MigrationTest {
@BeforeEach
void setUp(CassandraCluster cassandra) {
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough();
HashBlobId.Factory blobIdFactory = new HashBlobId.Factory();
daoV2 = new CassandraMessageDAO(
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
index eb3f20b..3f9c30d 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
@@ -44,6 +44,7 @@ import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
import org.apache.james.mailbox.cassandra.mail.eventsourcing.acl.ACLModule;
import org.apache.james.mailbox.model.MessageId;
import org.apache.james.mailbox.store.mail.UidProvider;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import com.datastax.driver.core.Session;
import com.google.common.collect.ImmutableSet;
@@ -80,7 +81,7 @@ public class GuiceUtils {
binder -> binder.bind(UidProvider.class).to(CassandraUidProvider.class),
binder -> binder.bind(ACLMapper.class).to(CassandraACLMapper.class),
binder -> binder.bind(BlobId.Factory.class).toInstance(new HashBlobId.Factory()),
- binder -> binder.bind(BlobStore.class).toProvider(() -> CassandraBlobStoreFactory.forTesting(session).passthrough()),
+ binder -> binder.bind(BlobStore.class).toProvider(() -> CassandraBlobStoreFactory.forTesting(session, new RecordingMetricFactory()).passthrough()),
binder -> binder.bind(Session.class).toInstance(session),
binder -> Multibinder.newSetBinder(binder, new TypeLiteral<EventDTOModule<? extends Event, ? extends EventDTO>>() {})
.addBinding().toInstance(ACLModule.ACL_UPDATE),
diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAO.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAO.java
index f22e096..06cfc41 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAO.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAO.java
@@ -37,6 +37,8 @@ import org.apache.james.blob.api.BlobStoreDAO;
import org.apache.james.blob.api.BucketName;
import org.apache.james.blob.api.ObjectNotFoundException;
import org.apache.james.blob.api.ObjectStoreIOException;
+import org.apache.james.metrics.api.Metric;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.util.DataChunker;
import org.apache.james.util.ReactorUtils;
@@ -51,21 +53,33 @@ import reactor.core.publisher.Mono;
public class CassandraBlobStoreDAO implements BlobStoreDAO {
public static final boolean LAZY = false;
+ public static final String CASSANDRA_BLOBSTORE_CL_ONE_MISS_COUNT_METRIC_NAME = "cassandraBlobStoreClOneMisses";
+ public static final String CASSANDRA_BLOBSTORE_CL_ONE_HIT_COUNT_METRIC_NAME = "cassandraBlobStoreClOneHits";
+
private final CassandraDefaultBucketDAO defaultBucketDAO;
private final CassandraBucketDAO bucketDAO;
private final CassandraConfiguration configuration;
private final BucketName defaultBucket;
+ private final MetricFactory metricFactory;
+ private final Metric metricClOneHitCount;
+ private final Metric metricClOneMissCount;
+
@Inject
@VisibleForTesting
public CassandraBlobStoreDAO(CassandraDefaultBucketDAO defaultBucketDAO,
CassandraBucketDAO bucketDAO,
CassandraConfiguration cassandraConfiguration,
- @Named(BlobStore.DEFAULT_BUCKET_NAME_QUALIFIER) BucketName defaultBucket) {
+ @Named(BlobStore.DEFAULT_BUCKET_NAME_QUALIFIER) BucketName defaultBucket,
+ MetricFactory metricFactory) {
this.defaultBucketDAO = defaultBucketDAO;
this.bucketDAO = bucketDAO;
this.configuration = cassandraConfiguration;
this.defaultBucket = defaultBucket;
+ this.metricFactory = metricFactory;
+
+ this.metricClOneMissCount = metricFactory.generate(CASSANDRA_BLOBSTORE_CL_ONE_MISS_COUNT_METRIC_NAME);
+ this.metricClOneHitCount = metricFactory.generate(CASSANDRA_BLOBSTORE_CL_ONE_HIT_COUNT_METRIC_NAME);
}
@Override
@@ -168,7 +182,9 @@ public class CassandraBlobStoreDAO implements BlobStoreDAO {
private Mono<ByteBuffer> readPart(BucketName bucketName, BlobId blobId, Integer partIndex) {
if (configuration.isOptimisticConsistencyLevel()) {
return readPartClOne(bucketName, blobId, partIndex)
- .switchIfEmpty(readPartClDefault(bucketName, blobId, partIndex));
+ .doOnNext(any -> metricClOneHitCount.increment())
+ .switchIfEmpty(Mono.fromRunnable(metricClOneMissCount::increment)
+ .then(readPartClDefault(bucketName, blobId, partIndex)));
} else {
return readPartClDefault(bucketName, blobId, partIndex);
}
@@ -193,7 +209,9 @@ public class CassandraBlobStoreDAO implements BlobStoreDAO {
private Mono<Integer> selectRowCount(BucketName bucketName, BlobId blobId) {
if (configuration.isOptimisticConsistencyLevel()) {
return selectRowCountClOne(bucketName, blobId)
- .switchIfEmpty(selectRowCountClDefault(bucketName, blobId));
+ .doOnNext(any -> metricClOneHitCount.increment())
+ .switchIfEmpty(Mono.fromRunnable(metricClOneMissCount::increment)
+ .then(selectRowCountClDefault(bucketName, blobId)));
} else {
return selectRowCountClDefault(bucketName, blobId);
}
diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java
index 9c1ca73..8d0e679 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java
@@ -22,16 +22,17 @@ package org.apache.james.blob.cassandra;
import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
import org.apache.james.blob.api.BucketName;
import org.apache.james.blob.api.HashBlobId;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.server.blob.deduplication.BlobStoreFactory;
import com.datastax.driver.core.Session;
public class CassandraBlobStoreFactory {
- public static BlobStoreFactory.RequireStoringStrategy forTesting(Session session) {
+ public static BlobStoreFactory.RequireStoringStrategy forTesting(Session session, MetricFactory metricFactory) {
HashBlobId.Factory blobIdFactory = new HashBlobId.Factory();
CassandraBucketDAO bucketDAO = new CassandraBucketDAO(blobIdFactory, session);
CassandraDefaultBucketDAO defaultBucketDAO = new CassandraDefaultBucketDAO(session);
- CassandraBlobStoreDAO blobStoreDAO = new CassandraBlobStoreDAO(defaultBucketDAO, bucketDAO, CassandraConfiguration.DEFAULT_CONFIGURATION, BucketName.DEFAULT);
+ CassandraBlobStoreDAO blobStoreDAO = new CassandraBlobStoreDAO(defaultBucketDAO, bucketDAO, CassandraConfiguration.DEFAULT_CONFIGURATION, BucketName.DEFAULT, metricFactory);
return BlobStoreFactory.builder()
.blobStoreDAO(blobStoreDAO)
.blobIdFactory(blobIdFactory)
diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreClOneTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreClOneTest.java
index a9da043..cd8bfad 100644
--- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreClOneTest.java
+++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreClOneTest.java
@@ -20,8 +20,12 @@
package org.apache.james.blob.cassandra;
import static org.apache.james.blob.api.BlobStore.StoragePolicy.LOW_COST;
+import static org.apache.james.blob.cassandra.CassandraBlobStoreDAO.CASSANDRA_BLOBSTORE_CL_ONE_HIT_COUNT_METRIC_NAME;
+import static org.apache.james.blob.cassandra.CassandraBlobStoreDAO.CASSANDRA_BLOBSTORE_CL_ONE_MISS_COUNT_METRIC_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.awaitility.Awaitility.await;
+import static org.awaitility.Durations.FIVE_SECONDS;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -38,6 +42,7 @@ import org.apache.james.blob.api.BucketName;
import org.apache.james.blob.api.HashBlobId;
import org.apache.james.blob.api.MetricableBlobStore;
import org.apache.james.blob.api.ObjectStoreException;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.server.blob.deduplication.BlobStoreFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -63,10 +68,11 @@ class CassandraBlobStoreClOneTest implements CassandraBlobStoreContract {
.blobPartSize(CHUNK_SIZE)
.optimisticConsistencyLevel(true)
.build();
+ MetricFactory metricFactory = metricsTestExtension.getMetricFactory();
testee = new MetricableBlobStore(
- metricsTestExtension.getMetricFactory(),
+ metricFactory,
BlobStoreFactory.builder()
- .blobStoreDAO(new CassandraBlobStoreDAO(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT))
+ .blobStoreDAO(new CassandraBlobStoreDAO(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT, metricFactory))
.blobIdFactory(blobIdFactory)
.defaultBucketName()
.deduplication());
@@ -168,4 +174,62 @@ class CassandraBlobStoreClOneTest implements CassandraBlobStoreContract {
assertThat(new String(bytes, StandardCharsets.UTF_8)).isEqualTo(longString);
}
+
+ @Test
+ void readShouldPublishHitRatioClOneMetric() {
+ BlobStore store = testee();
+
+ BlobId blobId = Mono.from(store.save(store.getDefaultBucketName(), BYTES_CONTENT, LOW_COST)).block();
+ store.read(store.getDefaultBucketName(), blobId);
+
+ await().atMost(FIVE_SECONDS)
+ .untilAsserted(() -> assertThat(metricsTestExtension.getMetricFactory().countFor(CASSANDRA_BLOBSTORE_CL_ONE_HIT_COUNT_METRIC_NAME))
+ .isEqualTo(2));
+ }
+
+ @Test
+ void readBytesShouldPublishHitRatioClOneMetric() {
+ BlobStore store = testee();
+
+ BlobId blobId = Mono.from(store.save(store.getDefaultBucketName(), BYTES_CONTENT, LOW_COST)).block();
+ Mono.from(store.readBytes(store.getDefaultBucketName(), blobId)).block();
+
+ await().atMost(FIVE_SECONDS)
+ .untilAsserted(() -> assertThat(metricsTestExtension.getMetricFactory().countFor(CASSANDRA_BLOBSTORE_CL_ONE_HIT_COUNT_METRIC_NAME))
+ .isEqualTo(2));
+ }
+
+ @Test
+ void readShouldPublishMissRatioClOneMetric() {
+ BlobStore store = testee();
+
+ BlobId blobId = Mono.from(store.save(store.getDefaultBucketName(), BYTES_CONTENT, LOW_COST)).block();
+
+ when(defaultBucketDAO().selectRowCountClOne(blobId)).thenReturn(Mono.empty());
+ store.read(store.getDefaultBucketName(), blobId);
+
+ when(defaultBucketDAO().readPartClOne(blobId, 1)).thenReturn(Mono.empty());
+ store.read(store.getDefaultBucketName(), blobId);
+
+ await().atMost(FIVE_SECONDS)
+ .untilAsserted(() -> assertThat(metricsTestExtension.getMetricFactory().countFor(CASSANDRA_BLOBSTORE_CL_ONE_MISS_COUNT_METRIC_NAME))
+ .isEqualTo(2));
+ }
+
+ @Test
+ void readBytesShouldPublishMissRatioClOneMetric() {
+ BlobStore store = testee();
+
+ BlobId blobId = Mono.from(store.save(store.getDefaultBucketName(), BYTES_CONTENT, LOW_COST)).block();
+
+ when(defaultBucketDAO().selectRowCountClOne(blobId)).thenReturn(Mono.empty());
+ Mono.from(store.readBytes(store.getDefaultBucketName(), blobId)).block();
+
+ when(defaultBucketDAO().readPartClOne(blobId, 1)).thenReturn(Mono.empty());
+ Mono.from(store.readBytes(store.getDefaultBucketName(), blobId)).block();
+
+ await().atMost(FIVE_SECONDS)
+ .untilAsserted(() -> assertThat(metricsTestExtension.getMetricFactory().countFor(CASSANDRA_BLOBSTORE_CL_ONE_MISS_COUNT_METRIC_NAME))
+ .isEqualTo(2));
+ }
}
diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAOTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAOTest.java
index a24497a..6b2ad1d 100644
--- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAOTest.java
+++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAOTest.java
@@ -26,6 +26,7 @@ import org.apache.james.blob.api.BlobStoreDAO;
import org.apache.james.blob.api.BlobStoreDAOContract;
import org.apache.james.blob.api.BucketName;
import org.apache.james.blob.api.HashBlobId;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -46,11 +47,12 @@ public class CassandraBlobStoreDAOTest implements BlobStoreDAOContract {
defaultBucketDAO = new CassandraDefaultBucketDAO(cassandra.getConf());
testee = new CassandraBlobStoreDAO(
defaultBucketDAO,
- bucketDAO,
- CassandraConfiguration.builder()
- .blobPartSize(CHUNK_SIZE)
- .build(),
- BucketName.DEFAULT);
+ bucketDAO,
+ CassandraConfiguration.builder()
+ .blobPartSize(CHUNK_SIZE)
+ .build(),
+ BucketName.DEFAULT,
+ new RecordingMetricFactory());
}
@Override
diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java
index 35bae4b..a3b7748 100644
--- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java
+++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java
@@ -30,6 +30,7 @@ import org.apache.james.blob.api.BucketName;
import org.apache.james.blob.api.DeduplicationBlobStoreContract;
import org.apache.james.blob.api.HashBlobId;
import org.apache.james.blob.api.MetricableBlobStore;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.server.blob.deduplication.BlobStoreFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -49,10 +50,11 @@ public class CassandraBlobStoreTest implements CassandraBlobStoreContract, Dedup
CassandraConfiguration cassandraConfiguration = CassandraConfiguration.builder()
.blobPartSize(CHUNK_SIZE)
.build();
+ MetricFactory metricFactory = metricsTestExtension.getMetricFactory();
testee = new MetricableBlobStore(
- metricsTestExtension.getMetricFactory(),
+ metricFactory,
BlobStoreFactory.builder()
- .blobStoreDAO(new CassandraBlobStoreDAO(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT))
+ .blobStoreDAO(new CassandraBlobStoreDAO(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT, metricFactory))
.blobIdFactory(blobIdFactory)
.defaultBucketName()
.deduplication());
diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java
index 2489e62..c1bbbda 100644
--- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java
+++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java
@@ -30,6 +30,7 @@ import org.apache.james.blob.api.BucketName;
import org.apache.james.blob.api.DeleteBlobStoreContract;
import org.apache.james.blob.api.HashBlobId;
import org.apache.james.blob.api.MetricableBlobStore;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.server.blob.deduplication.BlobStoreFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -49,13 +50,14 @@ public class CassandraPassTroughBlobStoreTest implements DeleteBlobStoreContract
CassandraConfiguration cassandraConfiguration = CassandraConfiguration.builder()
.blobPartSize(CHUNK_SIZE)
.build();
+ MetricFactory metricFactory = metricsTestExtension.getMetricFactory();
testee = new MetricableBlobStore(
- metricsTestExtension.getMetricFactory(),
- BlobStoreFactory.builder()
- .blobStoreDAO(new CassandraBlobStoreDAO(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT))
- .blobIdFactory(blobIdFactory)
- .defaultBucketName()
- .passthrough());
+ metricFactory,
+ BlobStoreFactory.builder()
+ .blobStoreDAO(new CassandraBlobStoreDAO(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT, metricFactory))
+ .blobIdFactory(blobIdFactory)
+ .defaultBucketName()
+ .passthrough());
}
@Override
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 b27ca8c..5fdd36f8 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
@@ -83,7 +83,7 @@ public class CachedBlobStoreTest implements BlobStoreContract {
@BeforeEach
void setUp(CassandraCluster cassandra) {
- backend = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ backend = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough();
CassandraCacheConfiguration cacheConfig = new CassandraCacheConfiguration.Builder()
.sizeThresholdInBytes(EIGHT_KILOBYTES.length + 1)
diff --git a/server/mailrepository/mailrepository-cassandra/pom.xml b/server/mailrepository/mailrepository-cassandra/pom.xml
index 42f4ffc..a22c963 100644
--- a/server/mailrepository/mailrepository-cassandra/pom.xml
+++ b/server/mailrepository/mailrepository-cassandra/pom.xml
@@ -79,6 +79,11 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>metrics-tests</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>testing-base</artifactId>
<scope>test</scope>
</dependency>
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
index 3545bdb..3f1d9b0 100644
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
@@ -38,6 +38,7 @@ import org.apache.james.mailrepository.MailRepositoryContract;
import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepository;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Nested;
@@ -66,7 +67,7 @@ class CassandraMailRepositoryTest {
CassandraMailRepositoryMailDaoAPI mailDAO = new MergingCassandraMailRepositoryMailDao(v1, v2);
CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough();
cassandraMailRepository = new CassandraMailRepository(URL,
@@ -106,7 +107,7 @@ class CassandraMailRepositoryTest {
CassandraMailRepositoryMailDaoAPI mailDAO = new MergingCassandraMailRepositoryMailDao(v1, v2);
CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.deduplication();
cassandraMailRepository = new CassandraMailRepository(URL,
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
index a420ac5..73b24e0 100644
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
@@ -37,6 +37,7 @@ import org.apache.james.blob.cassandra.CassandraBlobStoreFactory;
import org.apache.james.blob.mail.MimeMessageStore;
import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.server.core.MailImpl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
@@ -66,7 +67,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
CassandraMailRepositoryMailDaoAPI mailDAO = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider());
keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough();
cassandraMailRepository = new CassandraMailRepository(URL,
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
index b4041f6..2c79f17 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
@@ -102,7 +102,7 @@ class RabbitMQMailQueueConfigurationChangeTest {
@BeforeEach
void setup(CassandraCluster cassandra) throws Exception {
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough();
mimeMessageStoreFactory = MimeMessageStore.factory(blobStore);
clock = new UpdatableTickingClock(IN_SLICE_1);
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
index 85e44c1..32e0d8b 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
@@ -61,6 +61,7 @@ import org.apache.james.blob.mail.MimeMessageStore;
import org.apache.james.core.builder.MimeMessageBuilder;
import org.apache.james.eventsourcing.eventstore.cassandra.CassandraEventStoreModule;
import org.apache.james.metrics.api.Gauge;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.queue.api.MailQueue;
import org.apache.james.queue.api.MailQueueMetricContract;
import org.apache.james.queue.api.MailQueueMetricExtension;
@@ -136,7 +137,7 @@ class RabbitMQMailQueueTest {
RabbitMQMailQueueConfiguration.builder()
.sizeMetricsEnabled(true)
.build(),
- CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough());
}
@@ -802,7 +803,7 @@ class RabbitMQMailQueueTest {
RabbitMQMailQueueConfiguration.builder()
.sizeMetricsEnabled(false)
.build(),
- CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.passthrough());
}
@@ -825,7 +826,7 @@ class RabbitMQMailQueueTest {
RabbitMQMailQueueConfiguration.builder()
.sizeMetricsEnabled(true)
.build(),
- CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
.deduplication());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org