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 2020/12/05 07:10:21 UTC

[james-project] 14/17: [REFACTORING] Extract a CassandraACLDAO

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 dcb8101479b13f3ffbf8182532de531eb48d0522
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 2 08:50:22 2020 +0700

    [REFACTORING] Extract a CassandraACLDAO
    
    This enables separation between the denormalization logic and
    the controversial choices made in the implementation of this class (JSON, LWT)
---
 ...assandraACLMapper.java => CassandraACLDAO.java} |  26 +--
 .../mailbox/cassandra/mail/CassandraACLMapper.java | 182 +--------------------
 .../cassandra/CassandraMailboxManagerTest.java     |   7 +-
 .../cassandra/mail/CassandraACLMapperTest.java     |   6 +-
 .../cassandra/mail/CassandraMailboxMapperTest.java |   6 +-
 .../mail/migration/MailboxPathV2MigrationTest.java |   8 +-
 .../modules/mailbox/CassandraMailboxModule.java    |   2 +
 7 files changed, 34 insertions(+), 203 deletions(-)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAO.java
similarity index 87%
copy from mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
copy to mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAO.java
index cda7f9f..73e5c0f 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAO.java
@@ -39,7 +39,6 @@ import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.json.MailboxACLJsonConverter;
 import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
 import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.UnsupportedRightException;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.util.FunctionalUtils;
@@ -55,14 +54,13 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 
 import reactor.core.publisher.Mono;
 
