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 2023/04/25 11:18:53 UTC

[james-project] branch master updated: JAMES-2791 Avoid incoherent mail repository count (#1537)

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


The following commit(s) were added to refs/heads/master by this push:
     new 7932f38e8d JAMES-2791 Avoid incoherent mail repository count (#1537)
7932f38e8d is described below

commit 7932f38e8d455c6a613ee15c5ce9afb707afba80
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Tue Apr 25 18:18:47 2023 +0700

    JAMES-2791 Avoid incoherent mail repository count (#1537)
    
    This table can be dropped. Counting keys will definitly be fast
    enough (~100ms for million mails) and will not be subject to
    inconsistencies.
---
 .../CassandraMailRepositoryModule.java             |   2 -
 .../cassandra/CassandraMailRepository.java         |  22 +----
 .../cassandra/CassandraMailRepositoryCountDAO.java | 101 ---------------------
 .../cassandra/CassandraMailRepositoryFactory.java  |   8 +-
 .../cassandra/CassandraMailRepositoryKeysDAO.java  |  17 ++++
 .../cassandra/CassandraMailRepositoryModule.java   |   6 --
 .../cassandra/MailRepositoryTable.java             |   3 -
 .../CassandraMailRepositoryCountDAOTest.java       |  98 --------------------
 .../cassandra/CassandraMailRepositoryTest.java     |  12 +--
 ...aMailRepositoryWithFakeImplementationsTest.java |   6 +-
 10 files changed, 27 insertions(+), 248 deletions(-)

diff --git a/server/container/guice/mailrepository-cassandra/src/main/java/org/apache/james/modules/mailrepository/CassandraMailRepositoryModule.java b/server/container/guice/mailrepository-cassandra/src/main/java/org/apache/james/modules/mailrepository/CassandraMailRepositoryModule.java
index 198011d1c5..c93bfb7f95 100644
--- a/server/container/guice/mailrepository-cassandra/src/main/java/org/apache/james/modules/mailrepository/CassandraMailRepositoryModule.java
+++ b/server/container/guice/mailrepository-cassandra/src/main/java/org/apache/james/modules/mailrepository/CassandraMailRepositoryModule.java
@@ -26,7 +26,6 @@ import org.apache.james.mailrepository.api.MailRepositoryFactory;
 import org.apache.james.mailrepository.api.MailRepositoryUrlStore;
 import org.apache.james.mailrepository.api.Protocol;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepository;
-import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryCountDAO;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryFactory;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryKeysDAO;
 import org.apache.james.mailrepository.cassandra.CassandraMailRepositoryMailDaoV2;
@@ -46,7 +45,6 @@ public class CassandraMailRepositoryModule extends AbstractModule {
     protected void configure() {
         bind(CassandraMailRepositoryUrlStore.class).in(Scopes.SINGLETON);
         bind(CassandraMailRepositoryKeysDAO.class).in(Scopes.SINGLETON);
-        bind(CassandraMailRepositoryCountDAO.class).in(Scopes.SINGLETON);
         bind(CassandraMailRepositoryMailDaoV2.class).in(Scopes.SINGLETON);
 
         bind(MailRepositoryUrlStore.class).to(CassandraMailRepositoryUrlStore.class);
diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java
index a70e5c79f4..ba7db34f84 100644
--- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java
+++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java
@@ -48,19 +48,16 @@ import reactor.core.publisher.Mono;
 public class CassandraMailRepository implements MailRepository {
     private final MailRepositoryUrl url;
     private final CassandraMailRepositoryKeysDAO keysDAO;
-    private final CassandraMailRepositoryCountDAO countDAO;
     private final CassandraMailRepositoryMailDaoV2 mailDAO;
     private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore;
 
     @Inject
     CassandraMailRepository(MailRepositoryUrl url,
                             CassandraMailRepositoryKeysDAO keysDAO,
-                            CassandraMailRepositoryCountDAO countDAO,
                             CassandraMailRepositoryMailDaoV2 mailDAO,
                             MimeMessageStore.Factory mimeMessageStoreFactory) {
         this.url = url;
         this.keysDAO = keysDAO;
-        this.countDAO = countDAO;
         this.mailDAO = mailDAO;
         this.mimeMessageStore = mimeMessageStoreFactory.mimeMessageStore();
     }
@@ -74,18 +71,10 @@ public class CassandraMailRepository implements MailRepository {
                 parts.getHeaderBlobId(),
                 parts.getBodyBlobId()))
             .then(keysDAO.store(url, mailKey))
-            .flatMap(this::increaseSizeIfStored)
             .thenReturn(mailKey)
             .block();
     }
 
-    private Mono<Void> increaseSizeIfStored(Boolean isStored) {
-        if (isStored) {
-            return countDAO.increment(url);
-        }
-        return Mono.empty();
-    }
-
     @Override
     public Iterator<MailKey> list() {
         return keysDAO.list(url)
@@ -135,7 +124,6 @@ public class CassandraMailRepository implements MailRepository {
         return mailDAO.read(url, key)
             .flatMap(maybeMailDTO ->
                 keysDAO.remove(url, key)
-                    .flatMap(this::decreaseSizeIfDeleted)
                     .then(mailDAO.remove(url, key))
                     .then(deleteBlobs(maybeMailDTO)));
     }
@@ -145,21 +133,15 @@ public class CassandraMailRepository implements MailRepository {
             .flatMap(mailDTO -> Mono.from(mimeMessageStore.delete(blobIds(mailDTO))));
     }
 
-    private Mono<Void> decreaseSizeIfDeleted(Boolean isDeleted) {
-        if (isDeleted) {
-            return countDAO.decrement(url);
-        }
-        return Mono.empty();
-    }
 
     @Override
     public long size() {
-        return countDAO.getCount(url).block();
+        return keysDAO.getCount(url).block();
     }
 
     @Override
     public Publisher<Long> sizeReactive() {
-        return countDAO.getCount(url);
+        return keysDAO.getCount(url);
     }
 
     @Override
diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryCountDAO.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryCountDAO.java
deleted file mode 100644
index 3f2c22a6a9..0000000000
--- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryCountDAO.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailrepository.cassandra;
-
-import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.bindMarker;
-import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.selectFrom;
-import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.update;
-import static com.datastax.oss.driver.api.querybuilder.relation.Relation.column;
-import static org.apache.james.mailrepository.cassandra.MailRepositoryTable.COUNT;
-import static org.apache.james.mailrepository.cassandra.MailRepositoryTable.COUNT_TABLE;
-import static org.apache.james.mailrepository.cassandra.MailRepositoryTable.REPOSITORY_NAME;
-
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-
-import com.datastax.oss.driver.api.core.CqlSession;
-import com.datastax.oss.driver.api.core.cql.PreparedStatement;
-import com.datastax.oss.driver.api.core.cql.Row;
-
-import reactor.core.publisher.Mono;
-
-public class CassandraMailRepositoryCountDAO {
-
-    private final CassandraAsyncExecutor executor;
-    private final PreparedStatement increment;
-    private final PreparedStatement decrement;
-    private final PreparedStatement select;
-
-    @Inject
-    public CassandraMailRepositoryCountDAO(CqlSession session) {
-        this.executor = new CassandraAsyncExecutor(session);
-
-        this.increment = prepareIncrement(session);
-        this.decrement = prepareDecrement(session);
-        this.select = prepareSelect(session);
-    }
-
-    private PreparedStatement prepareDecrement(CqlSession session) {
-        return session.prepare(update(COUNT_TABLE)
-            .decrement(COUNT)
-            .where(column(REPOSITORY_NAME).isEqualTo(bindMarker(REPOSITORY_NAME)))
-            .build());
-    }
-
-    private PreparedStatement prepareIncrement(CqlSession session) {
-        return session.prepare(update(COUNT_TABLE)
-            .increment(COUNT)
-            .where(column(REPOSITORY_NAME).isEqualTo(bindMarker(REPOSITORY_NAME)))
-            .build());
-    }
-
-    private PreparedStatement prepareSelect(CqlSession session) {
-        return session.prepare(selectFrom(COUNT_TABLE)
-            .column(COUNT)
-            .where(column(REPOSITORY_NAME).isEqualTo(bindMarker(REPOSITORY_NAME)))
-            .build());
-    }
-
-    public Mono<Void> increment(MailRepositoryUrl url) {
-        return executor.executeVoid(increment.bind()
-            .setString(REPOSITORY_NAME, url.asString()));
-    }
-
-    public Mono<Void> decrement(MailRepositoryUrl url) {
-        return executor.executeVoid(decrement.bind()
-            .setString(REPOSITORY_NAME, url.asString()));
-    }
-
-    public Mono<Long> getCount(MailRepositoryUrl url) {
-        return executor.executeSingleRowOptional(select.bind()
-                .setString(REPOSITORY_NAME, url.asString()))
-            .map(this::toCount);
-    }
-
-    private Long toCount(Optional<Row> rowOptional) {
-        return rowOptional
-            .map(row -> row.getLong(COUNT))
-            .orElse(0L);
-    }
-}
diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryFactory.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryFactory.java
index 98a3d58d3e..bbd5bea463 100644
--- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryFactory.java
+++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryFactory.java
@@ -28,19 +28,15 @@ import org.apache.james.mailrepository.api.MailRepositoryUrl;
 
 public class CassandraMailRepositoryFactory implements MailRepositoryFactory {
     private final CassandraMailRepositoryKeysDAO keysDAO;
-    private final CassandraMailRepositoryCountDAO countDAO;
     private final CassandraMailRepositoryMailDaoV2 mailDAO;
     private final MimeMessageStore.Factory mimeMessageStoreFactory;
 
     @Inject
     public CassandraMailRepositoryFactory(
             CassandraMailRepositoryKeysDAO keysDAO,
-            CassandraMailRepositoryCountDAO countDAO,
             CassandraMailRepositoryMailDaoV2 mailDAO,
-            MimeMessageStore.Factory mimeMessageStoreFactory
-    ) {
+            MimeMessageStore.Factory mimeMessageStoreFactory) {
         this.keysDAO = keysDAO;
-        this.countDAO = countDAO;
         this.mailDAO = mailDAO;
         this.mimeMessageStoreFactory = mimeMessageStoreFactory;
     }
@@ -52,6 +48,6 @@ public class CassandraMailRepositoryFactory implements MailRepositoryFactory {
 
     @Override
     public MailRepository create(MailRepositoryUrl url) {
-        return new CassandraMailRepository(url, keysDAO, countDAO, mailDAO, mimeMessageStoreFactory);
+        return new CassandraMailRepository(url, keysDAO, mailDAO, mimeMessageStoreFactory);
     }
 }
diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryKeysDAO.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryKeysDAO.java
index 4e1b973e46..93a392cb19 100644
--- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryKeysDAO.java
+++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryKeysDAO.java
@@ -45,11 +45,13 @@ import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 public class CassandraMailRepositoryKeysDAO {
+    private static final String COUNT = "count";
 
     private final CassandraAsyncExecutor executor;
     private final PreparedStatement insertKey;
     private final PreparedStatement deleteKey;
     private final PreparedStatement listKeys;
+    private final PreparedStatement countKeys;
     private final boolean strongConsistency;
 
     @Inject
@@ -60,6 +62,7 @@ public class CassandraMailRepositoryKeysDAO {
         this.insertKey = prepareInsert(session);
         this.deleteKey = prepareDelete(session);
         this.listKeys = prepareList(session);
+        this.countKeys = prepareCount(session);
     }
 
     private PreparedStatement prepareList(CqlSession session) {
@@ -69,6 +72,13 @@ public class CassandraMailRepositoryKeysDAO {
             .build());
     }
 
+    private PreparedStatement prepareCount(CqlSession session) {
+        return session.prepare(selectFrom(KEYS_TABLE_NAME)
+            .countAll().as(COUNT)
+            .where(column(REPOSITORY_NAME).isEqualTo(bindMarker(REPOSITORY_NAME)))
+            .build());
+    }
+
     private PreparedStatement prepareDelete(CqlSession session) {
         Delete deleteStatement = deleteFrom(KEYS_TABLE_NAME)
             .where(of(column(REPOSITORY_NAME).isEqualTo(bindMarker(REPOSITORY_NAME)),
@@ -109,6 +119,13 @@ public class CassandraMailRepositoryKeysDAO {
             .map(row -> new MailKey(row.getString(MAIL_KEY)));
     }
 
+    public Mono<Long> getCount(MailRepositoryUrl url) {
+        return executor.executeSingleRow(countKeys.bind()
+            .setString(REPOSITORY_NAME, url.asString()))
+            .map(row -> row.getLong(COUNT))
+            .switchIfEmpty(Mono.just(0L));
+    }
+
     public Mono<Boolean> remove(MailRepositoryUrl url, MailKey key) {
         Mono<Boolean> operation = executor.executeReturnApplied(deleteKey.bind()
             .setString(REPOSITORY_NAME, url.asString())
diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
index 8d0a44a2c7..cf2e8cc1c4 100644
--- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
+++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
@@ -20,7 +20,6 @@
 package org.apache.james.mailrepository.cassandra;
 
 import static com.datastax.oss.driver.api.core.type.DataTypes.BIGINT;
-import static com.datastax.oss.driver.api.core.type.DataTypes.COUNTER;
 import static com.datastax.oss.driver.api.core.type.DataTypes.TEXT;
 import static com.datastax.oss.driver.api.core.type.DataTypes.TIMESTAMP;
 import static com.datastax.oss.driver.api.core.type.DataTypes.listOf;
@@ -36,11 +35,6 @@ public interface CassandraMailRepositoryModule {
             .withField(MailRepositoryTable.HEADER_NAME, TEXT)
             .withField(MailRepositoryTable.HEADER_VALUE, TEXT))
 
-        .table(MailRepositoryTable.COUNT_TABLE)
-        .comment("Projection maintaining per mail repository mail counter")
-        .statement(statement -> types -> statement
-            .withPartitionKey(MailRepositoryTable.REPOSITORY_NAME, TEXT)
-            .withColumn(MailRepositoryTable.COUNT, COUNTER))
         .table(MailRepositoryTable.KEYS_TABLE_NAME)
         .comment("Per-mailRepository mail key list")
         .statement(statement -> types -> statement
diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryTable.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryTable.java
index 13dd105602..ef56ec69f3 100644
--- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryTable.java
+++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryTable.java
@@ -21,7 +21,6 @@ package org.apache.james.mailrepository.cassandra;
 
 public interface MailRepositoryTable {
     String KEYS_TABLE_NAME = "mailRepositoryKeys";
-    String COUNT_TABLE = "mailRepositoryCount";
 
     String REPOSITORY_NAME = "name";
 
@@ -39,8 +38,6 @@ public interface MailRepositoryTable {
     String LAST_UPDATED = "lastUpdated";
     String PER_RECIPIENT_SPECIFIC_HEADERS = "perRecipientSpecificHeaders";
 
-    String COUNT = "count";
-
     String HEADER_TYPE = "header";
     String HEADER_NAME = "headerName";
     String HEADER_VALUE = "headerValue";
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryCountDAOTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryCountDAOTest.java
deleted file mode 100644
index 4e4996dfc4..0000000000
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryCountDAOTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailrepository.cassandra;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.apache.james.backends.cassandra.CassandraCluster;
-import org.apache.james.backends.cassandra.CassandraClusterExtension;
-import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
-import org.apache.james.mailrepository.api.MailRepositoryUrl;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-class CassandraMailRepositoryCountDAOTest {
-    static final MailRepositoryUrl URL = MailRepositoryUrl.from("proto://url");
-    static final MailRepositoryUrl URL2 = MailRepositoryUrl.from("proto://url2");
-
-    @RegisterExtension
-    static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(
-            CassandraModule.aggregateModules(CassandraSchemaVersionModule.MODULE,CassandraMailRepositoryModule.MODULE));
-
-    CassandraMailRepositoryCountDAO testee;
-
-    @BeforeEach
-    void setUp(CassandraCluster cassandra) {
-        testee = new CassandraMailRepositoryCountDAO(cassandra.getConf());
-    }
-
-    @Test
-    void getCountShouldReturnZeroWhenEmpty() {
-        assertThat(testee.getCount(URL).block())
-            .isEqualTo(0L);
-    }
-
-    @Test
-    void getCountShouldReturnOneWhenIncrementedOneTime() {
-        testee.increment(URL).block();
-
-        assertThat(testee.getCount(URL).block())
-            .isEqualTo(1L);
-    }
-
-    @Test
-    void incrementShouldNotAffectOtherUrls() {
-        testee.increment(URL).block();
-
-        assertThat(testee.getCount(URL2).block())
-            .isEqualTo(0L);
-    }
-
-    @Test
-    void incrementCanBeAppliedSeveralTime() {
-        testee.increment(URL).block();
-        testee.increment(URL).block();
-
-        assertThat(testee.getCount(URL).block())
-            .isEqualTo(2L);
-    }
-
-    @Test
-    void decrementShouldDecreaseCount() {
-        testee.increment(URL).block();
-        testee.increment(URL).block();
-        testee.increment(URL).block();
-
-        testee.decrement(URL).block();
-
-        assertThat(testee.getCount(URL).block())
-            .isEqualTo(2L);
-    }
-
-    @Test
-    void decrementCanLeadToNegativeCount() {
-        testee.decrement(URL).block();
-
-        assertThat(testee.getCount(URL).block())
-            .isEqualTo(-1L);
-    }
-}
\ No newline at end of file
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 433b5f6e1e..f12c114940 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
@@ -66,12 +66,11 @@ class CassandraMailRepositoryTest {
         void setup(CassandraCluster cassandra) {
             CassandraMailRepositoryMailDaoV2 v2 = new CassandraMailRepositoryMailDaoV2(cassandra.getConf(), BLOB_ID_FACTORY);
             CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION);
-            CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
             BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
                 .passthrough();
 
             cassandraMailRepository = new CassandraMailRepository(URL,
-                keysDAO, countDAO, v2, MimeMessageStore.factory(blobStore));
+                keysDAO, v2, MimeMessageStore.factory(blobStore));
         }
 
         @Override
@@ -80,11 +79,10 @@ class CassandraMailRepositoryTest {
 
             CassandraMailRepositoryMailDaoV2 v2 = new CassandraMailRepositoryMailDaoV2(cassandra.getConf(), BLOB_ID_FACTORY);
             CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION);
-            CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
             BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
                 .passthrough();
 
-           return new CassandraMailRepository(MailRepositoryUrl.fromPathAndProtocol(new Protocol("cassandra"), url), keysDAO, countDAO, v2, MimeMessageStore.factory(blobStore));
+           return new CassandraMailRepository(MailRepositoryUrl.fromPathAndProtocol(new Protocol("cassandra"), url), keysDAO, v2, MimeMessageStore.factory(blobStore));
         }
 
         @Override
@@ -129,12 +127,11 @@ class CassandraMailRepositoryTest {
         void setup(CassandraCluster cassandra) {
             CassandraMailRepositoryMailDaoV2 v2 = new CassandraMailRepositoryMailDaoV2(cassandra.getConf(), BLOB_ID_FACTORY);
             CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION);
-            CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
             BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
                 .deduplication();
 
             cassandraMailRepository = new CassandraMailRepository(URL,
-                keysDAO, countDAO, v2, MimeMessageStore.factory(blobStore));
+                keysDAO, v2, MimeMessageStore.factory(blobStore));
         }
 
         @Override
@@ -143,11 +140,10 @@ class CassandraMailRepositoryTest {
 
             CassandraMailRepositoryMailDaoV2 v2 = new CassandraMailRepositoryMailDaoV2(cassandra.getConf(), BLOB_ID_FACTORY);
             CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION);
-            CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
             BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
                 .deduplication();
 
-            return new CassandraMailRepository(MailRepositoryUrl.fromPathAndProtocol(new Protocol("cassandra"), url), keysDAO, countDAO, v2, MimeMessageStore.factory(blobStore));
+            return new CassandraMailRepository(MailRepositoryUrl.fromPathAndProtocol(new Protocol("cassandra"), url), keysDAO, v2, MimeMessageStore.factory(blobStore));
         }
 
         @Override
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 2ae770cf51..64920aabab 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
@@ -59,19 +59,17 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
 
 
     CassandraMailRepository cassandraMailRepository;
-    CassandraMailRepositoryCountDAO countDAO;
     CassandraMailRepositoryKeysDAO keysDAO;
 
     @BeforeEach
     void setup(CassandraCluster cassandra) {
         CassandraMailRepositoryMailDaoV2 mailDAO = new CassandraMailRepositoryMailDaoV2(cassandra.getConf(), BLOB_ID_FACTORY);
         keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION);
-        countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
         BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf(), new RecordingMetricFactory())
             .passthrough();
 
         cassandraMailRepository = new CassandraMailRepository(URL,
-            keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore));
+            keysDAO, mailDAO, MimeMessageStore.factory(blobStore));
     }
 
     @Nested
@@ -180,7 +178,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
             assertThatThrownBy(() -> cassandraMailRepository.store(mail))
                     .isInstanceOf(RuntimeException.class);
 
-            assertThat(countDAO.getCount(URL).block()).isEqualTo(0);
+            assertThat(keysDAO.getCount(URL).block()).isEqualTo(0L);
         }
 
         @Test


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