-public class CassandraACLMapper {
+public class CassandraACLDAO {
     public static final int INITIAL_VALUE = 0;
-    private static final Logger LOG = LoggerFactory.getLogger(CassandraACLMapper.class);
+    private static final Logger LOG = LoggerFactory.getLogger(CassandraACLDAO.class);
     private static final String OLD_VERSION = "oldVersion";
 
     private final CassandraAsyncExecutor executor;
     private final int maxAclRetry;
-    private final CassandraUserMailboxRightsDAO userMailboxRightsDAO;
     private final PreparedStatement conditionalInsertStatement;
     private final PreparedStatement conditionalUpdateStatement;
     private final PreparedStatement readStatement;
@@ -70,8 +68,9 @@ public class CassandraACLMapper {
     private final ConsistencyLevel consistencyLevel;
 
     @Inject
-    public CassandraACLMapper(Session session, CassandraUserMailboxRightsDAO userMailboxRightsDAO,
-                              CassandraConfiguration cassandraConfiguration, CassandraConsistenciesConfiguration consistenciesConfiguration) {
+    public CassandraACLDAO(Session session,
+                           CassandraConfiguration cassandraConfiguration,
+                           CassandraConsistenciesConfiguration consistenciesConfiguration) {
         this.executor = new CassandraAsyncExecutor(session);
         this.maxAclRetry = cassandraConfiguration.getAclMaxRetry();
         this.consistencyLevel = consistenciesConfiguration.getLightweightTransaction();
@@ -79,7 +78,6 @@ public class CassandraACLMapper {
         this.conditionalUpdateStatement = prepareConditionalUpdate(session);
         this.readStatement = prepareReadStatement(session);
         this.deleteStatement = prepareDelete(session);
-        this.userMailboxRightsDAO = userMailboxRightsDAO;
     }
 
     private PreparedStatement prepareDelete(Session session) {
@@ -114,7 +112,7 @@ public class CassandraACLMapper {
                 .where(eq(CassandraMailboxTable.ID, bindMarker(CassandraACLTable.ID))));
     }
 
-    public Mono<MailboxACL> getACL(CassandraId cassandraId) {
+    Mono<MailboxACL> getACL(CassandraId cassandraId) {
         return getStoredACLRow(cassandraId)
             .map(row -> getAcl(cassandraId, row));
     }
@@ -126,20 +124,14 @@ public class CassandraACLMapper {
 
     public Mono<ACLDiff> updateACL(CassandraId cassandraId, MailboxACL.ACLCommand command) {
         return Mono.fromCallable(() -> MailboxACL.EMPTY.apply(command))
-        .flatMap(replacement -> updateAcl(cassandraId, aclWithVersion -> aclWithVersion.apply(command), replacement))
-            .flatMap(aclDiff -> userMailboxRightsDAO.update(cassandraId, aclDiff)
-            .thenReturn(aclDiff))
-            .switchIfEmpty(Mono.error(new MailboxException("Unable to update ACL")));
+            .flatMap(replacement -> doUpdateAcl(cassandraId, aclWithVersion -> aclWithVersion.apply(command), replacement));
     }
 
     public Mono<ACLDiff> setACL(CassandraId cassandraId, MailboxACL mailboxACL) {
-        return updateAcl(cassandraId, acl -> new ACLWithVersion(acl.version, mailboxACL), mailboxACL)
-            .flatMap(aclDiff -> userMailboxRightsDAO.update(cassandraId, aclDiff)
-            .thenReturn(aclDiff))
-            .switchIfEmpty(Mono.defer(() -> Mono.error(new MailboxException("Unable to update ACL"))));
+        return doUpdateAcl(cassandraId, acl -> new ACLWithVersion(acl.version, mailboxACL), mailboxACL);
     }
 
-    private Mono<ACLDiff> updateAcl(CassandraId cassandraId, Function<ACLWithVersion, ACLWithVersion> aclTransformation, MailboxACL replacement) {
+    Mono<ACLDiff> doUpdateAcl(CassandraId cassandraId, Function<ACLWithVersion, ACLWithVersion> aclTransformation, MailboxACL replacement) {
         return getAclWithVersion(cassandraId)
             .flatMap(aclWithVersion ->
                     updateStoredACL(cassandraId, aclTransformation.apply(aclWithVersion))
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
index cda7f9f..7a6e1a8 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
@@ -19,211 +19,45 @@
 
 package org.apache.james.mailbox.cassandra.mail;
 
-import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
-
-import java.io.IOException;
-import java.util.function.Function;
-
 import javax.inject.Inject;
 
-import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
-import org.apache.james.backends.cassandra.init.configuration.CassandraConsistenciesConfiguration;
-import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.acl.ACLDiff;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
-import org.apache.james.mailbox.cassandra.json.MailboxACLJsonConverter;
-import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
-import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
 import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.exception.UnsupportedRightException;
 import org.apache.james.mailbox.model.MailboxACL;
-import org.apache.james.util.FunctionalUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.datastax.driver.core.ConsistencyLevel;
-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.fasterxml.jackson.core.JsonProcessingException;
 
 import reactor.core.publisher.Mono;
 
 public class CassandraACLMapper {
-    public static final int INITIAL_VALUE = 0;
-    private static final Logger LOG = LoggerFactory.getLogger(CassandraACLMapper.class);
-    private static final String OLD_VERSION = "oldVersion";
-
-    private final CassandraAsyncExecutor executor;
-    private final int maxAclRetry;
     private final CassandraUserMailboxRightsDAO userMailboxRightsDAO;
-    private final PreparedStatement conditionalInsertStatement;
-    private final PreparedStatement conditionalUpdateStatement;
-    private final PreparedStatement readStatement;
-    private final PreparedStatement deleteStatement;
-    private final ConsistencyLevel consistencyLevel;
+    private final CassandraACLDAO cassandraACLDAO;
 
     @Inject
-    public CassandraACLMapper(Session session, CassandraUserMailboxRightsDAO userMailboxRightsDAO,
-                              CassandraConfiguration cassandraConfiguration, CassandraConsistenciesConfiguration consistenciesConfiguration) {
-        this.executor = new CassandraAsyncExecutor(session);
-        this.maxAclRetry = cassandraConfiguration.getAclMaxRetry();
-        this.consistencyLevel = consistenciesConfiguration.getLightweightTransaction();
-        this.conditionalInsertStatement = prepareConditionalInsert(session);
-        this.conditionalUpdateStatement = prepareConditionalUpdate(session);
-        this.readStatement = prepareReadStatement(session);
-        this.deleteStatement = prepareDelete(session);
+    public CassandraACLMapper(CassandraUserMailboxRightsDAO userMailboxRightsDAO,
+                              CassandraACLDAO cassandraACLDAO) {
+        this.cassandraACLDAO = cassandraACLDAO;
         this.userMailboxRightsDAO = userMailboxRightsDAO;
     }
 
-    private PreparedStatement prepareDelete(Session session) {
-        return session.prepare(
-            QueryBuilder.delete().from(CassandraACLTable.TABLE_NAME)
-                .where(eq(CassandraACLTable.ID, bindMarker(CassandraACLTable.ID)))
-                .ifExists());
-    }
-
-    private PreparedStatement prepareConditionalInsert(Session session) {
-        return session.prepare(
-            insertInto(CassandraACLTable.TABLE_NAME)
-                .value(CassandraACLTable.ID, bindMarker(CassandraACLTable.ID))
-                .value(CassandraACLTable.ACL, bindMarker(CassandraACLTable.ACL))
-                .value(CassandraACLTable.VERSION, INITIAL_VALUE)
-                .ifNotExists());
-    }
-
-    private PreparedStatement prepareConditionalUpdate(Session session) {
-        return session.prepare(
-            update(CassandraACLTable.TABLE_NAME)
-                .where(eq(CassandraACLTable.ID, bindMarker(CassandraACLTable.ID)))
-                .with(set(CassandraACLTable.ACL, bindMarker(CassandraACLTable.ACL)))
-                .and(set(CassandraACLTable.VERSION, bindMarker(CassandraACLTable.VERSION)))
-                .onlyIf(eq(CassandraACLTable.VERSION, bindMarker(OLD_VERSION))));
-    }
-
-    private PreparedStatement prepareReadStatement(Session session) {
-        return session.prepare(
-            select(CassandraACLTable.ACL, CassandraACLTable.VERSION)
-                .from(CassandraACLTable.TABLE_NAME)
-                .where(eq(CassandraMailboxTable.ID, bindMarker(CassandraACLTable.ID))));
-    }
-
     public Mono<MailboxACL> getACL(CassandraId cassandraId) {
-        return getStoredACLRow(cassandraId)
-            .map(row -> getAcl(cassandraId, row));
-    }
-
-    private MailboxACL getAcl(CassandraId cassandraId, Row row) {
-        String serializedACL = row.getString(CassandraACLTable.ACL);
-        return deserializeACL(cassandraId, serializedACL);
+        return cassandraACLDAO.getACL(cassandraId);
     }
 
     public Mono<ACLDiff> updateACL(CassandraId cassandraId, MailboxACL.ACLCommand command) {
-        return Mono.fromCallable(() -> MailboxACL.EMPTY.apply(command))
-        .flatMap(replacement -> updateAcl(cassandraId, aclWithVersion -> aclWithVersion.apply(command), replacement))
+        return cassandraACLDAO.updateACL(cassandraId, command)
             .flatMap(aclDiff -> userMailboxRightsDAO.update(cassandraId, aclDiff)
             .thenReturn(aclDiff))
             .switchIfEmpty(Mono.error(new MailboxException("Unable to update ACL")));
     }
 
     public Mono<ACLDiff> setACL(CassandraId cassandraId, MailboxACL mailboxACL) {
-        return updateAcl(cassandraId, acl -> new ACLWithVersion(acl.version, mailboxACL), mailboxACL)
+        return cassandraACLDAO.setACL(cassandraId, mailboxACL)
             .flatMap(aclDiff -> userMailboxRightsDAO.update(cassandraId, aclDiff)
             .thenReturn(aclDiff))
             .switchIfEmpty(Mono.defer(() -> Mono.error(new MailboxException("Unable to update ACL"))));
     }
 
-    private Mono<ACLDiff> updateAcl(CassandraId cassandraId, Function<ACLWithVersion, ACLWithVersion> aclTransformation, MailboxACL replacement) {
-        return getAclWithVersion(cassandraId)
-            .flatMap(aclWithVersion ->
-                    updateStoredACL(cassandraId, aclTransformation.apply(aclWithVersion))
-                            .map(newACL -> ACLDiff.computeDiff(aclWithVersion.mailboxACL, newACL)))
-            .switchIfEmpty(insertACL(cassandraId, replacement)
-                    .map(newACL -> ACLDiff.computeDiff(MailboxACL.EMPTY, newACL)))
-            .single()
-            .retry(maxAclRetry);
-    }
-
-    private Mono<Row> getStoredACLRow(CassandraId cassandraId) {
-        return executor.executeSingleRow(
-            readStatement.bind()
-                .setUUID(CassandraACLTable.ID, cassandraId.asUuid())
-                .setConsistencyLevel(consistencyLevel));
-    }
-
-    private Mono<MailboxACL> updateStoredACL(CassandraId cassandraId, ACLWithVersion aclWithVersion) {
-        return executor.executeReturnApplied(
-            conditionalUpdateStatement.bind()
-                .setUUID(CassandraACLTable.ID, cassandraId.asUuid())
-                .setString(CassandraACLTable.ACL, convertAclToJson(aclWithVersion.mailboxACL))
-                .setLong(CassandraACLTable.VERSION, aclWithVersion.version + 1)
-                .setLong(OLD_VERSION, aclWithVersion.version))
-            .filter(FunctionalUtils.identityPredicate())
-            .map(any -> aclWithVersion.mailboxACL);
-    }
-
     public Mono<Void> delete(CassandraId cassandraId) {
-        return executor.executeVoid(
-            deleteStatement.bind()
-                .setUUID(CassandraACLTable.ID, cassandraId.asUuid()));
-    }
-
-    private Mono<MailboxACL> insertACL(CassandraId cassandraId, MailboxACL acl) {
-        return executor.executeReturnApplied(
-            conditionalInsertStatement.bind()
-                    .setUUID(CassandraACLTable.ID, cassandraId.asUuid())
-                    .setString(CassandraACLTable.ACL, convertAclToJson(acl)))
-            .filter(FunctionalUtils.identityPredicate())
-            .map(any -> acl);
-    }
-
-    private String convertAclToJson(MailboxACL acl) {
-        try {
-            return MailboxACLJsonConverter.toJson(acl);
-        } catch (JsonProcessingException exception) {
-            throw new RuntimeException(exception);
-        }
-    }
-
-    private Mono<ACLWithVersion> getAclWithVersion(CassandraId cassandraId) {
-        return getStoredACLRow(cassandraId)
-            .map(acl -> new ACLWithVersion(acl.getLong(CassandraACLTable.VERSION),
-                deserializeACL(cassandraId, acl.getString(CassandraACLTable.ACL))));
-    }
-
-    private MailboxACL deserializeACL(CassandraId cassandraId, String serializedACL) {
-        try {
-            return MailboxACLJsonConverter.toACL(serializedACL);
-        } catch (IOException exception) {
-            LOG.error("Unable to read stored ACL. " +
-                "We will use empty ACL instead." +
-                "Mailbox is {} ." +
-                "ACL is {}", cassandraId, serializedACL, exception);
-            return MailboxACL.EMPTY;
-        }
-    }
-
-    private static class ACLWithVersion {
-        private final long version;
-        private final MailboxACL mailboxACL;
-
-        public ACLWithVersion(long version, MailboxACL mailboxACL) {
-            this.version = version;
-            this.mailboxACL = mailboxACL;
-        }
-
-        public ACLWithVersion apply(MailboxACL.ACLCommand command) {
-            try {
-                return new ACLWithVersion(version, mailboxACL.apply(command));
-            } catch (UnsupportedRightException exception) {
-                throw new RuntimeException(exception);
-            }
-        }
+        return cassandraACLDAO.delete(cassandraId);
     }
 }
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
index 5552bda..919f9a7 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
@@ -44,6 +44,7 @@ import org.apache.james.mailbox.MessageManager.AppendResult;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
+import org.apache.james.mailbox.cassandra.mail.CassandraACLDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2;
@@ -788,10 +789,10 @@ public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMai
 
         private CassandraACLMapper aclMapper(CassandraCluster cassandraCluster) {
             return new CassandraACLMapper(
-                cassandraCluster.getConf(),
                 rightsDAO(cassandraCluster),
-                CassandraConfiguration.DEFAULT_CONFIGURATION,
-                cassandra.getCassandraConsistenciesConfiguration());
+                new CassandraACLDAO(cassandraCluster.getConf(),
+                    CassandraConfiguration.DEFAULT_CONFIGURATION,
+                    cassandra.getCassandraConsistenciesConfiguration()));
         }
 
         private CassandraUserMailboxRightsDAO rightsDAO(CassandraCluster cassandraCluster) {
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
index 8f2486b..0dfd6bc 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
@@ -240,10 +240,10 @@ class CassandraACLMapperTest {
     private Future<Boolean> performACLUpdateInExecutor(CassandraCluster cassandra, ExecutorService executor, MailboxACL.EntryKey key, MailboxACL.Rfc4314Rights rights) {
         return executor.submit(() -> {
             CassandraACLMapper aclMapper = new CassandraACLMapper(
-                cassandra.getConf(),
                 new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION),
-                CassandraConfiguration.DEFAULT_CONFIGURATION,
-                cassandraCluster.getCassandraConsistenciesConfiguration());
+                new CassandraACLDAO(cassandra.getConf(),
+                    CassandraConfiguration.DEFAULT_CONFIGURATION,
+                    cassandraCluster.getCassandraConsistenciesConfiguration()));
 
             aclMapper.updateACL(MAILBOX_ID, MailboxACL.command().key(key).rights(rights).asAddition()).block();
             return true;
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
index a2a8f30..5df1a7b 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
@@ -102,10 +102,10 @@ class CassandraMailboxMapperTest {
         mailboxPathV3DAO = new CassandraMailboxPathV3DAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION, cassandraCluster.getCassandraConsistenciesConfiguration());
         CassandraUserMailboxRightsDAO userMailboxRightsDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         CassandraACLMapper aclMapper = new CassandraACLMapper(
-            cassandra.getConf(),
             new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION),
-            CassandraConfiguration.DEFAULT_CONFIGURATION,
-            cassandraCluster.getCassandraConsistenciesConfiguration());
+            new CassandraACLDAO(cassandra.getConf(),
+                CassandraConfiguration.DEFAULT_CONFIGURATION,
+                cassandraCluster.getCassandraConsistenciesConfiguration()));
         versionDAO = new CassandraSchemaVersionDAO(cassandra.getConf());
 
         versionDAO.truncateVersion()
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
index 6a4ef9f..9979833 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
@@ -31,6 +31,7 @@ import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManage
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
+import org.apache.james.mailbox.cassandra.mail.CassandraACLDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraIdAndPath;
 import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
@@ -99,10 +100,11 @@ class MailboxPathV2MigrationTest {
             daoV3,
             userMailboxRightsDAO,
             new CassandraACLMapper(
-                cassandra.getConf(),
                 userMailboxRightsDAO,
-                CassandraConfiguration.DEFAULT_CONFIGURATION,
-                cassandraCluster.getCassandraConsistenciesConfiguration()),
+                new CassandraACLDAO(
+                    cassandra.getConf(),
+                    CassandraConfiguration.DEFAULT_CONFIGURATION,
+                    cassandraCluster.getCassandraConsistenciesConfiguration())),
             new CassandraSchemaVersionManager(new CassandraSchemaVersionDAO(cassandra.getConf())),
             CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index 09bf632..9427145 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -41,6 +41,7 @@ import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
 import org.apache.james.mailbox.cassandra.DeleteMessageListener;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
+import org.apache.james.mailbox.cassandra.mail.CassandraACLDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2;
@@ -121,6 +122,7 @@ public class CassandraMailboxModule extends AbstractModule {
         bind(CassandraFirstUnseenDAO.class).in(Scopes.SINGLETON);
         bind(CassandraMailboxCounterDAO.class).in(Scopes.SINGLETON);
         bind(CassandraMailboxDAO.class).in(Scopes.SINGLETON);
+        bind(CassandraACLDAO.class).in(Scopes.SINGLETON);
         bind(CassandraMailboxPathDAOImpl.class).in(Scopes.SINGLETON);
         bind(CassandraMailboxPathV2DAO.class).in(Scopes.SINGLETON);
         bind(CassandraMailboxPathV3DAO.class).in(Scopes.SINGLETON);


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