You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2017/07/06 12:13:07 UTC

[01/15] james-project git commit: JAMES-2090 Delete unused class

Repository: james-project
Updated Branches:
  refs/heads/master 1128983f4 -> 1dafd8849


JAMES-2090 Delete unused class


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/96facc5b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/96facc5b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/96facc5b

Branch: refs/heads/master
Commit: 96facc5b0a850660e4bab8c413fb3a651ba21af6
Parents: 02d86a4
Author: benwa <bt...@linagora.com>
Authored: Tue Jul 4 17:01:07 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Jul 5 11:36:16 2017 +0700

----------------------------------------------------------------------
 ...essageDeletedDuringFlagsUpdateException.java | 30 --------------------
 1 file changed, 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/96facc5b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MessageDeletedDuringFlagsUpdateException.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MessageDeletedDuringFlagsUpdateException.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MessageDeletedDuringFlagsUpdateException.java
deleted file mode 100644
index 7573830..0000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MessageDeletedDuringFlagsUpdateException.java
+++ /dev/null
@@ -1,30 +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.mailbox.cassandra.mail.utils;
-
-import org.apache.james.mailbox.cassandra.CassandraId;
-import org.apache.james.mailbox.cassandra.CassandraMessageId;
-
-public class MessageDeletedDuringFlagsUpdateException extends RuntimeException {
-
-    public MessageDeletedDuringFlagsUpdateException(CassandraId id, CassandraMessageId messageId) {
-        super("Can not perform flag update as message was deleted for mailbox " + id.serialize() + " and message " + messageId.serialize());
-    }
-}


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


[08/15] james-project git commit: JAMES-2090 Document the new properties on the website

Posted by ad...@apache.org.
JAMES-2090 Document the new properties on the website


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0b7b2087
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0b7b2087
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0b7b2087

Branch: refs/heads/master
Commit: 0b7b20870b74b8f857d63b2381fb9fb044ad8455
Parents: 5914a83
Author: benwa <bt...@linagora.com>
Authored: Wed Jul 5 11:25:39 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:48:54 2017 +0700

----------------------------------------------------------------------
 src/site/xdoc/server/config-cassandra.xml | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0b7b2087/src/site/xdoc/server/config-cassandra.xml
----------------------------------------------------------------------
diff --git a/src/site/xdoc/server/config-cassandra.xml b/src/site/xdoc/server/config-cassandra.xml
index d0b8e35..bf9fb90 100644
--- a/src/site/xdoc/server/config-cassandra.xml
+++ b/src/site/xdoc/server/config-cassandra.xml
@@ -93,6 +93,24 @@
         <dd>Optional.
           If specified defines the Cassandra <a href="http://docs.datastax.com/en/developer/java-driver/2.1/manual/pooling/">Specify heartbeat timeout</a></dd>
 
+        <dt><strong>mailbox.max.retry.acl</strong></dt>
+        <dd>Optional. Defaults to 1000.<br/> Controls the number of retries upon Cassandra ACL updates.</dd>
+        <dt><strong>mailbox.max.retry.modseq</strong></dt>
+        <dd>Optional. Defaults to 100000.<br/> Controls the number of retries upon Cassandra ModSeq generation.</dd>
+        <dt><strong>mailbox.max.retry.uid</strong></dt>
+        <dd>Optional. Defaults to 100000.<br/> Controls the number of retries upon Cassandra Uid generation.</dd>
+        <dt><strong>mailbox.max.retry.message.flags.update</strong></dt>
+        <dd>Optional. Defaults to 1000.<br/> Controls the number of retries upon Cassandra flags update, in MessageMapper.</dd>
+        <dt><strong>mailbox.max.retry.message.id.flags.update</strong></dt>
+        <dd>Optional. Defaults to 1000.<br/> Controls the number of retries upon Cassandra flags update, in MessageIdMapper.</dd>
+        <dt><strong>fetch.advance.row.count</strong></dt>
+        <dd>Optional. Defaults to 1000.<br/> Controls the number of remaining rows we should wait before prefetch when paging.</dd>
+        <dt><strong>chunk.size.flags.update</strong></dt>
+        <dd>Optional. Defaults to 20.<br/> Controls the number of messages flags updates to be performed concurently by MessageMapper.</dd>
+        <dt><strong>chunk.size.message.read</strong></dt>
+        <dd>Optional. Defaults to 100.<br/> Controls the number of messages to be retrieved in parallel.</dd>
+        <dt><strong>chunk.size.expunge</strong></dt>
+        <dd>Optional. Defaults to 100.<br/> Controls the number of messages to be expunged in parallel.</dd>
       </dl>
 
 


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


[06/15] james-project git commit: JAMES-2090 Because default configuration should be provided CassandraSessionConfiguration can not throw FileNotFound

Posted by ad...@apache.org.
JAMES-2090 Because default configuration should be provided CassandraSessionConfiguration can not throw FileNotFound


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/35ab6bd0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/35ab6bd0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/35ab6bd0

Branch: refs/heads/master
Commit: 35ab6bd0743dba618c63a963959aca756d237676
Parents: 0daadc6
Author: benwa <bt...@linagora.com>
Authored: Wed Jul 5 10:53:26 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:28:30 2017 +0700

----------------------------------------------------------------------
 .../james/modules/mailbox/CassandraSessionConfiguration.java     | 4 +---
 .../org/apache/james/modules/mailbox/CassandraSessionModule.java | 2 +-
 2 files changed, 2 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/35ab6bd0/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionConfiguration.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionConfiguration.java
index 29c3ea3..33c755c 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionConfiguration.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionConfiguration.java
@@ -19,13 +19,11 @@
 
 package org.apache.james.modules.mailbox;
 
-import java.io.FileNotFoundException;
-
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.PropertiesConfiguration;
 
 public interface CassandraSessionConfiguration {
 
-    PropertiesConfiguration getConfiguration() throws FileNotFoundException, ConfigurationException;
+    PropertiesConfiguration getConfiguration() throws ConfigurationException;
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/35ab6bd0/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index 9d5ca75..f20aa98 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -130,7 +130,7 @@ public class CassandraSessionModule extends AbstractModule {
 
     @Provides
     @Singleton
-    Cluster provideCluster(CassandraSessionConfiguration cassandraSessionConfiguration, AsyncRetryExecutor executor) throws FileNotFoundException, ConfigurationException, ExecutionException, InterruptedException {
+    Cluster provideCluster(CassandraSessionConfiguration cassandraSessionConfiguration, AsyncRetryExecutor executor) throws ConfigurationException, ExecutionException, InterruptedException {
         PropertiesConfiguration configuration = cassandraSessionConfiguration.getConfiguration();
         List<Host> servers = listCassandraServers(configuration);
         QueryLoggerConfiguration queryLoggerConfiguration = getCassandraQueryLoggerConf(configuration);


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


[09/15] james-project git commit: JAMES-2090 All classes in data-cassandra should match our coding standard

Posted by ad...@apache.org.
JAMES-2090 All classes in data-cassandra should match our coding standard

Async, CassandraUtils (for prefetch), preparedStatements


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/366023f4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/366023f4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/366023f4

Branch: refs/heads/master
Commit: 366023f4247216c2db15be5863d9b32dccf38cee
Parents: 0b7b208
Author: benwa <bt...@linagora.com>
Authored: Wed Jul 5 13:41:39 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:48:54 2017 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraDomainList.java          |  81 +++++++++----
 .../CassandraRecipientRewriteTable.java         | 105 ++++++++++++-----
 .../cassandra/CassandraUsersRepository.java     | 116 +++++++++++++------
 .../CassandraUsersRepositoryModule.java         |   3 +-
 .../CassandraRecipientRewriteTableTest.java     |   4 +-
 .../james/rrt/cassandra/CassandraStepdefs.java  |   4 +-
 6 files changed, 214 insertions(+), 99 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/366023f4/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
index fbee908..c49956c 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
@@ -19,6 +19,10 @@
 
 package org.apache.james.domainlist.cassandra;
 
+import static org.apache.james.domainlist.cassandra.tables.CassandraDomainsTable.TABLE_NAME;
+import static org.apache.james.domainlist.cassandra.tables.CassandraDomainsTable.DOMAIN;
+
+import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.delete;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
@@ -26,29 +30,59 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 
 import java.util.List;
 import java.util.Locale;
-import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
-import org.apache.james.backends.cassandra.utils.CassandraConstants;
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.domainlist.lib.AbstractDomainList;
-import org.apache.james.domainlist.cassandra.tables.CassandraDomainsTable;
 
-import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
+import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 
 public class CassandraDomainList extends AbstractDomainList {
-
-    private final Session session;
+    private final CassandraAsyncExecutor executor;
     private final CassandraUtils cassandraUtils;
+    private final PreparedStatement readAllStatement;
+    private final PreparedStatement readStatement;
+    private final PreparedStatement insertStatement;
+    private final PreparedStatement removeStatement;
 
     @Inject
     public CassandraDomainList(Session session, CassandraUtils cassandraUtils) {
-        this.session = session;
+        this.executor = new CassandraAsyncExecutor(session);
         this.cassandraUtils = cassandraUtils;
+        this.readAllStatement = prepareReadAllStatement(session);
+        this.readStatement = prepareReadStatement(session);
+        this.insertStatement = prepareInsertStatement(session);
+        this.removeStatement = prepareRemoveStatement(session);
+    }
+
+    private PreparedStatement prepareRemoveStatement(Session session) {
+        return session.prepare(delete()
+            .from(TABLE_NAME)
+            .ifExists()
+            .where(eq(DOMAIN, bindMarker(DOMAIN))));
+    }
+
+    private PreparedStatement prepareInsertStatement(Session session) {
+        return session.prepare(insertInto(TABLE_NAME)
+            .ifNotExists()
+            .value(DOMAIN, bindMarker(DOMAIN)));
+    }
+
+    private PreparedStatement prepareReadStatement(Session session) {
+        return session.prepare(select(DOMAIN)
+            .from(TABLE_NAME)
+            .where(eq(DOMAIN, bindMarker(DOMAIN))));
+    }
+
+    private PreparedStatement prepareReadAllStatement(Session session) {
+        return session.prepare(select(DOMAIN)
+            .from(TABLE_NAME));
     }
 
     @VisibleForTesting
@@ -58,26 +92,26 @@ public class CassandraDomainList extends AbstractDomainList {
 
     @Override
     protected List<String> getDomainListInternal() throws DomainListException {
-        return cassandraUtils.convertToStream(session.execute(select(CassandraDomainsTable.DOMAIN).from(CassandraDomainsTable.TABLE_NAME)))
-            .map(row -> row.getString(CassandraDomainsTable.DOMAIN))
-            .collect(Collectors.toList());
+        return executor.execute(readAllStatement.bind())
+            .thenApply(resultSet -> cassandraUtils.convertToStream(resultSet)
+                .map(row -> row.getString(DOMAIN))
+                .collect(Guavate.toImmutableList()))
+            .join();
     }
 
     @Override
     public boolean containsDomain(String domain) throws DomainListException {
-        return session.execute(select(CassandraDomainsTable.DOMAIN)
-            .from(CassandraDomainsTable.TABLE_NAME)
-            .where(eq(CassandraDomainsTable.DOMAIN, domain.toLowerCase(Locale.US))))
-            .one() != null;
+        return executor.executeSingleRow(readStatement.bind()
+                .setString(DOMAIN, domain.toLowerCase(Locale.US)))
+            .join()
+            .isPresent();
     }
 
     @Override
     public void addDomain(String domain) throws DomainListException {
-        boolean executed = session.execute(insertInto(CassandraDomainsTable.TABLE_NAME)
-            .ifNotExists()
-            .value(CassandraDomainsTable.DOMAIN, domain.toLowerCase(Locale.US)))
-            .one()
-            .getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED);
+        boolean executed = executor.executeReturnApplied(insertStatement.bind()
+            .setString(DOMAIN, domain.toLowerCase(Locale.US)))
+            .join();
         if (!executed) {
             throw new DomainListException(domain.toLowerCase(Locale.US) + " already exists.");
         }
@@ -85,11 +119,10 @@ public class CassandraDomainList extends AbstractDomainList {
 
     @Override
     public void removeDomain(String domain) throws DomainListException {
-        ResultSet resultSet = session.execute(delete()
-            .from(CassandraDomainsTable.TABLE_NAME)
-            .ifExists()
-            .where(eq(CassandraDomainsTable.DOMAIN, domain.toLowerCase(Locale.US))));
-        if (!resultSet.one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED)) {
+        boolean executed = executor.executeReturnApplied(removeStatement.bind()
+            .setString(DOMAIN, domain.toLowerCase(Locale.US)))
+            .join();
+        if (!executed) {
             throw new DomainListException(domain + " was not found");
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/366023f4/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
index ad9ba4b..86e2b4d 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.rrt.cassandra;
 
+import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.delete;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
@@ -29,44 +30,83 @@ import static org.apache.james.rrt.cassandra.tables.CassandraRecipientRewriteTab
 
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
-import javax.annotation.Resource;
 import javax.inject.Inject;
 
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.rrt.lib.MappingsImpl;
 
+import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
+import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Optional;
 
 public class CassandraRecipientRewriteTable extends AbstractRecipientRewriteTable {
 
-    private Session session;
+    private final CassandraAsyncExecutor executor;
+    private final CassandraUtils cassandraUtils;
+    private final PreparedStatement insertStatement;
+    private final PreparedStatement deleteStatement;
+    private final PreparedStatement retrieveMappingStatement;
+    private final PreparedStatement retrieveAllMappingsStatement;
 
     @Inject
-    @Resource
-    public void setSession(Session session) {
-        this.session = session;
+    public CassandraRecipientRewriteTable(Session session, CassandraUtils cassandraUtils) {
+        this.executor = new CassandraAsyncExecutor(session);
+        this.cassandraUtils = cassandraUtils;
+        this.insertStatement = prepareInsertStatement(session);
+        this.deleteStatement = prepareDelete(session);
+        this.retrieveMappingStatement = prepareRetrieveMappingStatement(session);
+        this.retrieveAllMappingsStatement = prepareRetrieveAllMappingStatement(session);
+    }
+
+    private PreparedStatement prepareRetrieveAllMappingStatement(Session session) {
+        return session.prepare(select(USER, DOMAIN, MAPPING)
+            .from(TABLE_NAME));
+    }
+
+    private PreparedStatement prepareRetrieveMappingStatement(Session session) {
+        return session.prepare(select(MAPPING)
+            .from(TABLE_NAME)
+            .where(eq(USER, bindMarker(USER)))
+            .and(eq(DOMAIN, bindMarker(DOMAIN))));
+    }
+
+    private PreparedStatement prepareDelete(Session session) {
+        return session.prepare(delete()
+            .from(TABLE_NAME)
+            .where(eq(USER, bindMarker(USER)))
+            .and(eq(DOMAIN, bindMarker(DOMAIN)))
+            .and(eq(MAPPING, bindMarker(MAPPING))));
+    }
+
+    private PreparedStatement prepareInsertStatement(Session session) {
+        return session.prepare(insertInto(TABLE_NAME)
+            .value(USER, bindMarker(USER))
+            .value(DOMAIN, bindMarker(DOMAIN))
+            .value(MAPPING, bindMarker(MAPPING)));
     }
 
     @Override
     protected void addMappingInternal(String user, String domain, String mapping) throws RecipientRewriteTableException {
-        session.execute(insertInto(TABLE_NAME)
-            .value(USER, getFixedUser(user))
-            .value(DOMAIN, getFixedDomain(domain))
-            .value(MAPPING, mapping));
+        executor.executeVoid(insertStatement.bind()
+            .setString(USER, getFixedUser(user))
+            .setString(DOMAIN, getFixedDomain(domain))
+            .setString(MAPPING, mapping))
+            .join();
     }
 
     @Override
     protected void removeMappingInternal(String user, String domain, String mapping) throws RecipientRewriteTableException {
-        session.execute(delete()
-            .from(TABLE_NAME)
-            .where(eq(USER, getFixedUser(user)))
-            .and(eq(DOMAIN, getFixedDomain(domain)))
-            .and(eq(MAPPING, mapping)));
+        executor.executeVoid(deleteStatement.bind()
+                .setString(USER, getFixedUser(user))
+                .setString(DOMAIN, getFixedDomain(domain))
+                .setString(MAPPING, mapping))
+            .join();
     }
 
     @Override
@@ -76,28 +116,27 @@ public class CassandraRecipientRewriteTable extends AbstractRecipientRewriteTabl
     }
 
     private Optional<Mappings> retrieveMappings(String user, String domain) {
-        List<String> mappings = session.execute(select(MAPPING)
-                .from(TABLE_NAME)
-                .where(eq(USER, getFixedUser(user)))
-                .and(eq(DOMAIN, getFixedDomain(domain))))
-            .all()
-            .stream()
-            .map(row -> row.getString(MAPPING))
-            .collect(Collectors.toList());
+        List<String> mappings = executor.execute(retrieveMappingStatement.bind()
+            .setString(USER, getFixedUser(user))
+            .setString(DOMAIN, getFixedDomain(domain)))
+            .thenApply(resultSet -> cassandraUtils.convertToStream(resultSet)
+                .map(row -> row.getString(MAPPING))
+                .collect(Guavate.toImmutableList()))
+            .join();
 
         return MappingsImpl.fromCollection(mappings).toOptional();
     }
 
     @Override
     protected Map<String, Mappings> getAllMappingsInternal() throws RecipientRewriteTableException {
-        Map<String, Mappings> map = session.execute(select(USER, DOMAIN, MAPPING)
-            .from(TABLE_NAME))
-            .all()
-            .stream()
-            .map(row -> new UserMapping(row.getString(USER), row.getString(DOMAIN), row.getString(MAPPING)))
-            .collect(Collectors.toMap(UserMapping::asKey, 
-                    userMapping -> MappingsImpl.fromRawString(userMapping.getMapping()),
-                    (first, second) -> first.union(second)));
+        Map<String, Mappings> map = executor.execute(retrieveAllMappingsStatement.bind())
+            .thenApply(resultSet -> cassandraUtils.convertToStream(resultSet)
+                .map(row -> new UserMapping(row.getString(USER), row.getString(DOMAIN), row.getString(MAPPING)))
+                .collect(Guavate.toImmutableMap(
+                    UserMapping::asKey,
+                    UserMapping::toMapping,
+                    Mappings::union)))
+            .join();
         return map.isEmpty() ? null : map;
     }
 
@@ -125,6 +164,10 @@ public class CassandraRecipientRewriteTable extends AbstractRecipientRewriteTabl
             return mapping;
         }
 
+        public Mappings toMapping() {
+            return MappingsImpl.fromRawString(getMapping());
+        }
+
         public String asKey() {
             return getUser() + "@" + getDomain();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/366023f4/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
index f7b9251..028accb 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.user.cassandra;
 
+import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.delete;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
@@ -35,10 +36,9 @@ import java.util.Iterator;
 import java.util.Locale;
 import java.util.Optional;
 
-import javax.annotation.Resource;
 import javax.inject.Inject;
 
-import org.apache.james.backends.cassandra.utils.CassandraConstants;
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.user.api.AlreadyExistInUsersRepositoryException;
 import org.apache.james.user.api.UsersRepositoryException;
@@ -46,6 +46,7 @@ import org.apache.james.user.api.model.User;
 import org.apache.james.user.lib.AbstractUsersRepository;
 import org.apache.james.user.lib.model.DefaultUser;
 
+import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Session;
 import com.google.common.base.Preconditions;
@@ -55,21 +56,68 @@ public class CassandraUsersRepository extends AbstractUsersRepository {
 
     private static final String DEFAULT_ALGO_VALUE = "SHA1";
 
-    private final Session session;
+    private final CassandraAsyncExecutor executor;
     private final CassandraUtils cassandraUtils;
+    private final PreparedStatement getUserStatement;
+    private final PreparedStatement updateUserStatement;
+    private final PreparedStatement removeUserStatement;
+    private final PreparedStatement countUserStatement;
+    private final PreparedStatement listStatement;
+    private final PreparedStatement insertStatement;
 
     @Inject
     public CassandraUsersRepository(Session session, CassandraUtils cassandraUtils) {
-        this.session = session;
+        this.executor = new CassandraAsyncExecutor(session);
         this.cassandraUtils = cassandraUtils;
+        this.getUserStatement = prepareGetUserStatement(session);
+        this.updateUserStatement = prepareUpdateUserStatement(session);
+        this.removeUserStatement = prepareRemoveUserStatement(session);
+        this.countUserStatement = prepareCountStatement(session);
+        this.listStatement = prepareListStatement(session);
+        this.insertStatement = session.prepare(insertInto(TABLE_NAME)
+            .value(NAME, bindMarker(NAME))
+            .value(REALNAME, bindMarker(REALNAME))
+            .value(PASSWORD, bindMarker(PASSWORD))
+            .value(ALGORITHM, bindMarker(ALGORITHM))
+            .ifNotExists());
     }
-    
+
+    private PreparedStatement prepareListStatement(Session session) {
+        return session.prepare(select(REALNAME)
+            .from(TABLE_NAME));
+    }
+
+    private PreparedStatement prepareCountStatement(Session session) {
+        return session.prepare(select().countAll().from(TABLE_NAME));
+    }
+
+    private PreparedStatement prepareRemoveUserStatement(Session session) {
+        return session.prepare( delete()
+            .from(TABLE_NAME)
+            .where(eq(NAME, bindMarker(NAME)))
+            .ifExists());
+    }
+
+    private PreparedStatement prepareUpdateUserStatement(Session session) {
+        return session.prepare(update(TABLE_NAME)
+            .with(set(REALNAME, bindMarker(REALNAME)))
+            .and(set(PASSWORD, bindMarker(PASSWORD)))
+            .and(set(ALGORITHM, bindMarker(ALGORITHM)))
+            .where(eq(NAME, bindMarker(NAME)))
+            .ifExists());
+    }
+
+    private PreparedStatement prepareGetUserStatement(Session session) {
+        return session.prepare(select(REALNAME, PASSWORD, ALGORITHM)
+            .from(TABLE_NAME)
+            .where(eq(NAME, bindMarker(NAME))));
+    }
+
     @Override
     public User getUserByName(String name){
-        ResultSet result = session.execute(
-                select(REALNAME, PASSWORD, ALGORITHM)
-                .from(TABLE_NAME)
-                .where(eq(NAME, name.toLowerCase(Locale.US))));
+        ResultSet result = executor.execute(getUserStatement.bind()
+            .setString(NAME, name.toLowerCase(Locale.US)))
+            .join();
         return Optional.ofNullable(result.one())
             .map(row -> new DefaultUser(row.getString(REALNAME), row.getString(PASSWORD), row.getString(ALGORITHM)))
             .filter(user -> user.getUserName().equals(name))
@@ -80,15 +128,13 @@ public class CassandraUsersRepository extends AbstractUsersRepository {
     public void updateUser(User user) throws UsersRepositoryException {
         Preconditions.checkArgument(user instanceof DefaultUser);
         DefaultUser defaultUser = (DefaultUser) user;
-        boolean executed = session.execute(
-                update(TABLE_NAME)
-                    .with(set(REALNAME, defaultUser.getUserName()))
-                    .and(set(PASSWORD, defaultUser.getHashedPassword()))
-                    .and(set(ALGORITHM, defaultUser.getHashAlgorithm()))
-                    .where(eq(NAME, defaultUser.getUserName().toLowerCase(Locale.US)))
-                    .ifExists())
-                .one()
-                .getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED);
+        boolean executed = executor.executeReturnApplied(
+                updateUserStatement.bind()
+                    .setString(REALNAME, defaultUser.getUserName())
+                    .setString(PASSWORD, defaultUser.getHashedPassword())
+                    .setString(ALGORITHM, defaultUser.getHashAlgorithm())
+                    .setString(NAME, defaultUser.getUserName().toLowerCase(Locale.US)))
+            .join();
 
         if (!executed) {
             throw new UsersRepositoryException("Unable to update user");
@@ -97,13 +143,10 @@ public class CassandraUsersRepository extends AbstractUsersRepository {
 
     @Override
     public void removeUser(String name) throws UsersRepositoryException {
-        boolean executed = session.execute(
-            delete()
-                .from(TABLE_NAME)
-                .where(eq(NAME, name))
-                .ifExists())
-            .one()
-            .getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED);
+        boolean executed = executor.executeReturnApplied(
+            removeUserStatement.bind()
+                .setString(NAME, name))
+            .join();
 
         if (!executed) {
             throw new UsersRepositoryException("unable to remove unknown user " + name);
@@ -124,15 +167,14 @@ public class CassandraUsersRepository extends AbstractUsersRepository {
 
     @Override
     public int countUsers() throws UsersRepositoryException {
-        ResultSet result = session.execute(select().countAll().from(TABLE_NAME));
+        ResultSet result = executor.execute(countUserStatement.bind()).join();
         return Ints.checkedCast(result.one().getLong(0));
     }
 
     @Override
     public Iterator<String> list() throws UsersRepositoryException {
-        ResultSet result = session.execute(
-                select(REALNAME)
-                .from(TABLE_NAME));
+        ResultSet result = executor.execute(listStatement.bind())
+            .join();
         return cassandraUtils.convertToStream(result)
             .map(row -> row.getString(REALNAME))
             .iterator();
@@ -148,15 +190,13 @@ public class CassandraUsersRepository extends AbstractUsersRepository {
     protected void doAddUser(String username, String password) throws UsersRepositoryException {
         DefaultUser user = new DefaultUser(username, DEFAULT_ALGO_VALUE);
         user.setPassword(password);
-        boolean executed = session.execute(
-            insertInto(TABLE_NAME)
-                .value(NAME, user.getUserName().toLowerCase(Locale.US))
-                .value(REALNAME, user.getUserName())
-                .value(PASSWORD, user.getHashedPassword())
-                .value(ALGORITHM, user.getHashAlgorithm())
-                .ifNotExists())
-            .one()
-            .getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED);
+        boolean executed = executor.executeReturnApplied(
+            insertStatement.bind()
+                .setString(NAME, user.getUserName().toLowerCase(Locale.US))
+                .setString(REALNAME, user.getUserName())
+                .setString(PASSWORD, user.getHashedPassword())
+                .setString(ALGORITHM, user.getHashAlgorithm()))
+            .join();
 
         if (!executed) {
             throw new AlreadyExistInUsersRepositoryException("User with username " + username + " already exist!");

http://git-wip-us.apache.org/repos/asf/james-project/blob/366023f4/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
index 74a3469..db7a337 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
@@ -44,8 +44,7 @@ public class CassandraUsersRepositoryModule implements CassandraModule {
                         .addPartitionKey(CassandraUserTable.NAME, text())
                         .addColumn(CassandraUserTable.REALNAME, text())
                         .addColumn(CassandraUserTable.PASSWORD, text())
-                        .addColumn(CassandraUserTable.ALGORITHM, text()))
-                    );
+                        .addColumn(CassandraUserTable.ALGORITHM, text())));
         types = ImmutableList.of();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/366023f4/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
index 60068e5..525eb2a 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
@@ -20,6 +20,7 @@ package org.apache.james.rrt.cassandra;
 
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
 import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest;
@@ -50,8 +51,7 @@ public class CassandraRecipientRewriteTableTest extends AbstractRecipientRewrite
 
     @Override
     protected AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
-        CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable();
-        rrt.setSession(cassandra.getConf());
+        CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(cassandra.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
         rrt.setLog(LoggerFactory.getLogger("MockLog"));
         rrt.configure(new DefaultConfigurationBuilder());
         return rrt;

http://git-wip-us.apache.org/repos/asf/james-project/blob/366023f4/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
index 6f25a92..61dc4a8 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
@@ -20,6 +20,7 @@ package org.apache.james.rrt.cassandra;
 
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
 import org.apache.james.rrt.lib.RewriteTablesStepdefs;
 import org.slf4j.LoggerFactory;
@@ -51,8 +52,7 @@ public class CassandraStepdefs {
     }
 
     private AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
-        CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable();
-        rrt.setSession(cassandra.getConf());
+        CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(cassandra.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
         rrt.setLog(LoggerFactory.getLogger("MockLog"));
         rrt.configure(new DefaultConfigurationBuilder());
         return rrt;


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


[05/15] james-project git commit: JAMES-2090 Cassandra guice should Inject CassandraConfiguration

Posted by ad...@apache.org.
JAMES-2090 Cassandra guice should Inject CassandraConfiguration


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0daadc62
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0daadc62
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0daadc62

Branch: refs/heads/master
Commit: 0daadc62d2ac1b1371b5a9061f9e1b4b3f67cf15
Parents: 29fb5d3
Author: benwa <bt...@linagora.com>
Authored: Thu Jul 6 08:27:18 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:28:26 2017 +0700

----------------------------------------------------------------------
 backends-common/cassandra/pom.xml               |   6 +
 .../cassandra/CassandraConfiguration.java       | 223 ++++++++++++++++++
 .../cassandra/utils/CassandraUtils.java         |  21 +-
 .../cassandra/CassandraConfigurationTest.java   | 225 +++++++++++++++++++
 .../CassandraMailboxSessionMapperFactory.java   |  28 +--
 .../CassandraMailboxPathRegisterMapper.java     |   6 +-
 .../cassandra/mail/CassandraACLMapper.java      |  10 +-
 .../mail/CassandraAnnotationMapper.java         |  26 ++-
 .../mail/CassandraDeletedMessageDAO.java        |  17 +-
 .../cassandra/mail/CassandraMailboxDAO.java     |  22 +-
 .../cassandra/mail/CassandraMailboxMapper.java  |   9 +-
 .../cassandra/mail/CassandraMailboxPathDAO.java |  12 +-
 .../mail/CassandraMailboxRecentsDAO.java        |  12 +-
 .../cassandra/mail/CassandraMessageDAO.java     |  14 +-
 .../cassandra/mail/CassandraMessageIdDAO.java   |  12 +-
 .../mail/CassandraMessageIdMapper.java          |   9 +-
 .../mail/CassandraMessageIdToImapUidDAO.java    |  12 +-
 .../cassandra/mail/CassandraMessageMapper.java  |  17 +-
 .../cassandra/mail/CassandraModSeqProvider.java |  18 +-
 .../cassandra/mail/CassandraUidProvider.java    |  18 +-
 .../user/CassandraSubscriptionMapper.java       |   8 +-
 .../CassandraMailboxManagerProvider.java        |   3 +-
 .../cassandra/CassandraTestSystemFixture.java   |   3 +-
 ...istributedMailboxDelegatingListenerTest.java |   4 +
 ...CassandraMailboxPathRegistrerMapperTest.java |  11 +-
 .../cassandra/mail/CassandraACLMapperTest.java  |  18 +-
 .../cassandra/mail/CassandraMailboxDAOTest.java |   3 +-
 .../CassandraMailboxManagerAttachmentTest.java  |   4 +-
 .../CassandraMailboxMapperConcurrencyTest.java  |   6 +-
 .../mail/CassandraMailboxMapperTest.java        |   8 +-
 .../cassandra/mail/CassandraMapperProvider.java |   2 +-
 .../mail/CassandraModSeqProviderTest.java       |   7 +-
 .../mail/CassandraUidProviderTest.java          |   7 +-
 .../user/CassandraSubscriptionMapperTest.java   |   3 +-
 .../cassandra/host/CassandraHostSystem.java     |   3 +-
 .../cassandra/host/CassandraHostSystem.java     |   4 +-
 .../modules/mailbox/CassandraMailboxModule.java |   4 -
 .../modules/mailbox/CassandraSessionModule.java |   5 +
 .../cassandra/CassandraDomainList.java          |  16 +-
 .../cassandra/CassandraUsersRepository.java     |   9 +-
 .../cassandra/CassandraDomainListTest.java      |   3 +-
 .../cassandra/CassandraUsersRepositoryTest.java |   5 +-
 42 files changed, 695 insertions(+), 158 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/backends-common/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/pom.xml b/backends-common/cassandra/pom.xml
index 4eaec71..6810208 100644
--- a/backends-common/cassandra/pom.xml
+++ b/backends-common/cassandra/pom.xml
@@ -168,6 +168,12 @@
                     <version>${assertj-3.version}</version>
                     <scope>test</scope>
                 </dependency>
+                <dependency>
+                    <groupId>nl.jqno.equalsverifier</groupId>
+                    <artifactId>equalsverifier</artifactId>
+                    <version>1.7.6</version>
+                    <scope>test</scope>
+                </dependency>
 		        <dependency>
 		            <groupId>org.cassandraunit</groupId>
 		            <artifactId>cassandra-unit</artifactId>

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java
new file mode 100644
index 0000000..3d985d4
--- /dev/null
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java
@@ -0,0 +1,223 @@
+/****************************************************************
+ * 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.backends.cassandra;
+
+import java.util.Objects;
+import java.util.Optional;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
+
+public class CassandraConfiguration {
+    public static final CassandraConfiguration DEFAULT_CONFIGURATION = builder().build();
+
+    public static final int DEFAULT_MESSAGE_CHUNK_SIZE_ON_READ = 100;
+    public static final int DEFAULT_EXPUNGE_BATCH_SIZE = 100;
+    public static final int DEFAULT_UPDATE_FLAGS_BATCH_SIZE = 20;
+    public static final int DEFAULT_FLAGS_UPDATE_MESSAGE_MAX_RETRY = 1000;
+    public static final int DEFAULT_FLAGS_UPDATE_MESSAGE_ID_MAX_RETRY = 1000;
+    public static final int DEFAULT_MODSEQ_MAX_RETRY = 100000;
+    public static final int DEFAULT_UID_MAX_RETRY = 100000;
+    public static final int DEFAULT_ACL_MAX_RETRY = 1000;
+    public static final int DEFAULT_FETCH_NEXT_PAGE_ADVANCE_IN_ROW = 100;
+
+    public static class Builder {
+        private Optional<Integer> messageReadChunkSize = Optional.empty();
+        private Optional<Integer> expungeChunkSize = Optional.empty();
+        private Optional<Integer> flagsUpdateChunkSize = Optional.empty();
+        private Optional<Integer> flagsUpdateMessageIdMaxRetry = Optional.empty();
+        private Optional<Integer> flagsUpdateMessageMaxRetry = Optional.empty();
+        private Optional<Integer> modSeqMaxRetry = Optional.empty();
+        private Optional<Integer> uidMaxRetry = Optional.empty();
+        private Optional<Integer> aclMaxRetry = Optional.empty();
+        private Optional<Integer> fetchNextPageInAdvanceRow = Optional.empty();
+
+        public Builder messageReadChunkSize(int value) {
+            Preconditions.checkArgument(value > 0, "messageReadChunkSize needs to be strictly positive");
+            this.messageReadChunkSize = Optional.of(value);
+            return this;
+        }
+
+        public Builder expungeChunkSize(int value) {
+            Preconditions.checkArgument(value > 0, "expungeChunkSize needs to be strictly positive");
+            this.expungeChunkSize = Optional.of(value);
+            return this;
+        }
+
+        public Builder flagsUpdateChunkSize(int value) {
+            Preconditions.checkArgument(value > 0, "flagsUpdateChunkSize needs to be strictly positive");
+            this.flagsUpdateChunkSize = Optional.of(value);
+            return this;
+        }
+
+        public Builder flagsUpdateMessageIdMaxRetry(int value) {
+            Preconditions.checkArgument(value > 0, "flagsUpdateMessageIdMaxRetry needs to be strictly positive");
+            this.flagsUpdateMessageIdMaxRetry = Optional.of(value);
+            return this;
+        }
+
+        public Builder flagsUpdateMessageMaxRetry(int value) {
+            Preconditions.checkArgument(value > 0, "flagsUpdateMessageMaxRetry needs to be strictly positive");
+            this.flagsUpdateMessageMaxRetry = Optional.of(value);
+            return this;
+        }
+
+        public Builder modSeqMaxRetry(int value) {
+            Preconditions.checkArgument(value > 0, "modSeqMaxRetry needs to be strictly positive");
+            this.modSeqMaxRetry = Optional.of(value);
+            return this;
+        }
+
+        public Builder uidMaxRetry(int value) {
+            Preconditions.checkArgument(value > 0, "uidMaxRetry needs to be strictly positive");
+            this.uidMaxRetry = Optional.of(value);
+            return this;
+        }
+
+        public Builder aclMaxRetry(int value) {
+            Preconditions.checkArgument(value > 0, "aclMaxRetry needs to be strictly positive");
+            this.aclMaxRetry = Optional.of(value);
+            return this;
+        }
+
+        public Builder fetchNextPageInAdvanceRow(int value) {
+            Preconditions.checkArgument(value > 0, "fetchNextPageInAdvanceRow needs to be strictly positive");
+            this.fetchNextPageInAdvanceRow = Optional.of(value);
+            return this;
+        }
+
+        public CassandraConfiguration build() {
+            return new CassandraConfiguration(aclMaxRetry.orElse(DEFAULT_ACL_MAX_RETRY),
+                messageReadChunkSize.orElse(DEFAULT_MESSAGE_CHUNK_SIZE_ON_READ),
+                expungeChunkSize.orElse(DEFAULT_EXPUNGE_BATCH_SIZE),
+                flagsUpdateChunkSize.orElse(DEFAULT_UPDATE_FLAGS_BATCH_SIZE),
+                flagsUpdateMessageIdMaxRetry.orElse(DEFAULT_FLAGS_UPDATE_MESSAGE_ID_MAX_RETRY),
+                flagsUpdateMessageMaxRetry.orElse(DEFAULT_FLAGS_UPDATE_MESSAGE_MAX_RETRY),
+                modSeqMaxRetry.orElse(DEFAULT_MODSEQ_MAX_RETRY),
+                uidMaxRetry.orElse(DEFAULT_UID_MAX_RETRY),
+                fetchNextPageInAdvanceRow.orElse(DEFAULT_FETCH_NEXT_PAGE_ADVANCE_IN_ROW));
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    private final int messageReadChunkSize;
+    private final int expungeChunkSize;
+    private final int flagsUpdateChunkSize;
+    private final int flagsUpdateMessageIdMaxRetry;
+    private final int flagsUpdateMessageMaxRetry;
+    private final int modSeqMaxRetry;
+    private final int uidMaxRetry;
+    private final int aclMaxRetry;
+    private final int fetchNextPageInAdvanceRow;
+
+    @VisibleForTesting
+    CassandraConfiguration(int aclMaxRetry, int messageReadChunkSize, int expungeChunkSize, int flagsUpdateChunkSize,
+                                  int flagsUpdateMessageIdMaxRetry, int flagsUpdateMessageMaxRetry, int modSeqMaxRetry,
+                                   int uidMaxRetry, int fetchNextPageInAdvanceRow) {
+        this.aclMaxRetry = aclMaxRetry;
+        this.messageReadChunkSize = messageReadChunkSize;
+        this.expungeChunkSize = expungeChunkSize;
+        this.flagsUpdateMessageIdMaxRetry = flagsUpdateMessageIdMaxRetry;
+        this.flagsUpdateMessageMaxRetry = flagsUpdateMessageMaxRetry;
+        this.modSeqMaxRetry = modSeqMaxRetry;
+        this.uidMaxRetry = uidMaxRetry;
+        this.fetchNextPageInAdvanceRow = fetchNextPageInAdvanceRow;
+        this.flagsUpdateChunkSize = flagsUpdateChunkSize;
+    }
+
+    public int getFlagsUpdateChunkSize() {
+        return flagsUpdateChunkSize;
+    }
+
+    public int getAclMaxRetry() {
+        return aclMaxRetry;
+    }
+
+    public int getMessageReadChunkSize() {
+        return messageReadChunkSize;
+    }
+
+    public int getExpungeChunkSize() {
+        return expungeChunkSize;
+    }
+
+    public int getFlagsUpdateMessageIdMaxRetry() {
+        return flagsUpdateMessageIdMaxRetry;
+    }
+
+    public int getFlagsUpdateMessageMaxRetry() {
+        return flagsUpdateMessageMaxRetry;
+    }
+
+    public int getModSeqMaxRetry() {
+        return modSeqMaxRetry;
+    }
+
+    public int getUidMaxRetry() {
+        return uidMaxRetry;
+    }
+
+    public int getFetchNextPageInAdvanceRow() {
+        return fetchNextPageInAdvanceRow;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof CassandraConfiguration) {
+            CassandraConfiguration that = (CassandraConfiguration) o;
+
+            return Objects.equals(this.aclMaxRetry, that.aclMaxRetry)
+                && Objects.equals(this.messageReadChunkSize, that.messageReadChunkSize)
+                && Objects.equals(this.expungeChunkSize, that.expungeChunkSize)
+                && Objects.equals(this.flagsUpdateMessageIdMaxRetry, that.flagsUpdateMessageIdMaxRetry)
+                && Objects.equals(this.flagsUpdateMessageMaxRetry, that.flagsUpdateMessageMaxRetry)
+                && Objects.equals(this.modSeqMaxRetry, that.modSeqMaxRetry)
+                && Objects.equals(this.uidMaxRetry, that.uidMaxRetry)
+                && Objects.equals(this.flagsUpdateChunkSize, that.flagsUpdateChunkSize)
+                && Objects.equals(this.fetchNextPageInAdvanceRow, that.fetchNextPageInAdvanceRow);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(aclMaxRetry, messageReadChunkSize, expungeChunkSize, flagsUpdateMessageIdMaxRetry,
+            flagsUpdateMessageMaxRetry, modSeqMaxRetry, uidMaxRetry, fetchNextPageInAdvanceRow, flagsUpdateChunkSize);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+            .add("aclMaxRetry", aclMaxRetry)
+            .add("messageReadChunkSize", messageReadChunkSize)
+            .add("expungeChunkSize", expungeChunkSize)
+            .add("flagsUpdateMessageIdMaxRetry", flagsUpdateMessageIdMaxRetry)
+            .add("flagsUpdateMessageMaxRetry", flagsUpdateMessageMaxRetry)
+            .add("modSeqMaxRetry", modSeqMaxRetry)
+            .add("fetchNextPageInAdvanceRow", fetchNextPageInAdvanceRow)
+            .add("flagsUpdateChunkSize", flagsUpdateChunkSize)
+            .add("uidMaxRetry", uidMaxRetry)
+            .toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
index 1732dd2..adef1c0 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
@@ -22,22 +22,35 @@ package org.apache.james.backends.cassandra.utils;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
+import org.apache.james.backends.cassandra.CassandraConfiguration;
+
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 
 public class CassandraUtils {
 
-    private static final int FETCH_NEXT_PAGE_ADVANCE_IN_ROW = 100;
+    public static final CassandraUtils DEFAULT_CASSANDRA_UTILS = new CassandraUtils(CassandraConfiguration.DEFAULT_CONFIGURATION);
+
+    private final CassandraConfiguration cassandraConfiguration;
+
+    public CassandraUtils(CassandraConfiguration cassandraConfiguration) {
+        this.cassandraConfiguration = cassandraConfiguration;
+    }
 
-    public static Stream<Row> convertToStream(ResultSet resultSet) {
+    public Stream<Row> convertToStream(ResultSet resultSet) {
         return StreamSupport.stream(resultSet.spliterator(), true)
             .peek(row -> ensureFetchedNextPage(resultSet));
     }
 
-    private static void ensureFetchedNextPage(ResultSet resultSet) {
-        if (resultSet.getAvailableWithoutFetching() == FETCH_NEXT_PAGE_ADVANCE_IN_ROW && !resultSet.isFullyFetched()) {
+    private void ensureFetchedNextPage(ResultSet resultSet) {
+        if (fetchNeeded(resultSet)) {
             resultSet.fetchMoreResults();
         }
     }
 
+    private boolean fetchNeeded(ResultSet resultSet) {
+        return resultSet.getAvailableWithoutFetching() == cassandraConfiguration.getFetchNextPageInAdvanceRow()
+            && !resultSet.isFullyFetched();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java
new file mode 100644
index 0000000..dec62ea
--- /dev/null
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java
@@ -0,0 +1,225 @@
+/****************************************************************
+ * 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.backends.cassandra;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+public class CassandraConfigurationTest {
+
+    @Rule
+    public ExpectedException expectedException = ExpectedException.none();
+
+    @Test
+    public void cassandraConfigurationShouldRespectBeanContract() {
+        EqualsVerifier.forClass(CassandraConfiguration.class).verify();
+    }
+
+    @Test
+    public void defaultBuilderShouldConstructDefaultConfiguration() {
+        assertThat(CassandraConfiguration.builder().build())
+            .isEqualTo(CassandraConfiguration.DEFAULT_CONFIGURATION);
+    }
+
+    @Test
+    public void aclMaxRetryShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .aclMaxRetry(-1);
+    }
+
+    @Test
+    public void aclMaxRetryShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .aclMaxRetry(0);
+    }
+
+    @Test
+    public void expungeChunkSizeShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .expungeChunkSize(-1);
+    }
+
+    @Test
+    public void expungeChunkSizeShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .expungeChunkSize(0);
+    }
+
+    @Test
+    public void messageReadChunkSizeShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .messageReadChunkSize(-1);
+    }
+
+    @Test
+    public void messageReadChunkSizeShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .messageReadChunkSize(0);
+    }
+
+    @Test
+    public void flagsUpdateChunkSizeShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .flagsUpdateChunkSize(-1);
+    }
+
+    @Test
+    public void flagsUpdateChunkSizeShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .flagsUpdateChunkSize(0);
+    }
+
+    @Test
+    public void flagsUpdateMessageIdMaxRetryShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .flagsUpdateMessageIdMaxRetry(-1);
+    }
+
+    @Test
+    public void flagsUpdateMessageIdMaxRetryShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .flagsUpdateMessageIdMaxRetry(0);
+    }
+
+    @Test
+    public void flagsUpdateMessageMaxRetryShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .flagsUpdateMessageMaxRetry(-1);
+    }
+
+    @Test
+    public void flagsUpdateMessageMaxRetryShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .flagsUpdateMessageMaxRetry(0);
+    }
+
+    @Test
+    public void fetchNextPageInAdvanceRowShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .fetchNextPageInAdvanceRow(-1);
+    }
+
+    @Test
+    public void fetchNextPageInAdvanceRowShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .fetchNextPageInAdvanceRow(0);
+    }
+
+    @Test
+    public void modSeqMaxRetryShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .modSeqMaxRetry(-1);
+    }
+
+    @Test
+    public void modSeqMaxRetryShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .modSeqMaxRetry(0);
+    }
+
+    @Test
+    public void uidMaxRetryShouldThrowOnNegativeValue() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .uidMaxRetry(-1);
+    }
+
+    @Test
+    public void uidMaxRetryShouldThrowOnZero() {
+        expectedException.expect(IllegalArgumentException.class);
+
+        CassandraConfiguration.builder()
+            .uidMaxRetry(0);
+    }
+
+    @Test
+    public void builderShouldCreateTheRightObject() {
+        int aclMaxRetry = 1;
+        int modSeqMaxRetry = 2;
+        int uidMaxRetry = 3;
+        int fetchNextPageInAdvanceRow = 4;
+        int flagsUpdateMessageMaxRetry = 5;
+        int flagsUpdateMessageIdMaxRetry = 6;
+        int flagsUpdateChunkSize = 7;
+        int messageReadChunkSize = 8;
+        int expungeChunkSize = 9;
+
+        CassandraConfiguration configuration = CassandraConfiguration.builder()
+            .aclMaxRetry(aclMaxRetry)
+            .modSeqMaxRetry(modSeqMaxRetry)
+            .uidMaxRetry(uidMaxRetry)
+            .fetchNextPageInAdvanceRow(fetchNextPageInAdvanceRow)
+            .flagsUpdateMessageMaxRetry(flagsUpdateMessageMaxRetry)
+            .flagsUpdateMessageIdMaxRetry(flagsUpdateMessageIdMaxRetry)
+            .flagsUpdateChunkSize(flagsUpdateChunkSize)
+            .messageReadChunkSize(messageReadChunkSize)
+            .expungeChunkSize(expungeChunkSize)
+            .build();
+
+        assertThat(configuration.getAclMaxRetry()).isEqualTo(aclMaxRetry);
+        assertThat(configuration.getModSeqMaxRetry()).isEqualTo(modSeqMaxRetry);
+        assertThat(configuration.getUidMaxRetry()).isEqualTo(uidMaxRetry);
+        assertThat(configuration.getFetchNextPageInAdvanceRow()).isEqualTo(fetchNextPageInAdvanceRow);
+        assertThat(configuration.getFlagsUpdateMessageMaxRetry()).isEqualTo(flagsUpdateMessageMaxRetry);
+        assertThat(configuration.getFlagsUpdateMessageIdMaxRetry()).isEqualTo(flagsUpdateMessageIdMaxRetry);
+        assertThat(configuration.getFlagsUpdateChunkSize()).isEqualTo(flagsUpdateChunkSize);
+        assertThat(configuration.getMessageReadChunkSize()).isEqualTo(messageReadChunkSize);
+        assertThat(configuration.getExpungeChunkSize()).isEqualTo(expungeChunkSize);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
index 36f536a..dc0d622 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
@@ -20,8 +20,9 @@
 package org.apache.james.mailbox.cassandra;
 
 import javax.inject.Inject;
-import javax.inject.Named;
 
+import org.apache.james.backends.cassandra.CassandraConfiguration;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.mail.CassandraAnnotationMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO;
@@ -59,8 +60,6 @@ import com.datastax.driver.core.Session;
  * 
  */
 public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFactory {
-    public static final Integer DEFAULT_MAX_RETRY = 1000;
-
     private final Session session;
     private final CassandraUidProvider uidProvider;
     private final CassandraModSeqProvider modSeqProvider;
@@ -74,15 +73,16 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
     private final CassandraMailboxPathDAO mailboxPathDAO;
     private final CassandraFirstUnseenDAO firstUnseenDAO;
     private final CassandraApplicableFlagDAO applicableFlagDAO;
+    private CassandraUtils cassandraUtils;
+    private CassandraConfiguration cassandraConfiguration;
     private final CassandraDeletedMessageDAO deletedMessageDAO;
-    private int maxRetry;
 
     @Inject
     public CassandraMailboxSessionMapperFactory(CassandraUidProvider uidProvider, CassandraModSeqProvider modSeqProvider, Session session,
                                                 CassandraMessageDAO messageDAO, CassandraMessageIdDAO messageIdDAO, CassandraMessageIdToImapUidDAO imapUidDAO,
                                                 CassandraMailboxCounterDAO mailboxCounterDAO, CassandraMailboxRecentsDAO mailboxRecentsDAO, CassandraMailboxDAO mailboxDAO,
                                                 CassandraMailboxPathDAO mailboxPathDAO, CassandraFirstUnseenDAO firstUnseenDAO, CassandraApplicableFlagDAO applicableFlagDAO,
-                                                CassandraDeletedMessageDAO deletedMessageDAO, @Named(CassandraMailboxDAO.MAX_ACL_RETRY) Integer maxRetry) {
+                                                CassandraDeletedMessageDAO deletedMessageDAO, CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) {
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
         this.session = session;
@@ -96,13 +96,14 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
         this.firstUnseenDAO = firstUnseenDAO;
         this.deletedMessageDAO = deletedMessageDAO;
         this.applicableFlagDAO = applicableFlagDAO;
+        this.cassandraUtils = cassandraUtils;
+        this.cassandraConfiguration = cassandraConfiguration;
         this.indexTableHandler = new CassandraIndexTableHandler(
             mailboxRecentsDAO,
             mailboxCounterDAO,
             firstUnseenDAO,
             applicableFlagDAO,
             deletedMessageDAO);
-        this.maxRetry = maxRetry;
     }
 
     public CassandraMailboxSessionMapperFactory(
@@ -121,7 +122,8 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
         CassandraDeletedMessageDAO deletedMesageDAO) {
 
         this(uidProvider, modSeqProvider, session, messageDAO, messageIdDAO, imapUidDAO, mailboxCounterDAO,
-             mailboxRecentsDAO, mailboxDAO, mailboxPathDAO, firstUnseenDAO, applicableFlagDAO, deletedMesageDAO, DEFAULT_MAX_RETRY);
+             mailboxRecentsDAO, mailboxDAO, mailboxPathDAO, firstUnseenDAO, applicableFlagDAO, deletedMesageDAO,
+            CassandraUtils.DEFAULT_CASSANDRA_UTILS, CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     @Override
@@ -130,7 +132,6 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
                                           uidProvider,
                                           modSeqProvider,
                                           null,
-                                          maxRetry,
                                           (CassandraAttachmentMapper) createAttachmentMapper(mailboxSession),
                                           messageDAO,
                                           messageIdDAO,
@@ -140,19 +141,20 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
                                           applicableFlagDAO,
                                           indexTableHandler,
                                           firstUnseenDAO,
-                                          deletedMessageDAO);
+                                          deletedMessageDAO,
+                                          cassandraConfiguration);
     }
 
     @Override
     public MessageIdMapper createMessageIdMapper(MailboxSession mailboxSession) throws MailboxException {
         return new CassandraMessageIdMapper(getMailboxMapper(mailboxSession), mailboxDAO,
                 (CassandraAttachmentMapper) getAttachmentMapper(mailboxSession),
-                imapUidDAO, messageIdDAO, messageDAO, indexTableHandler, modSeqProvider, mailboxSession);
+                imapUidDAO, messageIdDAO, messageDAO, indexTableHandler, modSeqProvider, mailboxSession, cassandraConfiguration);
     }
 
     @Override
     public MailboxMapper createMailboxMapper(MailboxSession mailboxSession) {
-        return new CassandraMailboxMapper(session, mailboxDAO, mailboxPathDAO, maxRetry);
+        return new CassandraMailboxMapper(session, mailboxDAO, mailboxPathDAO, cassandraConfiguration);
     }
 
     @Override
@@ -162,7 +164,7 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
 
     @Override
     public SubscriptionMapper createSubscriptionMapper(MailboxSession mailboxSession) {
-        return new CassandraSubscriptionMapper(session);
+        return new CassandraSubscriptionMapper(session, cassandraUtils);
     }
 
     public ModSeqProvider getModSeqProvider() {
@@ -180,6 +182,6 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
     @Override
     public AnnotationMapper createAnnotationMapper(MailboxSession mailboxSession)
             throws MailboxException {
-        return new CassandraAnnotationMapper(session);
+        return new CassandraAnnotationMapper(session, cassandraUtils);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegisterMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegisterMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegisterMapper.java
index fd648f5..d1b83ef 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegisterMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegisterMapper.java
@@ -44,11 +44,12 @@ public class CassandraMailboxPathRegisterMapper implements DistantMailboxPathReg
     private final Session session;
     private final CassandraTypesProvider typesProvider;
     private final int cassandraTimeOutInS;
+    private final CassandraUtils cassandraUtils;
     private final PreparedStatement insertStatement;
     private final PreparedStatement deleteStatement;
     private final PreparedStatement selectStatement;
 
-    public CassandraMailboxPathRegisterMapper(Session session, CassandraTypesProvider typesProvider, int cassandraTimeOutInS) {
+    public CassandraMailboxPathRegisterMapper(Session session, CassandraTypesProvider typesProvider, CassandraUtils cassandraUtils, int cassandraTimeOutInS) {
         this.session = session;
         this.typesProvider = typesProvider;
         this.cassandraTimeOutInS = cassandraTimeOutInS;
@@ -61,11 +62,12 @@ public class CassandraMailboxPathRegisterMapper implements DistantMailboxPathReg
             .and(eq(CassandraMailboxPathRegisterTable.TOPIC, bindMarker())));
         this.selectStatement = session.prepare(select().from(CassandraMailboxPathRegisterTable.TABLE_NAME)
             .where(eq(CassandraMailboxPathRegisterTable.MAILBOX_PATH, bindMarker())));
+        this.cassandraUtils = cassandraUtils;
     }
 
     @Override
     public Set<Topic> getTopics(MailboxPath mailboxPath) {
-        return CassandraUtils.convertToStream(session.execute(selectStatement.bind(buildUDTFromMailboxPath(mailboxPath))))
+        return cassandraUtils.convertToStream(session.execute(selectStatement.bind(buildUDTFromMailboxPath(mailboxPath))))
             .map(row -> new Topic(row.getString(CassandraMailboxPathRegisterTable.TOPIC)))
             .collect(Collectors.toSet());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
----------------------------------------------------------------------
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 68698ca..7e1626d 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
@@ -29,6 +29,7 @@ import java.io.IOException;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.CassandraConstants;
 import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
@@ -66,17 +67,16 @@ public class CassandraACLMapper {
 
     private static final Logger LOG = LoggerFactory.getLogger(CassandraACLMapper.class);
 
-    public CassandraACLMapper(CassandraId cassandraId, Session session, CassandraAsyncExecutor cassandraAsyncExecutor, int maxRetry) {
-        this(cassandraId, session, cassandraAsyncExecutor, maxRetry, () -> {});
+    public CassandraACLMapper(CassandraId cassandraId, Session session, CassandraAsyncExecutor cassandraAsyncExecutor, CassandraConfiguration cassandraConfiguration) {
+        this(cassandraId, session, cassandraAsyncExecutor, cassandraConfiguration, () -> {});
     }
 
-    public CassandraACLMapper(CassandraId cassandraId, Session session, CassandraAsyncExecutor cassandraAsyncExecutor, int maxRetry, CodeInjector codeInjector) {
-        Preconditions.checkArgument(maxRetry > 0);
+    public CassandraACLMapper(CassandraId cassandraId, Session session, CassandraAsyncExecutor cassandraAsyncExecutor, CassandraConfiguration cassandraConfiguration, CodeInjector codeInjector) {
         Preconditions.checkArgument(cassandraId != null);
         this.cassandraId = cassandraId;
         this.session = session;
         this.executor = cassandraAsyncExecutor;
-        this.maxRetry = maxRetry;
+        this.maxRetry = cassandraConfiguration.getAclMaxRetry();
         this.codeInjector = codeInjector;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java
index bf8da4f..073227b 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java
@@ -28,13 +28,12 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.lte;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.github.steveash.guavate.Guavate;
-import com.google.common.base.Ascii;
-import com.google.common.base.Optional;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.cassandra.CassandraId;
 import org.apache.james.mailbox.cassandra.table.CassandraAnnotationTable;
@@ -47,26 +46,30 @@ import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.Select;
+import com.github.steveash.guavate.Guavate;
+import com.google.common.base.Ascii;
 import com.google.common.base.Preconditions;
 
 public class CassandraAnnotationMapper extends NonTransactionalMapper implements AnnotationMapper {
 
     private final Session session;
+    private final CassandraUtils cassandraUtils;
 
-    public CassandraAnnotationMapper(Session session) {
+    public CassandraAnnotationMapper(Session session, CassandraUtils cassandraUtils) {
         this.session = session;
+        this.cassandraUtils = cassandraUtils;
     }
 
     public List<MailboxAnnotation> getAllAnnotations(MailboxId mailboxId) {
         CassandraId cassandraId = (CassandraId)mailboxId;
-        return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQuery(cassandraId)))
+        return cassandraUtils.convertToStream(session.execute(getStoredAnnotationsQuery(cassandraId)))
             .map(this::toAnnotation)
             .collect(Collectors.toList());
     }
 
     public List<MailboxAnnotation> getAnnotationsByKeys(MailboxId mailboxId, Set<MailboxAnnotationKey> keys) {
         CassandraId cassandraId = (CassandraId)mailboxId;
-        return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryForKeys(cassandraId, keys)))
+        return cassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryForKeys(cassandraId, keys)))
             .map(this::toAnnotation)
             .collect(Collectors.toList());
     }
@@ -102,8 +105,11 @@ public class CassandraAnnotationMapper extends NonTransactionalMapper implements
     @Override
     public boolean exist(MailboxId mailboxId, MailboxAnnotation mailboxAnnotation) {
         CassandraId cassandraId = (CassandraId)mailboxId;
-        Optional<Row> row = Optional.fromNullable(session.execute(getStoredAnnotationsQueryByKey(cassandraId, mailboxAnnotation.getKey().asString()))
-            .one());
+        Optional<Row> row = Optional.ofNullable(
+            session.execute(
+                getStoredAnnotationsQueryByKey(cassandraId,
+                    mailboxAnnotation.getKey().asString()))
+                .one());
         return row.isPresent();
     }
 
@@ -146,13 +152,13 @@ public class CassandraAnnotationMapper extends NonTransactionalMapper implements
     }
 
     private Stream<MailboxAnnotation> getAnnotationsByKeyWithAllDepth(CassandraId mailboxId, MailboxAnnotationKey key) {
-        return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(mailboxId, key.asString())))
+        return cassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(mailboxId, key.asString())))
             .map(this::toAnnotation)
             .filter(annotation -> key.isAncestorOrIsEqual(annotation.getKey()));
     }
 
     private Stream<MailboxAnnotation> getAnnotationsByKeyWithOneDepth(CassandraId mailboxId, MailboxAnnotationKey key) {
-        return CassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(mailboxId, key.asString())))
+        return cassandraUtils.convertToStream(session.execute(getStoredAnnotationsQueryLikeKey(mailboxId, key.asString())))
             .map(this::toAnnotation)
             .filter(annotation -> key.isParentOrIsEqual(annotation.getKey()));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
index 10dabc6..c86d1e0 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
@@ -43,6 +43,8 @@ import org.apache.james.mailbox.cassandra.CassandraId;
 
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
+import com.google.common.annotations.VisibleForTesting;
+
 import org.apache.james.mailbox.model.MessageRange;
 
 public class CassandraDeletedMessageDAO {
@@ -57,9 +59,10 @@ public class CassandraDeletedMessageDAO {
     private final PreparedStatement selectOneUidStatement;
     private final PreparedStatement selectBetweenUidStatement;
     private final PreparedStatement selectFromUidStatement;
+    private final CassandraUtils cassandraUtils;
 
     @Inject
-    public CassandraDeletedMessageDAO(Session session) {
+    public CassandraDeletedMessageDAO(Session session, CassandraUtils cassandraUtils) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.addStatement = prepareAddStatement(session);
         this.deleteStatement = prepareDeleteStatement(session);
@@ -67,6 +70,12 @@ public class CassandraDeletedMessageDAO {
         this.selectOneUidStatement = prepareOneUidStatement(session);
         this.selectBetweenUidStatement = prepareBetweenUidStatement(session);
         this.selectFromUidStatement = prepareFromUidStatement(session);
+        this.cassandraUtils = cassandraUtils;
+    }
+
+    @VisibleForTesting
+    public CassandraDeletedMessageDAO(Session session) {
+        this(session, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
     }
 
     private PreparedStatement prepareAllUidStatement(Session session) {
@@ -125,7 +134,7 @@ public class CassandraDeletedMessageDAO {
 
     public CompletableFuture<Stream<MessageUid>> retrieveDeletedMessage(CassandraId cassandraId, MessageRange range) {
         return retrieveResultSetOfDeletedMessage(cassandraId, range)
-            .thenApply(CassandraDeletedMessageDAO::resultSetToStream);
+            .thenApply(this::resultSetToStream);
     }
 
     private CompletableFuture<ResultSet> retrieveResultSetOfDeletedMessage(CassandraId cassandraId, MessageRange range) {
@@ -143,8 +152,8 @@ public class CassandraDeletedMessageDAO {
         throw new UnsupportedOperationException();
     }
 
-    private static Stream<MessageUid> resultSetToStream(ResultSet resultSet) {
-        return CassandraUtils.convertToStream(resultSet)
+    private Stream<MessageUid> resultSetToStream(ResultSet resultSet) {
+        return cassandraUtils.convertToStream(resultSet)
             .map(row ->
                 MessageUid.of(row.getLong(UID)));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
index 3f6f86c..ca6cfd7 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
@@ -39,6 +39,7 @@ import java.util.stream.Stream;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
@@ -55,14 +56,15 @@ 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.google.common.annotations.VisibleForTesting;
 
 public class CassandraMailboxDAO {
 
-    public static final String MAX_ACL_RETRY = "maxAclRetry";
     private final CassandraAsyncExecutor executor;
     private final MailboxBaseTupleUtil mailboxBaseTupleUtil;
     private final Session session;
-    private final int maxAclRetry;
+    private final CassandraUtils cassandraUtils;
+    private CassandraConfiguration cassandraConfiguration;
     private final PreparedStatement readStatement;
     private final PreparedStatement listStatement;
     private final PreparedStatement deleteStatement;
@@ -70,7 +72,7 @@ public class CassandraMailboxDAO {
     private final PreparedStatement updateStatement;
 
     @Inject
-    public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider, @Named(MAX_ACL_RETRY) Integer maxAclRetry) {
+    public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider, CassandraUtils cassandraUtils, CassandraConfiguration cassandraConfiguration) {
         this.executor = new CassandraAsyncExecutor(session);
         this.mailboxBaseTupleUtil = new MailboxBaseTupleUtil(typesProvider);
         this.session = session;
@@ -79,7 +81,13 @@ public class CassandraMailboxDAO {
         this.deleteStatement = prepareDelete(session);
         this.listStatement = prepareList(session);
         this.readStatement = prepareRead(session);
-        this.maxAclRetry = maxAclRetry;
+        this.cassandraUtils = cassandraUtils;
+        this.cassandraConfiguration = cassandraConfiguration;
+    }
+
+    @VisibleForTesting
+    public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider) {
+        this(session, typesProvider, CassandraUtils.DEFAULT_CASSANDRA_UTILS, CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement prepareInsert(Session session) {
@@ -140,7 +148,7 @@ public class CassandraMailboxDAO {
     }
 
     private CompletableFuture<Optional<SimpleMailbox>> mailbox(CassandraId cassandraId, CompletableFuture<Optional<Row>> rowFuture) {
-        CompletableFuture<MailboxACL> aclCompletableFuture = new CassandraACLMapper(cassandraId, session, executor, maxAclRetry).getACL();
+        CompletableFuture<MailboxACL> aclCompletableFuture = new CassandraACLMapper(cassandraId, session, executor, cassandraConfiguration).getACL();
         return rowFuture.thenApply(rowOptional -> rowOptional.map(this::mailboxFromRow))
             .thenApply(mailboxOptional -> {
                 mailboxOptional.ifPresent(mailbox -> mailbox.setMailboxId(cassandraId));
@@ -163,7 +171,7 @@ public class CassandraMailboxDAO {
 
     public CompletableFuture<Stream<SimpleMailbox>> retrieveAllMailboxes() {
         return executor.execute(listStatement.bind())
-            .thenApply(CassandraUtils::convertToStream)
+            .thenApply(cassandraUtils::convertToStream)
             .thenApply(stream -> stream.map(this::toMailboxWithId))
             .thenCompose(stream -> CompletableFutureUtil.allOf(stream.map(this::toMailboxWithAclFuture)));
     }
@@ -176,7 +184,7 @@ public class CassandraMailboxDAO {
 
     private CompletableFuture<SimpleMailbox> toMailboxWithAclFuture(SimpleMailbox mailbox) {
         CassandraId cassandraId = (CassandraId) mailbox.getMailboxId();
-        return new CassandraACLMapper(cassandraId, session, executor, maxAclRetry).getACL()
+        return new CassandraACLMapper(cassandraId, session, executor, cassandraConfiguration).getACL()
             .thenApply(acl -> {
                 mailbox.setACL(acl);
                 return mailbox;

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
index 6c0d484..ef0362a 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
@@ -29,6 +29,7 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.cassandra.CassandraId;
 import org.apache.james.mailbox.exception.MailboxException;
@@ -55,18 +56,18 @@ public class CassandraMailboxMapper implements MailboxMapper {
     public static final String VALUES_MAY_NOT_BE_LARGER_THAN_64_K = "Index expression values may not be larger than 64K";
     public static final String CLUSTERING_COLUMNS_IS_TOO_LONG = "The sum of all clustering columns is too long";
 
-    private final int maxRetry;
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
     private final CassandraMailboxPathDAO mailboxPathDAO;
     private final CassandraMailboxDAO mailboxDAO;
     private final Session session;
+    private final CassandraConfiguration cassandraConfiguration;
 
-    public CassandraMailboxMapper(Session session, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathDAO mailboxPathDAO, int maxRetry) {
-        this.maxRetry = maxRetry;
+    public CassandraMailboxMapper(Session session, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathDAO mailboxPathDAO, CassandraConfiguration cassandraConfiguration) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.mailboxDAO = mailboxDAO;
         this.mailboxPathDAO = mailboxPathDAO;
         this.session = session;
+        this.cassandraConfiguration = cassandraConfiguration;
     }
 
     @Override
@@ -193,7 +194,7 @@ public class CassandraMailboxMapper implements MailboxMapper {
     @Override
     public void updateACL(Mailbox mailbox, MailboxACL.MailboxACLCommand mailboxACLCommand) throws MailboxException {
         CassandraId cassandraId = (CassandraId) mailbox.getMailboxId();
-        new CassandraACLMapper(cassandraId, session, cassandraAsyncExecutor, maxRetry).updateACL(mailboxACLCommand);
+        new CassandraACLMapper(cassandraId, session, cassandraAsyncExecutor, cassandraConfiguration).updateACL(mailboxACLCommand);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
index 552e010..15d4a94 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
@@ -47,6 +47,7 @@ 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.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Objects;
 
 public class CassandraMailboxPathDAO {
@@ -87,21 +88,28 @@ public class CassandraMailboxPathDAO {
 
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
     private final MailboxBaseTupleUtil mailboxBaseTupleUtil;
+    private final CassandraUtils cassandraUtils;
     private final PreparedStatement delete;
     private final PreparedStatement insert;
     private final PreparedStatement select;
     private final PreparedStatement selectAll;
 
     @Inject
-    public CassandraMailboxPathDAO(Session session, CassandraTypesProvider typesProvider) {
+    public CassandraMailboxPathDAO(Session session, CassandraTypesProvider typesProvider, CassandraUtils cassandraUtils) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.mailboxBaseTupleUtil = new MailboxBaseTupleUtil(typesProvider);
+        this.cassandraUtils = cassandraUtils;
         this.insert = prepareInsert(session);
         this.delete = prepareDelete(session);
         this.select = prepareSelect(session);
         this.selectAll = prepareSelectAll(session);
     }
 
+    @VisibleForTesting
+    public CassandraMailboxPathDAO(Session session, CassandraTypesProvider typesProvider) {
+        this(session, typesProvider, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+    }
+
     private PreparedStatement prepareDelete(Session session) {
         return session.prepare(QueryBuilder.delete()
             .from(TABLE_NAME)
@@ -145,7 +153,7 @@ public class CassandraMailboxPathDAO {
         return cassandraAsyncExecutor.execute(
             selectAll.bind()
                 .setUDTValue(NAMESPACE_AND_USER, mailboxBaseTupleUtil.createMailboxBaseUDT(namespace, user)))
-            .thenApply(resultSet -> CassandraUtils.convertToStream(resultSet).map(this::fromRowToCassandraIdAndPath));
+            .thenApply(resultSet -> cassandraUtils.convertToStream(resultSet).map(this::fromRowToCassandraIdAndPath));
     }
 
     private CassandraIdAndPath fromRowToCassandraIdAndPath(Row row) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
index f4eddf9..f3264f4 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
@@ -39,6 +39,7 @@ import org.apache.james.mailbox.cassandra.table.CassandraMailboxRecentsTable;
 import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
+import com.google.common.annotations.VisibleForTesting;
 
 public class CassandraMailboxRecentsDAO {
 
@@ -46,13 +47,20 @@ public class CassandraMailboxRecentsDAO {
     private final PreparedStatement readStatement;
     private final PreparedStatement deleteStatement;
     private final PreparedStatement addStatement;
+    private CassandraUtils cassandraUtils;
 
     @Inject
-    public CassandraMailboxRecentsDAO(Session session) {
+    public CassandraMailboxRecentsDAO(Session session, CassandraUtils cassandraUtils) {
         cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         readStatement = createReadStatement(session);
         deleteStatement = createDeleteStatement(session);
         addStatement = createAddStatement(session);
+        this.cassandraUtils = cassandraUtils;
+    }
+
+    @VisibleForTesting
+    public CassandraMailboxRecentsDAO(Session session) {
+        this(session, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
     }
 
     private PreparedStatement createReadStatement(Session session) {
@@ -79,7 +87,7 @@ public class CassandraMailboxRecentsDAO {
 
     public CompletableFuture<Stream<MessageUid>> getRecentMessageUidsInMailbox(CassandraId mailboxId) {
         return cassandraAsyncExecutor.execute(bindWithMailbox(mailboxId, readStatement))
-            .thenApply(CassandraUtils::convertToStream)
+            .thenApply(cassandraUtils::convertToStream)
             .thenApply(stream -> stream.map(row -> row.getLong(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID)))
             .thenApply(stream -> stream.map(MessageUid::of));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
index b5101c3..9dd3d21 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
@@ -55,6 +55,7 @@ import javax.mail.Flags;
 import javax.mail.util.SharedByteArrayInputStream;
 
 import org.apache.commons.lang3.tuple.Pair;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.MessageUid;
@@ -93,8 +94,6 @@ import com.google.common.io.ByteStreams;
 import com.google.common.primitives.Bytes;
 
 public class CassandraMessageDAO {
-
-    public static final int CHUNK_SIZE_ON_READ = 100;
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
     private final CassandraTypesProvider typesProvider;
     private final PreparedStatement insert;
@@ -103,9 +102,10 @@ public class CassandraMessageDAO {
     private final PreparedStatement selectHeaders;
     private final PreparedStatement selectFields;
     private final PreparedStatement selectBody;
+    private final CassandraConfiguration cassandraConfiguration;
 
     @Inject
-    public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider) {
+    public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider, CassandraConfiguration cassandraConfiguration) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.typesProvider = typesProvider;
         this.insert = prepareInsert(session);
@@ -114,6 +114,12 @@ public class CassandraMessageDAO {
         this.selectHeaders = prepareSelect(session, HEADERS);
         this.selectFields = prepareSelect(session, FIELDS);
         this.selectBody = prepareSelect(session, BODY);
+        this.cassandraConfiguration = cassandraConfiguration;
+    }
+
+    @VisibleForTesting
+    public CassandraMessageDAO(Session session, CassandraTypesProvider typesProvider) {
+        this(session, typesProvider, CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement prepareSelect(Session session, String[] fields) {
@@ -193,7 +199,7 @@ public class CassandraMessageDAO {
     public CompletableFuture<Stream<Pair<MessageWithoutAttachment, Stream<MessageAttachmentRepresentation>>>> retrieveMessages(List<ComposedMessageIdWithMetaData> messageIds, FetchType fetchType, Optional<Integer> limit) {
         return CompletableFutureUtil.chainAll(
             getLimitedIdStream(messageIds.stream().distinct(), limit)
-                .collect(JamesCollectors.chunker(CHUNK_SIZE_ON_READ)),
+                .collect(JamesCollectors.chunker(cassandraConfiguration.getMessageReadChunkSize())),
             ids -> FluentFutureStream.of(
                 ids.stream()
                     .map(id -> retrieveRow(id, fetchType)

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
index e7d5a34..6f9c265 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
@@ -65,6 +65,7 @@ import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableSet;
 
 public class CassandraMessageIdDAO {
@@ -80,10 +81,11 @@ public class CassandraMessageIdDAO {
     private final PreparedStatement selectAllUids;
     private final PreparedStatement selectUidGte;
     private final PreparedStatement selectUidRange;
+    private CassandraUtils cassandraUtils;
     private final PreparedStatement update;
 
     @Inject
-    public CassandraMessageIdDAO(Session session, CassandraMessageId.Factory messageIdFactory) {
+    public CassandraMessageIdDAO(Session session, CassandraMessageId.Factory messageIdFactory, CassandraUtils cassandraUtils) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.messageIdFactory = messageIdFactory;
         this.delete = prepareDelete(session);
@@ -93,6 +95,12 @@ public class CassandraMessageIdDAO {
         this.selectAllUids = prepareSelectAllUids(session);
         this.selectUidGte = prepareSelectUidGte(session);
         this.selectUidRange = prepareSelectUidRange(session);
+        this.cassandraUtils = cassandraUtils;
+    }
+
+    @VisibleForTesting
+    public CassandraMessageIdDAO(Session session, CassandraMessageId.Factory messageIdFactory) {
+        this(session, messageIdFactory, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
     }
 
     private PreparedStatement prepareDelete(Session session) {
@@ -253,7 +261,7 @@ public class CassandraMessageIdDAO {
 
     private CompletableFuture<Stream<ComposedMessageIdWithMetaData>> toMessageIds(CompletableFuture<ResultSet> completableFuture) {
         return completableFuture
-            .thenApply(resultSet -> CassandraUtils.convertToStream(resultSet)
+            .thenApply(resultSet -> cassandraUtils.convertToStream(resultSet)
                 .map(this::fromRowToComposedMessageIdWithFlags));
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
index bf3dc1d..91e7b3a 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
@@ -29,6 +29,7 @@ import java.util.stream.Stream;
 import javax.mail.Flags;
 
 import org.apache.commons.lang3.tuple.Pair;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
 import org.apache.james.backends.cassandra.utils.LightweightTransactionException;
 import org.apache.james.mailbox.MailboxSession;
@@ -60,8 +61,6 @@ import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Throwables;
 
 public class CassandraMessageIdMapper implements MessageIdMapper {
-
-    private static final int MAX_RETRY = 1000;
     private static final Logger LOGGER = LoggerFactory.getLogger(CassandraMessageIdMapper.class);
 
     private final MailboxMapper mailboxMapper;
@@ -73,10 +72,11 @@ public class CassandraMessageIdMapper implements MessageIdMapper {
     private final ModSeqProvider modSeqProvider;
     private final MailboxSession mailboxSession;
     private final AttachmentLoader attachmentLoader;
+    private final CassandraConfiguration cassandraConfiguration;
 
     public CassandraMessageIdMapper(MailboxMapper mailboxMapper, CassandraMailboxDAO mailboxDAO, CassandraAttachmentMapper attachmentMapper,
                                     CassandraMessageIdToImapUidDAO imapUidDAO, CassandraMessageIdDAO messageIdDAO, CassandraMessageDAO messageDAO,
-                                    CassandraIndexTableHandler indexTableHandler, ModSeqProvider modSeqProvider, MailboxSession mailboxSession) {
+                                    CassandraIndexTableHandler indexTableHandler, ModSeqProvider modSeqProvider, MailboxSession mailboxSession, CassandraConfiguration cassandraConfiguration) {
         this.mailboxMapper = mailboxMapper;
         this.mailboxDAO = mailboxDAO;
         this.imapUidDAO = imapUidDAO;
@@ -86,6 +86,7 @@ public class CassandraMessageIdMapper implements MessageIdMapper {
         this.modSeqProvider = modSeqProvider;
         this.mailboxSession = mailboxSession;
         this.attachmentLoader = new AttachmentLoader(attachmentMapper);
+        this.cassandraConfiguration = cassandraConfiguration;
     }
 
     @Override
@@ -223,7 +224,7 @@ public class CassandraMessageIdMapper implements MessageIdMapper {
 
     private Stream<Pair<MailboxId, UpdatedFlags>> flagsUpdateWithRetry(Flags newState, MessageManager.FlagsUpdateMode updateMode, MailboxId mailboxId, MessageId messageId) {
         try {
-            Pair<Flags, ComposedMessageIdWithMetaData> pair = new FunctionRunnerWithRetry(MAX_RETRY)
+            Pair<Flags, ComposedMessageIdWithMetaData> pair = new FunctionRunnerWithRetry(cassandraConfiguration.getFlagsUpdateMessageIdMaxRetry())
                 .executeAndRetrieveObject(() -> tryFlagsUpdate(newState, updateMode, mailboxId, messageId));
             ComposedMessageIdWithMetaData composedMessageIdWithMetaData = pair.getRight();
             Flags oldFlags = pair.getLeft();

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
index 3e1bbbd..38a02d6 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
@@ -62,6 +62,7 @@ import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableSet;
 
 public class CassandraMessageIdToImapUidDAO {
@@ -75,9 +76,10 @@ public class CassandraMessageIdToImapUidDAO {
     private final PreparedStatement update;
     private final PreparedStatement selectAll;
     private final PreparedStatement select;
+    private CassandraUtils cassandraUtils;
 
     @Inject
-    public CassandraMessageIdToImapUidDAO(Session session, CassandraMessageId.Factory messageIdFactory) {
+    public CassandraMessageIdToImapUidDAO(Session session, CassandraMessageId.Factory messageIdFactory, CassandraUtils cassandraUtils) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
         this.messageIdFactory = messageIdFactory;
         this.delete = prepareDelete(session);
@@ -85,6 +87,12 @@ public class CassandraMessageIdToImapUidDAO {
         this.update = prepareUpdate(session);
         this.selectAll = prepareSelectAll(session);
         this.select = prepareSelect(session);
+        this.cassandraUtils = cassandraUtils;
+    }
+
+    @VisibleForTesting
+    public CassandraMessageIdToImapUidDAO(Session session, CassandraMessageId.Factory messageIdFactory) {
+        this(session, messageIdFactory, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
     }
 
     private PreparedStatement prepareDelete(Session session) {
@@ -185,7 +193,7 @@ public class CassandraMessageIdToImapUidDAO {
 
     public CompletableFuture<Stream<ComposedMessageIdWithMetaData>> retrieve(CassandraMessageId messageId, Optional<CassandraId> mailboxId) {
         return selectStatement(messageId, mailboxId)
-                .thenApply(resultSet -> CassandraUtils.convertToStream(resultSet)
+                .thenApply(resultSet -> cassandraUtils.convertToStream(resultSet)
                         .map(this::toComposedMessageIdWithMetadata));
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index 2a6e74d..55bf43d 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -32,6 +32,7 @@ import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
 import org.apache.commons.lang3.tuple.Pair;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.mailbox.ApplicableFlagBuilder;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxSession;
@@ -67,14 +68,11 @@ public class CassandraMessageMapper implements MessageMapper {
         .count(0L)
         .unseen(0L)
         .build();
-    public static final int EXPUNGE_BATCH_SIZE = 100;
-    public static final int UPDATE_FLAGS_BATCH_SIZE = 20;
     public static final Logger LOGGER = LoggerFactory.getLogger(CassandraMessageMapper.class);
 
     private final CassandraModSeqProvider modSeqProvider;
     private final MailboxSession mailboxSession;
     private final CassandraUidProvider uidProvider;
-    private final int maxRetries;
     private final CassandraMessageDAO messageDAO;
     private final CassandraMessageIdDAO messageIdDAO;
     private final CassandraMessageIdToImapUidDAO imapUidDAO;
@@ -85,16 +83,16 @@ public class CassandraMessageMapper implements MessageMapper {
     private final CassandraFirstUnseenDAO firstUnseenDAO;
     private final AttachmentLoader attachmentLoader;
     private final CassandraDeletedMessageDAO deletedMessageDAO;
+    private final CassandraConfiguration cassandraConfiguration;
 
     public CassandraMessageMapper(CassandraUidProvider uidProvider, CassandraModSeqProvider modSeqProvider,
-                                  MailboxSession mailboxSession, int maxRetries, CassandraAttachmentMapper attachmentMapper,
+                                  MailboxSession mailboxSession, CassandraAttachmentMapper attachmentMapper,
                                   CassandraMessageDAO messageDAO, CassandraMessageIdDAO messageIdDAO, CassandraMessageIdToImapUidDAO imapUidDAO,
                                   CassandraMailboxCounterDAO mailboxCounterDAO, CassandraMailboxRecentsDAO mailboxRecentDAO, CassandraApplicableFlagDAO applicableFlagDAO,
-                                  CassandraIndexTableHandler indexTableHandler, CassandraFirstUnseenDAO firstUnseenDAO, CassandraDeletedMessageDAO deletedMessageDAO) {
+                                  CassandraIndexTableHandler indexTableHandler, CassandraFirstUnseenDAO firstUnseenDAO, CassandraDeletedMessageDAO deletedMessageDAO, CassandraConfiguration cassandraConfiguration) {
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
         this.mailboxSession = mailboxSession;
-        this.maxRetries = maxRetries;
         this.messageDAO = messageDAO;
         this.messageIdDAO = messageIdDAO;
         this.imapUidDAO = imapUidDAO;
@@ -105,6 +103,7 @@ public class CassandraMessageMapper implements MessageMapper {
         this.attachmentLoader = new AttachmentLoader(attachmentMapper);
         this.applicableFlagDAO = applicableFlagDAO;
         this.deletedMessageDAO = deletedMessageDAO;
+        this.cassandraConfiguration = cassandraConfiguration;
     }
 
     @Override
@@ -230,7 +229,7 @@ public class CassandraMessageMapper implements MessageMapper {
 
         return deletedMessageDAO.retrieveDeletedMessage(mailboxId, messageRange)
             .join()
-            .collect(JamesCollectors.chunker(EXPUNGE_BATCH_SIZE))
+            .collect(JamesCollectors.chunker(cassandraConfiguration.getExpungeChunkSize()))
             .map(uidChunk -> expungeUidChunk(mailboxId, uidChunk))
             .flatMap(CompletableFuture::join)
             .collect(Guavate.toImmutableMap(MailboxMessage::getUid, SimpleMessageMetaData::new));
@@ -303,7 +302,7 @@ public class CassandraMessageMapper implements MessageMapper {
     private FlagsUpdateStageResult handleUpdatesStagedRetry(CassandraId mailboxId, FlagsUpdateCalculator flagUpdateCalculator, FlagsUpdateStageResult firstResult) {
         FlagsUpdateStageResult globalResult = firstResult;
         int retryCount = 0;
-        while (retryCount < maxRetries && globalResult.containsFailedResults()) {
+        while (retryCount < cassandraConfiguration.getFlagsUpdateMessageMaxRetry() && globalResult.containsFailedResults()) {
             retryCount++;
             FlagsUpdateStageResult stageResult = retryUpdatesStage(mailboxId, flagUpdateCalculator, globalResult.getFailed());
             globalResult = globalResult.keepSucceded().merge(stageResult);
@@ -323,7 +322,7 @@ public class CassandraMessageMapper implements MessageMapper {
     private FlagsUpdateStageResult runUpdateStage(CassandraId mailboxId, Stream<ComposedMessageIdWithMetaData> toBeUpdated, FlagsUpdateCalculator flagsUpdateCalculator) {
         Long newModSeq = modSeqProvider.nextModSeq(mailboxId).join().orElseThrow(() -> new RuntimeException("ModSeq generation failed for mailbox " + mailboxId.asUuid()));
 
-        return toBeUpdated.collect(JamesCollectors.chunker(UPDATE_FLAGS_BATCH_SIZE))
+        return toBeUpdated.collect(JamesCollectors.chunker(cassandraConfiguration.getFlagsUpdateChunkSize()))
             .map(uidChunk -> performUpdatesForChunk(mailboxId, flagsUpdateCalculator, newModSeq, uidChunk))
             .map(CompletableFuture::join)
             .reduce(FlagsUpdateStageResult.none(), FlagsUpdateStageResult::merge);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
index 1a6a885..986fc74 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
@@ -35,6 +35,7 @@ import java.util.concurrent.CompletionException;
 
 import javax.inject.Inject;
 
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
 import org.apache.james.mailbox.MailboxSession;
@@ -46,6 +47,7 @@ import org.apache.james.mailbox.store.mail.model.Mailbox;
 
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Supplier;
 
 public class CassandraModSeqProvider implements ModSeqProvider {
@@ -76,7 +78,6 @@ public class CassandraModSeqProvider implements ModSeqProvider {
         }
     }
 
-    private static final int DEFAULT_MAX_RETRY = 100000;
     private static final ModSeq FIRST_MODSEQ = new ModSeq(0);
 
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
@@ -85,14 +86,20 @@ public class CassandraModSeqProvider implements ModSeqProvider {
     private final PreparedStatement update;
     private final PreparedStatement insert;
 
-    public CassandraModSeqProvider(Session session, int maxRetry) {
+    @Inject
+    public CassandraModSeqProvider(Session session, CassandraConfiguration cassandraConfiguration) {
         this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
-        this.runner = new FunctionRunnerWithRetry(maxRetry);
+        this.runner = new FunctionRunnerWithRetry(cassandraConfiguration.getModSeqMaxRetry());
         this.insert = prepareInsert(session);
         this.update = prepareUpdate(session);
         this.select = prepareSelect(session);
     }
 
+    @VisibleForTesting
+    public CassandraModSeqProvider(Session session) {
+        this(session, CassandraConfiguration.DEFAULT_CONFIGURATION);
+    }
+
     private PreparedStatement prepareInsert(Session session) {
         return session.prepare(insertInto(TABLE_NAME)
             .value(NEXT_MODSEQ, bindMarker(NEXT_MODSEQ))
@@ -113,10 +120,7 @@ public class CassandraModSeqProvider implements ModSeqProvider {
             .where(eq(MAILBOX_ID, bindMarker(MAILBOX_ID))));
     }
 
-    @Inject
-    public CassandraModSeqProvider(Session session) {
-        this(session, DEFAULT_MAX_RETRY);
-    }
+
 
     @Override
     public long nextModSeq(MailboxSession mailboxSession, Mailbox mailbox) throws MailboxException {

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
index 4aeb483..8f738f4 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
@@ -34,6 +34,7 @@ import java.util.concurrent.CompletableFuture;
 
 import javax.inject.Inject;
 
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
 import org.apache.james.mailbox.MailboxSession;
@@ -47,9 +48,9 @@ import org.apache.james.util.OptionalConverter;
 
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
+import com.google.common.annotations.VisibleForTesting;
 
 public class CassandraUidProvider implements UidProvider {
-    private static final int DEFAULT_MAX_RETRY = 100000;
     private static final String CONDITION = "Condition";
 
     private final CassandraAsyncExecutor executor;
@@ -58,14 +59,20 @@ public class CassandraUidProvider implements UidProvider {
     private final PreparedStatement updateStatement;
     private final PreparedStatement selectStatement;
 
-    public CassandraUidProvider(Session session, int maxRetry) {
+    @Inject
+    public CassandraUidProvider(Session session, CassandraConfiguration cassandraConfiguration) {
         this.executor = new CassandraAsyncExecutor(session);
-        this.runner = new FunctionRunnerWithRetry(maxRetry);
+        this.runner = new FunctionRunnerWithRetry(cassandraConfiguration.getUidMaxRetry());
         this.selectStatement = prepareSelect(session);
         this.updateStatement = prepareUpdate(session);
         this.insertStatement = prepareInsert(session);
     }
 
+    @VisibleForTesting
+    public CassandraUidProvider(Session session) {
+        this(session, CassandraConfiguration.DEFAULT_CONFIGURATION);
+    }
+
     private PreparedStatement prepareSelect(Session session) {
         return session.prepare(select(NEXT_UID)
             .from(TABLE_NAME)
@@ -86,11 +93,6 @@ public class CassandraUidProvider implements UidProvider {
             .ifNotExists());
     }
 
-    @Inject
-    public CassandraUidProvider(Session session) {
-        this(session, DEFAULT_MAX_RETRY);
-    }
-
     @Override
     public MessageUid nextUid(MailboxSession mailboxSession, Mailbox mailbox) throws MailboxException {
         return nextUid(mailboxSession, mailbox.getMailboxId());

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
index 4f78655..a1ce340 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
@@ -42,9 +42,11 @@ import com.datastax.driver.core.querybuilder.QueryBuilder;
 
 public class CassandraSubscriptionMapper extends NonTransactionalMapper implements SubscriptionMapper {
     private final Session session;
+    private CassandraUtils cassandraUtils;
 
-    public CassandraSubscriptionMapper(Session session) {
+    public CassandraSubscriptionMapper(Session session, CassandraUtils cassandraUtils) {
         this.session = session;
+        this.cassandraUtils = cassandraUtils;
     }
 
     @Override
@@ -66,7 +68,7 @@ public class CassandraSubscriptionMapper extends NonTransactionalMapper implemen
 
     @Override
     public List<Subscription> findSubscriptionsForUser(String user) {
-        return CassandraUtils.convertToStream(
+        return cassandraUtils.convertToStream(
             session.execute(select(MAILBOX)
                 .from(TABLE_NAME)
                 .where(eq(USER, user))))
@@ -82,7 +84,7 @@ public class CassandraSubscriptionMapper extends NonTransactionalMapper implemen
     }
 
     public List<SimpleSubscription> list() {
-        return CassandraUtils.convertToStream(
+        return cassandraUtils.convertToStream(
             session.execute(select(FIELDS)
                 .from(TABLE_NAME)))
             .map((row) -> new SimpleSubscription(row.getString(USER), row.getString(MAILBOX)))

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
index d10b7c3..c34effb 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
@@ -48,7 +48,6 @@ import com.google.common.base.Throwables;
 public class CassandraMailboxManagerProvider {
     private static final int LIMIT_ANNOTATIONS = 3;
     private static final int LIMIT_ANNOTATION_SIZE = 30;
-    public static final int MAX_ACL_RETRY = 10;
 
     public static CassandraMailboxManager provideMailboxManager(Session session, CassandraTypesProvider cassandraTypesProvider) {
         CassandraUidProvider uidProvider = new CassandraUidProvider(session);
@@ -59,7 +58,7 @@ public class CassandraMailboxManagerProvider {
         CassandraMessageDAO messageDAO = new CassandraMessageDAO(session, cassandraTypesProvider);
         CassandraMailboxCounterDAO mailboxCounterDAO = new CassandraMailboxCounterDAO(session);
         CassandraMailboxRecentsDAO mailboxRecentsDAO = new CassandraMailboxRecentsDAO(session);
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(session, cassandraTypesProvider, MAX_ACL_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(session, cassandraTypesProvider);
         CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(session, cassandraTypesProvider);
         CassandraFirstUnseenDAO firstUnseenDAO = new CassandraFirstUnseenDAO(session);
         CassandraApplicableFlagDAO applicableFlagDAO = new CassandraApplicableFlagDAO(session);


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


[12/15] james-project git commit: JAMES-2090 Add soft asserts to CassandraConfiguration test

Posted by ad...@apache.org.
JAMES-2090 Add soft asserts to CassandraConfiguration test


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/54429834
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/54429834
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/54429834

Branch: refs/heads/master
Commit: 54429834c1c0e3f42be7dafb0e197fb52ac41984
Parents: a66c080
Author: benwa <bt...@linagora.com>
Authored: Thu Jul 6 08:45:02 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:48:54 2017 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraConfigurationTest.java   | 22 ++++++++++++--------
 1 file changed, 13 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/54429834/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java
index dec62ea..10f111e 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraConfigurationTest.java
@@ -21,6 +21,7 @@ package org.apache.james.backends.cassandra;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import org.assertj.core.api.JUnitSoftAssertions;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -32,6 +33,9 @@ public class CassandraConfigurationTest {
     @Rule
     public ExpectedException expectedException = ExpectedException.none();
 
+    @Rule
+    public final JUnitSoftAssertions softly = new JUnitSoftAssertions();
+
     @Test
     public void cassandraConfigurationShouldRespectBeanContract() {
         EqualsVerifier.forClass(CassandraConfiguration.class).verify();
@@ -211,15 +215,15 @@ public class CassandraConfigurationTest {
             .expungeChunkSize(expungeChunkSize)
             .build();
 
-        assertThat(configuration.getAclMaxRetry()).isEqualTo(aclMaxRetry);
-        assertThat(configuration.getModSeqMaxRetry()).isEqualTo(modSeqMaxRetry);
-        assertThat(configuration.getUidMaxRetry()).isEqualTo(uidMaxRetry);
-        assertThat(configuration.getFetchNextPageInAdvanceRow()).isEqualTo(fetchNextPageInAdvanceRow);
-        assertThat(configuration.getFlagsUpdateMessageMaxRetry()).isEqualTo(flagsUpdateMessageMaxRetry);
-        assertThat(configuration.getFlagsUpdateMessageIdMaxRetry()).isEqualTo(flagsUpdateMessageIdMaxRetry);
-        assertThat(configuration.getFlagsUpdateChunkSize()).isEqualTo(flagsUpdateChunkSize);
-        assertThat(configuration.getMessageReadChunkSize()).isEqualTo(messageReadChunkSize);
-        assertThat(configuration.getExpungeChunkSize()).isEqualTo(expungeChunkSize);
+        softly.assertThat(configuration.getAclMaxRetry()).isEqualTo(aclMaxRetry);
+        softly.assertThat(configuration.getModSeqMaxRetry()).isEqualTo(modSeqMaxRetry);
+        softly.assertThat(configuration.getUidMaxRetry()).isEqualTo(uidMaxRetry);
+        softly.assertThat(configuration.getFetchNextPageInAdvanceRow()).isEqualTo(fetchNextPageInAdvanceRow);
+        softly.assertThat(configuration.getFlagsUpdateMessageMaxRetry()).isEqualTo(flagsUpdateMessageMaxRetry);
+        softly.assertThat(configuration.getFlagsUpdateMessageIdMaxRetry()).isEqualTo(flagsUpdateMessageIdMaxRetry);
+        softly.assertThat(configuration.getFlagsUpdateChunkSize()).isEqualTo(flagsUpdateChunkSize);
+        softly.assertThat(configuration.getMessageReadChunkSize()).isEqualTo(messageReadChunkSize);
+        softly.assertThat(configuration.getExpungeChunkSize()).isEqualTo(expungeChunkSize);
     }
 
 }


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


[11/15] james-project git commit: JAMES-2090 Rename CassandraUtilsDefaultValue

Posted by ad...@apache.org.
JAMES-2090 Rename CassandraUtilsDefaultValue


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c8286d99
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c8286d99
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c8286d99

Branch: refs/heads/master
Commit: c8286d9937d622059fac33805d308d1ab00c564c
Parents: 366023f
Author: benwa <bt...@linagora.com>
Authored: Wed Jul 5 15:55:35 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:48:54 2017 +0700

----------------------------------------------------------------------
 .../apache/james/backends/cassandra/utils/CassandraUtils.java  | 2 +-
 .../cassandra/CassandraMailboxSessionMapperFactory.java        | 2 +-
 .../mailbox/cassandra/mail/CassandraDeletedMessageDAO.java     | 2 +-
 .../james/mailbox/cassandra/mail/CassandraMailboxDAO.java      | 3 +--
 .../james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java  | 2 +-
 .../mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java     | 2 +-
 .../james/mailbox/cassandra/mail/CassandraMessageIdDAO.java    | 2 +-
 .../mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java | 2 +-
 ...asedRegisteredDistributedMailboxDelegatingListenerTest.java | 6 +++---
 .../distributed/CassandraMailboxPathRegistrerMapperTest.java   | 4 ++--
 .../cassandra/user/CassandraSubscriptionMapperTest.java        | 2 +-
 .../mpt/managesieve/cassandra/host/CassandraHostSystem.java    | 2 +-
 .../apache/james/domainlist/cassandra/CassandraDomainList.java | 2 +-
 .../rrt/cassandra/CassandraRecipientRewriteTableTest.java      | 2 +-
 .../java/org/apache/james/rrt/cassandra/CassandraStepdefs.java | 2 +-
 .../james/user/cassandra/CassandraUsersRepositoryTest.java     | 2 +-
 16 files changed, 19 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
index c224b57..568b2bf 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
@@ -31,7 +31,7 @@ import com.datastax.driver.core.Row;
 
 public class CassandraUtils {
 
-    public static final CassandraUtils DEFAULT_CASSANDRA_UTILS = new CassandraUtils(CassandraConfiguration.DEFAULT_CONFIGURATION);
+    public static final CassandraUtils WITH_DEFAULT_CONFIGURATION = new CassandraUtils(CassandraConfiguration.DEFAULT_CONFIGURATION);
 
     private final CassandraConfiguration cassandraConfiguration;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
index dc0d622..0168e84 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
@@ -123,7 +123,7 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa
 
         this(uidProvider, modSeqProvider, session, messageDAO, messageIdDAO, imapUidDAO, mailboxCounterDAO,
              mailboxRecentsDAO, mailboxDAO, mailboxPathDAO, firstUnseenDAO, applicableFlagDAO, deletedMesageDAO,
-            CassandraUtils.DEFAULT_CASSANDRA_UTILS, CassandraConfiguration.DEFAULT_CONFIGURATION);
+            CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
index c86d1e0..f9a3803 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
@@ -75,7 +75,7 @@ public class CassandraDeletedMessageDAO {
 
     @VisibleForTesting
     public CassandraDeletedMessageDAO(Session session) {
-        this(session, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        this(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement prepareAllUidStatement(Session session) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
index ca6cfd7..fee0e15 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
@@ -37,7 +37,6 @@ import java.util.concurrent.CompletableFuture;
 import java.util.stream.Stream;
 
 import javax.inject.Inject;
-import javax.inject.Named;
 
 import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
@@ -87,7 +86,7 @@ public class CassandraMailboxDAO {
 
     @VisibleForTesting
     public CassandraMailboxDAO(Session session, CassandraTypesProvider typesProvider) {
-        this(session, typesProvider, CassandraUtils.DEFAULT_CASSANDRA_UTILS, CassandraConfiguration.DEFAULT_CONFIGURATION);
+        this(session, typesProvider, CassandraUtils.WITH_DEFAULT_CONFIGURATION, CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement prepareInsert(Session session) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
index 15d4a94..3ad6695 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
@@ -107,7 +107,7 @@ public class CassandraMailboxPathDAO {
 
     @VisibleForTesting
     public CassandraMailboxPathDAO(Session session, CassandraTypesProvider typesProvider) {
-        this(session, typesProvider, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        this(session, typesProvider, CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement prepareDelete(Session session) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
index f3264f4..738e7ac 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
@@ -60,7 +60,7 @@ public class CassandraMailboxRecentsDAO {
 
     @VisibleForTesting
     public CassandraMailboxRecentsDAO(Session session) {
-        this(session, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        this(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement createReadStatement(Session session) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
index 6f9c265..f32f0a0 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
@@ -100,7 +100,7 @@ public class CassandraMessageIdDAO {
 
     @VisibleForTesting
     public CassandraMessageIdDAO(Session session, CassandraMessageId.Factory messageIdFactory) {
-        this(session, messageIdFactory, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        this(session, messageIdFactory, CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement prepareDelete(Session session) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
index 38a02d6..ae1ffc1 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
@@ -92,7 +92,7 @@ public class CassandraMessageIdToImapUidDAO {
 
     @VisibleForTesting
     public CassandraMessageIdToImapUidDAO(Session session, CassandraMessageId.Factory messageIdFactory) {
-        this(session, messageIdFactory, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        this(session, messageIdFactory, CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     private PreparedStatement prepareDelete(Session session) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
index 88ebebc..efefb22 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
@@ -77,7 +77,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
             new CassandraMailboxPathRegisterMapper(
                 cassandra.getConf(),
                 cassandra.getTypesProvider(),
-                CassandraUtils.DEFAULT_CASSANDRA_UTILS,
+                CassandraUtils.WITH_DEFAULT_CONFIGURATION,
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
         registeredDelegatingMailboxListener1 = new RegisteredDelegatingMailboxListener(
@@ -92,7 +92,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
             new CassandraMailboxPathRegisterMapper(
                 cassandra.getConf(),
                 cassandra.getTypesProvider(),
-                CassandraUtils.DEFAULT_CASSANDRA_UTILS,
+                CassandraUtils.WITH_DEFAULT_CONFIGURATION,
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
         registeredDelegatingMailboxListener2 = new RegisteredDelegatingMailboxListener(
@@ -107,7 +107,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
             new CassandraMailboxPathRegisterMapper(
                 cassandra.getConf(),
                 cassandra.getTypesProvider(),
-                CassandraUtils.DEFAULT_CASSANDRA_UTILS,
+                CassandraUtils.WITH_DEFAULT_CONFIGURATION,
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
         registeredDelegatingMailboxListener3 = new RegisteredDelegatingMailboxListener(

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java
index 8ba28ac..3e66222 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java
@@ -48,7 +48,7 @@ public class CassandraMailboxPathRegistrerMapperTest {
     public void setUp() {
         mapper = new CassandraMailboxPathRegisterMapper(cassandra.getConf(),
             cassandra.getTypesProvider(),
-            CassandraUtils.DEFAULT_CASSANDRA_UTILS,
+            CassandraUtils.WITH_DEFAULT_CONFIGURATION,
             CASSANDRA_TIME_OUT_IN_S);
     }
 
@@ -112,7 +112,7 @@ public class CassandraMailboxPathRegistrerMapperTest {
         int verySmallTimeoutInSecond = 1;
         mapper = new CassandraMailboxPathRegisterMapper(cassandra.getConf(),
             cassandra.getTypesProvider(),
-            CassandraUtils.DEFAULT_CASSANDRA_UTILS,
+            CassandraUtils.WITH_DEFAULT_CONFIGURATION,
             verySmallTimeoutInSecond);
         mapper.doRegister(MAILBOX_PATH, TOPIC);
         Thread.sleep(2 * TimeUnit.SECONDS.toMillis(verySmallTimeoutInSecond));

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
index c194d90..a08b589 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
@@ -33,7 +33,7 @@ public class CassandraSubscriptionMapperTest extends SubscriptionMapperTest {
     @Override
     protected SubscriptionMapper createSubscriptionMapper() {
         cassandra.ensureAllTables();
-        return new CassandraSubscriptionMapper(cassandra.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        return new CassandraSubscriptionMapper(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
index d9bc5f9..3b24879 100644
--- a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
@@ -50,7 +50,7 @@ public class CassandraHostSystem extends JamesManageSieveHostSystem {
     }
 
     protected static UsersRepository createUsersRepository() {
-        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository(CASSANDRA_CLUSTER.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository(CASSANDRA_CLUSTER.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         cassandraUsersRepository.setEnableVirtualHosting(false);
         return cassandraUsersRepository;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
index c49956c..efbc554 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
@@ -87,7 +87,7 @@ public class CassandraDomainList extends AbstractDomainList {
 
     @VisibleForTesting
     CassandraDomainList(Session session) {
-        this(session, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        this(session, CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
index 525eb2a..e55ce6a 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
@@ -51,7 +51,7 @@ public class CassandraRecipientRewriteTableTest extends AbstractRecipientRewrite
 
     @Override
     protected AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
-        CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(cassandra.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         rrt.setLog(LoggerFactory.getLogger("MockLog"));
         rrt.configure(new DefaultConfigurationBuilder());
         return rrt;

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
index 61dc4a8..d6ce16f 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
@@ -52,7 +52,7 @@ public class CassandraStepdefs {
     }
 
     private AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
-        CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(cassandra.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         rrt.setLog(LoggerFactory.getLogger("MockLog"));
         rrt.configure(new DefaultConfigurationBuilder());
         return rrt;

http://git-wip-us.apache.org/repos/asf/james-project/blob/c8286d99/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
index 5fea737..326bc6b 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
@@ -37,6 +37,6 @@ public class CassandraUsersRepositoryTest extends AbstractUsersRepositoryTest {
     @Override
     protected AbstractUsersRepository getUsersRepository() throws Exception {
         cassandra = CassandraCluster.create(new CassandraUsersRepositoryModule());
-        return new CassandraUsersRepository(cassandra.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
+        return new CassandraUsersRepository(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
     }
 }


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


[10/15] james-project git commit: JAMES-2090 Add new Cassandra properties in sample docker configuration files

Posted by ad...@apache.org.
JAMES-2090 Add new Cassandra properties in sample docker configuration files


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5914a838
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5914a838
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5914a838

Branch: refs/heads/master
Commit: 5914a838769c94bc3aa918450e4bde7f64add833
Parents: 4695c7a
Author: benwa <bt...@linagora.com>
Authored: Wed Jul 5 11:18:50 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:48:54 2017 +0700

----------------------------------------------------------------------
 .../destination/conf/cassandra.properties            | 15 ++++++++++++++-
 .../cassandra/destination/conf/cassandra.properties  | 14 +++++++++++++-
 2 files changed, 27 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5914a838/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties b/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties
index 6070413..3b273e6 100644
--- a/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties
+++ b/dockerfiles/run/guice/cassandra-ldap/destination/conf/cassandra.properties
@@ -3,4 +3,17 @@ cassandra.nodes=cassandra
 cassandra.keyspace=apache_james
 cassandra.replication.factor=1
 cassandra.retryConnection.maxRetries=10
-cassandra.retryConnection.minDelay=5000
\ No newline at end of file
+cassandra.retryConnection.minDelay=5000
+
+
+## These low level tuning options controls performance related options in Cassandra related code
+## The default values are documented here. Understand the effects before editing.
+# mailbox.max.retry.acl=1000
+# mailbox.max.retry.modseq=100000
+# mailbox.max.retry.uid=100000
+# mailbox.max.retry.message.flags.update=1000
+# mailbox.max.retry.message.id.flags.update=1000
+# fetch.advance.row.count=1000
+# chunk.size.flags.update=20
+# chunk.size.message.read=100
+# chunk.size.expunge=100
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/5914a838/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties
----------------------------------------------------------------------
diff --git a/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties b/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties
index 42a9159..54540e4 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties
+++ b/dockerfiles/run/guice/cassandra/destination/conf/cassandra.properties
@@ -13,4 +13,16 @@ cassandra.retryConnection.minDelay=5000
 ## In ms. Should be higher than socket read timeout
 # cassandra.pooling.timeout=5000
 ## In seconds.
-# cassandra.pooling.heartbeat.timeout=30
\ No newline at end of file
+# cassandra.pooling.heartbeat.timeout=30
+
+## These low level tuning options controls performance related options in Cassandra related code
+## The default values are documented here. Understand the effects before editing.
+# mailbox.max.retry.acl=1000
+# mailbox.max.retry.modseq=100000
+# mailbox.max.retry.uid=100000
+# mailbox.max.retry.message.flags.update=1000
+# mailbox.max.retry.message.id.flags.update=1000
+# fetch.advance.row.count=1000
+# chunk.size.flags.update=20
+# chunk.size.message.read=100
+# chunk.size.expunge=100
\ No newline at end of file


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


[14/15] james-project git commit: JAMES-2090 Reindent cassandra backend pom.xml

Posted by ad...@apache.org.
JAMES-2090 Reindent cassandra backend pom.xml


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9277d504
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9277d504
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9277d504

Branch: refs/heads/master
Commit: 9277d50457c28b85343dcf676240f219498723d1
Parents: 5442983
Author: benwa <bt...@linagora.com>
Authored: Thu Jul 6 15:45:22 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 15:45:22 2017 +0700

----------------------------------------------------------------------
 backends-common/cassandra/pom.xml | 40 +++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9277d504/backends-common/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/pom.xml b/backends-common/cassandra/pom.xml
index 6810208..599419b 100644
--- a/backends-common/cassandra/pom.xml
+++ b/backends-common/cassandra/pom.xml
@@ -144,19 +144,19 @@
                         </exclusion>
                     </exclusions>
                 </dependency>
-		        <dependency>
-		            <groupId>com.google.guava</groupId>
-		            <artifactId>guava</artifactId>
-		        </dependency>
-			<dependency>
-			    <groupId>commons-lang</groupId>
-			    <artifactId>commons-lang</artifactId>
-			    <version>2.6</version>
-			</dependency>
-            <dependency>
-                <groupId>javax.inject</groupId>
-                <artifactId>javax.inject</artifactId>
-            </dependency>
+                <dependency>
+                    <groupId>com.google.guava</groupId>
+                    <artifactId>guava</artifactId>
+                </dependency>
+                <dependency>
+                    <groupId>commons-lang</groupId>
+                    <artifactId>commons-lang</artifactId>
+                    <version>2.6</version>
+                </dependency>
+                <dependency>
+                    <groupId>javax.inject</groupId>
+                    <artifactId>javax.inject</artifactId>
+                </dependency>
                 <dependency>
                     <groupId>net.javacrumbs.future-converter</groupId>
                     <artifactId>future-converter-java8-guava</artifactId>
@@ -174,13 +174,13 @@
                     <version>1.7.6</version>
                     <scope>test</scope>
                 </dependency>
-		        <dependency>
-		            <groupId>org.cassandraunit</groupId>
-		            <artifactId>cassandra-unit</artifactId>
-		            <version>2.1.9.2</version>
-		            <scope>test</scope>
-		        </dependency>
-		    </dependencies>
+                <dependency>
+                    <groupId>org.cassandraunit</groupId>
+                    <artifactId>cassandra-unit</artifactId>
+                    <version>2.1.9.2</version>
+                    <scope>test</scope>
+                </dependency>
+            </dependencies>
             <build>
                 <plugins>
                     <plugin>


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


[15/15] james-project git commit: Merge remote-tracking branch 'btellier/JAMES-2090'

Posted by ad...@apache.org.
Merge remote-tracking branch 'btellier/JAMES-2090'


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1dafd884
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1dafd884
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1dafd884

Branch: refs/heads/master
Commit: 1dafd8849c45d79f908a63efe8dbb789bf7dfad2
Parents: 1128983 9277d50
Author: Antoine Duprat <ad...@linagora.com>
Authored: Thu Jul 6 14:12:51 2017 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Thu Jul 6 14:12:51 2017 +0200

----------------------------------------------------------------------
 backends-common/cassandra/pom.xml               |  46 ++--
 .../cassandra/CassandraConfiguration.java       | 268 +++++++++++++++++++
 .../init/SpringStaticSessionFactory.java        |  36 ---
 .../cassandra/utils/CassandraUtils.java         |  24 +-
 .../utils/ZonedDateTimeRepresentation.java      |  19 +-
 .../cassandra/CassandraConfigurationTest.java   | 229 ++++++++++++++++
 .../destination/conf/cassandra.properties       |  15 +-
 .../destination/conf/cassandra.properties       |  14 +-
 .../CassandraMailboxSessionMapperFactory.java   |  28 +-
 .../CassandraMailboxPathRegisterMapper.java     |   6 +-
 .../cassandra/mail/CassandraACLMapper.java      |  10 +-
 .../mail/CassandraAnnotationMapper.java         |  26 +-
 .../mail/CassandraDeletedMessageDAO.java        |  17 +-
 .../cassandra/mail/CassandraMailboxDAO.java     |  23 +-
 .../cassandra/mail/CassandraMailboxMapper.java  |   9 +-
 .../cassandra/mail/CassandraMailboxPathDAO.java |  12 +-
 .../mail/CassandraMailboxRecentsDAO.java        |  12 +-
 .../cassandra/mail/CassandraMessageDAO.java     |  14 +-
 .../cassandra/mail/CassandraMessageIdDAO.java   |  12 +-
 .../mail/CassandraMessageIdMapper.java          |   9 +-
 .../mail/CassandraMessageIdToImapUidDAO.java    |  12 +-
 .../cassandra/mail/CassandraMessageMapper.java  |  17 +-
 .../cassandra/mail/CassandraModSeqProvider.java |  18 +-
 .../cassandra/mail/CassandraUidProvider.java    |  18 +-
 ...essageDeletedDuringFlagsUpdateException.java |  30 ---
 .../user/CassandraSubscriptionMapper.java       |   8 +-
 .../CassandraMailboxManagerProvider.java        |   3 +-
 .../cassandra/CassandraTestSystemFixture.java   |   3 +-
 ...istributedMailboxDelegatingListenerTest.java |   4 +
 ...CassandraMailboxPathRegistrerMapperTest.java |  11 +-
 .../cassandra/mail/CassandraACLMapperTest.java  |  18 +-
 .../cassandra/mail/CassandraMailboxDAOTest.java |   3 +-
 .../CassandraMailboxManagerAttachmentTest.java  |   4 +-
 .../CassandraMailboxMapperConcurrencyTest.java  |   6 +-
 .../mail/CassandraMailboxMapperTest.java        |   6 +-
 .../cassandra/mail/CassandraMapperProvider.java |   2 +-
 .../mail/CassandraModSeqProviderTest.java       |   7 +-
 .../mail/CassandraUidProviderTest.java          |   7 +-
 .../user/CassandraSubscriptionMapperTest.java   |   3 +-
 mpt/app/dependency-reduced-pom.xml              | 102 -------
 .../cassandra/host/CassandraHostSystem.java     |   3 +-
 .../cassandra/host/CassandraHostSystem.java     |   4 +-
 protocols/smtp/dependency-reduced-pom.xml       | 143 ----------
 .../modules/mailbox/CassandraMailboxModule.java |   4 -
 .../mailbox/CassandraSessionConfiguration.java  |   4 +-
 .../modules/mailbox/CassandraSessionModule.java |  44 ++-
 .../mailbox/CassandraSessionModuleTest.java     |  65 +++++
 .../modules/mailbox/cassandra.properties        |   9 +
 .../cassandra/CassandraDomainList.java          |  93 +++++--
 .../CassandraRecipientRewriteTable.java         | 105 +++++---
 .../cassandra/CassandraUsersRepository.java     | 123 ++++++---
 .../CassandraUsersRepositoryModule.java         |   3 +-
 .../cassandra/CassandraDomainListTest.java      |   3 +-
 .../CassandraRecipientRewriteTableTest.java     |   4 +-
 .../james/rrt/cassandra/CassandraStepdefs.java  |   4 +-
 .../cassandra/CassandraUsersRepositoryTest.java |   5 +-
 src/site/xdoc/server/config-cassandra.xml       |  18 ++
 57 files changed, 1154 insertions(+), 591 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1dafd884/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
----------------------------------------------------------------------
diff --cc mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
index d163233,dda89ec..8eb5136
--- 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
@@@ -37,13 -38,9 +38,12 @@@ import org.apache.james.mailbox.store.m
  import org.junit.After;
  import org.junit.Before;
  import org.junit.Test;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
  
  public class CassandraMailboxMapperTest {
 +    private static final Logger LOGGER = LoggerFactory.getLogger(CassandraMailboxMapperTest.class);
  
-     public static final int MAX_RETRY = 10;
      public static final int UID_VALIDITY = 52;
      public static final MailboxPath MAILBOX_PATH = new MailboxPath("#private", "user", "name");
      private CassandraCluster cassandra;


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


[03/15] james-project git commit: JAMES-2090 Add missing license

Posted by ad...@apache.org.
JAMES-2090 Add missing license


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/29fb5d30
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/29fb5d30
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/29fb5d30

Branch: refs/heads/master
Commit: 29fb5d30420a28555299f1153fea4821a09a61e4
Parents: 797dca1
Author: benwa <bt...@linagora.com>
Authored: Tue Jul 4 17:17:26 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Jul 5 11:36:37 2017 +0700

----------------------------------------------------------------------
 .../utils/ZonedDateTimeRepresentation.java       | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/29fb5d30/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentation.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentation.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentation.java
index f74cc03..d5a7c45 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentation.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentation.java
@@ -1,4 +1,21 @@
-
+/****************************************************************
+ * 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.backends.cassandra.utils;
 


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


[02/15] james-project git commit: JAMES-2090 Remove unused Cassandra-spring class

Posted by ad...@apache.org.
JAMES-2090 Remove unused Cassandra-spring class


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/797dca14
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/797dca14
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/797dca14

Branch: refs/heads/master
Commit: 797dca14fb8df57a89ce067cc5ead1d7491fd5b8
Parents: 96facc5
Author: benwa <bt...@linagora.com>
Authored: Tue Jul 4 17:09:10 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Jul 5 11:36:28 2017 +0700

----------------------------------------------------------------------
 .../init/SpringStaticSessionFactory.java        | 36 --------------------
 1 file changed, 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/797dca14/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java
deleted file mode 100644
index eb5d844..0000000
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java
+++ /dev/null
@@ -1,36 +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.backends.cassandra.init;
-
-import com.datastax.driver.core.Cluster;
-import com.datastax.driver.core.Session;
-import org.apache.james.backends.cassandra.components.CassandraModule;
-
-public class SpringStaticSessionFactory {
-
-    public static Session createSession(Cluster cluster, String keyspace, CassandraModule module) {
-        return new SessionWithInitializedTablesFactory(module).createSession(cluster, keyspace);
-    }
-
-    public static Session createSession(Cluster cluster, CassandraModule module) {
-        return new SessionWithInitializedTablesFactory(module).createSession(cluster);
-    }
-
-}
\ No newline at end of file


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


[04/15] james-project git commit: JAMES-2090 Cassandra guice should Inject CassandraConfiguration

Posted by ad...@apache.org.
http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
index 7028b36..a58b348 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
@@ -59,7 +59,6 @@ import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver;
 public class CassandraTestSystemFixture {
     
     public static final int MOD_SEQ = 452;
-    public static final int MAX_ACL_RETRY = 10;
     private static CassandraCluster cassandra;
     
     public static CassandraMailboxSessionMapperFactory createMapperFactory() {
@@ -74,7 +73,7 @@ public class CassandraTestSystemFixture {
         CassandraMailboxRecentsDAO mailboxRecentsDAO = new CassandraMailboxRecentsDAO(cassandra.getConf());
         CassandraApplicableFlagDAO applicableFlagDAO = new CassandraApplicableFlagDAO(cassandra.getConf());
 
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), MAX_ACL_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraFirstUnseenDAO firstUnseenDAO = new CassandraFirstUnseenDAO(cassandra.getConf());
         CassandraDeletedMessageDAO deletedMessageDAO = new CassandraDeletedMessageDAO(cassandra.getConf());

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
index e9b49fc..88ebebc 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest.java
@@ -24,6 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.util.TreeMap;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.modules.CassandraRegistrationModule;
@@ -76,6 +77,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
             new CassandraMailboxPathRegisterMapper(
                 cassandra.getConf(),
                 cassandra.getTypesProvider(),
+                CassandraUtils.DEFAULT_CASSANDRA_UTILS,
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
         registeredDelegatingMailboxListener1 = new RegisteredDelegatingMailboxListener(
@@ -90,6 +92,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
             new CassandraMailboxPathRegisterMapper(
                 cassandra.getConf(),
                 cassandra.getTypesProvider(),
+                CassandraUtils.DEFAULT_CASSANDRA_UTILS,
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
         registeredDelegatingMailboxListener2 = new RegisteredDelegatingMailboxListener(
@@ -104,6 +107,7 @@ public class CassandraBasedRegisteredDistributedMailboxDelegatingListenerTest {
             new CassandraMailboxPathRegisterMapper(
                 cassandra.getConf(),
                 cassandra.getTypesProvider(),
+                CassandraUtils.DEFAULT_CASSANDRA_UTILS,
                 CASSANDRA_TIME_OUT_IN_S),
             SCHEDULER_PERIOD_IN_S);
         registeredDelegatingMailboxListener3 = new RegisteredDelegatingMailboxListener(

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java
index 7cef1bc..8ba28ac 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/event/distributed/CassandraMailboxPathRegistrerMapperTest.java
@@ -20,6 +20,7 @@
 package org.apache.james.mailbox.cassandra.event.distributed;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.cassandra.modules.CassandraRegistrationModule;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.publisher.Topic;
@@ -45,7 +46,10 @@ public class CassandraMailboxPathRegistrerMapperTest {
 
     @Before
     public void setUp() {
-        mapper = new CassandraMailboxPathRegisterMapper(cassandra.getConf(), cassandra.getTypesProvider(), CASSANDRA_TIME_OUT_IN_S);
+        mapper = new CassandraMailboxPathRegisterMapper(cassandra.getConf(),
+            cassandra.getTypesProvider(),
+            CassandraUtils.DEFAULT_CASSANDRA_UTILS,
+            CASSANDRA_TIME_OUT_IN_S);
     }
 
     @After
@@ -106,7 +110,10 @@ public class CassandraMailboxPathRegistrerMapperTest {
     @Test
     public void entriesShouldExpire() throws Exception {
         int verySmallTimeoutInSecond = 1;
-        mapper = new CassandraMailboxPathRegisterMapper(cassandra.getConf(), cassandra.getTypesProvider(), verySmallTimeoutInSecond);
+        mapper = new CassandraMailboxPathRegisterMapper(cassandra.getConf(),
+            cassandra.getTypesProvider(),
+            CassandraUtils.DEFAULT_CASSANDRA_UTILS,
+            verySmallTimeoutInSecond);
         mapper.doRegister(MAILBOX_PATH, TOPIC);
         Thread.sleep(2 * TimeUnit.SECONDS.toMillis(verySmallTimeoutInSecond));
         assertThat(mapper.getTopics(MAILBOX_PATH)).isEmpty();

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
----------------------------------------------------------------------
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 ae68dac..ca9858c 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
@@ -31,6 +31,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.cassandra.CassandraId;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
@@ -47,7 +48,6 @@ import com.google.common.base.Throwables;
 public class CassandraACLMapperTest {
 
     public static final CassandraId MAILBOX_ID = CassandraId.of(UUID.fromString("464765a0-e4e7-11e4-aba4-710c1de3782b"));
-    public static final int MAX_RETRY = 100;
     private CassandraACLMapper cassandraACLMapper;
     private CassandraCluster cassandra;
     private CassandraAsyncExecutor cassandraAsyncExecutor;
@@ -58,7 +58,7 @@ public class CassandraACLMapperTest {
         cassandra = CassandraCluster.create(new CassandraAclModule());
         cassandra.ensureAllTables();
         cassandraAsyncExecutor = new CassandraAsyncExecutor(cassandra.getConf());
-        cassandraACLMapper = new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), cassandraAsyncExecutor, MAX_RETRY);
+        cassandraACLMapper = new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), cassandraAsyncExecutor, CassandraConfiguration.DEFAULT_CONFIGURATION);
         executor = Executors.newFixedThreadPool(2);
     }
 
@@ -69,18 +69,6 @@ public class CassandraACLMapperTest {
         cassandra.close();
     }
 
-    @Test(expected = IllegalArgumentException.class)
-    public void creatingACLMapperWithNegativeMaxRetryShouldFail() {
-        int maxRetry = -1;
-        new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), cassandraAsyncExecutor, maxRetry);
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void creatingACLMapperWithNullMaxRetryShouldFail() {
-        int maxRetry = 0;
-        new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), cassandraAsyncExecutor, maxRetry);
-    }
-
     @Test
     public void retrieveACLWhenPresentInBaseShouldReturnCorrespondingACL() throws Exception {
         cassandra.getConf().execute(
@@ -209,7 +197,7 @@ public class CassandraACLMapperTest {
             CassandraACLMapper aclMapper = new CassandraACLMapper(MAILBOX_ID,
                 cassandra.getConf(),
                 new CassandraAsyncExecutor(cassandra.getConf()),
-                MAX_RETRY,
+                CassandraConfiguration.DEFAULT_CONFIGURATION,
                 runnable);
             try {
                 aclMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java
index 3a90d4c..c1f8147 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java
@@ -40,7 +40,6 @@ import com.github.steveash.guavate.Guavate;
 
 public class CassandraMailboxDAOTest {
 
-    public static final int MAX_ACL_RETRY = 10;
     public static final int UID_VALIDITY_1 = 145;
     public static final int UID_VALIDITY_2 = 147;
     public static final MailboxPath NEW_MAILBOX_PATH = new MailboxPath(MailboxConstants.USER_NAMESPACE, "user", "xyz");
@@ -56,7 +55,7 @@ public class CassandraMailboxDAOTest {
         cassandra = CassandraCluster.create(new CassandraModuleComposite(new CassandraMailboxModule(), new CassandraAclModule()));
         cassandra.ensureAllTables();
 
-        testee = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), MAX_ACL_RETRY);
+        testee = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
         mailbox1 = new SimpleMailbox(new MailboxPath(MailboxConstants.USER_NAMESPACE, "user", "abcd"),
             UID_VALIDITY_1,
             CASSANDRA_ID_1);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index 75d4b4b..722e7f7 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -74,8 +74,6 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
         cassandra.close();
     }
 
-    public static final int MAX_ACL_RETRY = 10;
-
     private CassandraMailboxSessionMapperFactory mailboxSessionMapperFactory;
     private CassandraMailboxManager mailboxManager;
     private CassandraMailboxManager parseFailingMailboxManager;
@@ -83,7 +81,7 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage
     public CassandraMailboxManagerAttachmentTest() throws Exception {
         CassandraMessageId.Factory messageIdFactory = new CassandraMessageId.Factory();
 
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), MAX_ACL_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraFirstUnseenDAO firstUnseenDAO = new CassandraFirstUnseenDAO(cassandra.getConf());
         CassandraDeletedMessageDAO deletedMessageDAO = new CassandraDeletedMessageDAO(cassandra.getConf());

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java
index 749242e..bd849e9 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
@@ -38,7 +39,6 @@ import org.junit.Test;
 
 public class CassandraMailboxMapperConcurrencyTest {
 
-    public static final int MAX_RETRY = 10;
     public static final int UID_VALIDITY = 52;
     public static final MailboxPath MAILBOX_PATH = new MailboxPath("#private", "user", "name");
     public static final int THREAD_COUNT = 10;
@@ -51,9 +51,9 @@ public class CassandraMailboxMapperConcurrencyTest {
         cassandra = CassandraCluster.create(new CassandraModuleComposite(new CassandraMailboxModule(), new CassandraAclModule()));
         cassandra.ensureAllTables();
 
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), MAX_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        testee = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, MAX_RETRY);
+        testee = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
----------------------------------------------------------------------
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 22113d8..dda89ec 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
@@ -26,6 +26,7 @@ import java.util.Optional;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathDAO.CassandraIdAndPath;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
@@ -40,11 +41,8 @@ import org.junit.Test;
 
 public class CassandraMailboxMapperTest {
 
-    public static final int MAX_RETRY = 10;
     public static final int UID_VALIDITY = 52;
     public static final MailboxPath MAILBOX_PATH = new MailboxPath("#private", "user", "name");
-    public static final int THREAD_COUNT = 10;
-    public static final int OPERATION_COUNT = 10;
     private CassandraCluster cassandra;
     private CassandraMailboxPathDAO mailboxPathDAO;
     private CassandraMailboxMapper testee;
@@ -54,9 +52,9 @@ public class CassandraMailboxMapperTest {
         cassandra = CassandraCluster.create(new CassandraModuleComposite(new CassandraMailboxModule(), new CassandraAclModule()));
         cassandra.ensureAllTables();
 
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), MAX_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
         mailboxPathDAO = new CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        testee = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, MAX_RETRY);
+        testee = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, CassandraConfiguration.DEFAULT_CONFIGURATION);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
index c16e05d..74602f3 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
@@ -105,7 +105,7 @@ public class CassandraMapperProvider implements MapperProvider {
     }
 
     private CassandraMailboxSessionMapperFactory createMapperFactory() {
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), MAX_ACL_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraFirstUnseenDAO firstUnseenDAO = new CassandraFirstUnseenDAO(cassandra.getConf());
         CassandraDeletedMessageDAO deletedMessageDAO = new CassandraDeletedMessageDAO(cassandra.getConf());

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
index 81bff9e..8fcca84 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertEquals;
 import java.util.stream.LongStream;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
@@ -39,8 +40,6 @@ import com.github.fge.lambdas.Throwing;
 public class CassandraModSeqProviderTest {
 
     private CassandraCluster cassandra;
-
-    private static final int MAX_RETRY = 100;
     
     private CassandraModSeqProvider modSeqProvider;
     private CassandraMailboxMapper mapper;
@@ -55,9 +54,9 @@ public class CassandraModSeqProviderTest {
                     new CassandraModSeqModule()));
         cassandra.ensureAllTables();
         modSeqProvider = new CassandraModSeqProvider(cassandra.getConf());
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), MAX_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        mapper = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, MAX_RETRY);
+        mapper = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, CassandraConfiguration.DEFAULT_CONFIGURATION);
         MailboxPath path = new MailboxPath("gsoc", "ieugen", "Trash");
         mailbox = new SimpleMailbox(path, 1234);
         mapper.save(mailbox);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
index c93a1c4..7e61a92 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
@@ -24,6 +24,7 @@ import static org.assertj.guava.api.Assertions.assertThat;
 import java.util.stream.LongStream;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
@@ -45,8 +46,6 @@ public class CassandraUidProviderTest {
         new CassandraMailboxModule(),
         new CassandraUidModule()));
     
-    private static final int MAX_RETRY = 100;
-    
     private CassandraUidProvider uidProvider;
     private CassandraMailboxMapper mapper;
     private SimpleMailbox mailbox;
@@ -55,9 +54,9 @@ public class CassandraUidProviderTest {
     public void setUpClass() throws Exception {
         cassandra.ensureAllTables();
         uidProvider = new CassandraUidProvider(cassandra.getConf());
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider(), MAX_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(cassandra.getConf(), cassandra.getTypesProvider());
         CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(cassandra.getConf(), cassandra.getTypesProvider());
-        mapper = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, MAX_RETRY);
+        mapper = new CassandraMailboxMapper(cassandra.getConf(), mailboxDAO, mailboxPathDAO, CassandraConfiguration.DEFAULT_CONFIGURATION);
         MailboxPath path = new MailboxPath("gsoc", "ieugen", "Trash");
         mailbox = new SimpleMailbox(path, 1234);
         mapper.save(mailbox);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
index 8399756..c194d90 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
@@ -19,6 +19,7 @@
 package org.apache.james.mailbox.cassandra.user;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapperTest;
@@ -32,7 +33,7 @@ public class CassandraSubscriptionMapperTest extends SubscriptionMapperTest {
     @Override
     protected SubscriptionMapper createSubscriptionMapper() {
         cassandra.ensureAllTables();
-        return new CassandraSubscriptionMapper(cassandra.getConf());
+        return new CassandraSubscriptionMapper(cassandra.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index 7f6e645..79932dd 100644
--- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -79,7 +79,6 @@ public class CassandraHostSystem extends JamesImapHostSystem {
         Feature.USER_FLAGS_SUPPORT,
         Feature.QUOTA_SUPPORT,
         Feature.ANNOTATION_SUPPORT);
-    public static final int MAX_ACL_RETRY = 10;
 
     private final CassandraMailboxManager mailboxManager;
     private final CassandraCluster cassandraClusterSingleton;
@@ -112,7 +111,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
         CassandraMessageIdToImapUidDAO imapUidDAO = new CassandraMessageIdToImapUidDAO(session, messageIdFactory);
         CassandraMailboxCounterDAO mailboxCounterDAO = new CassandraMailboxCounterDAO(session);
         CassandraMailboxRecentsDAO mailboxRecentsDAO = new CassandraMailboxRecentsDAO(session);
-        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(session, typesProvider, MAX_ACL_RETRY);
+        CassandraMailboxDAO mailboxDAO = new CassandraMailboxDAO(session, typesProvider);
         CassandraMailboxPathDAO mailboxPathDAO = new CassandraMailboxPathDAO(session, typesProvider);
         CassandraFirstUnseenDAO firstUnseenDAO = new CassandraFirstUnseenDAO(session);
         CassandraApplicableFlagDAO applicableFlagDAO = new CassandraApplicableFlagDAO(session);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
index a771517..d9bc5f9 100644
--- a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
+++ b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
@@ -20,6 +20,7 @@
 package org.apache.james.mpt.managesieve.cassandra.host;
 
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mpt.host.JamesManageSieveHostSystem;
 import org.apache.james.sieve.cassandra.CassandraActiveScriptDAO;
 import org.apache.james.sieve.cassandra.CassandraSieveDAO;
@@ -49,8 +50,7 @@ public class CassandraHostSystem extends JamesManageSieveHostSystem {
     }
 
     protected static UsersRepository createUsersRepository() {
-        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository();
-        cassandraUsersRepository.setSession(CASSANDRA_CLUSTER.getConf());
+        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository(CASSANDRA_CLUSTER.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
         cassandraUsersRepository.setEnableVirtualHosting(false);
         return cassandraUsersRepository;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
----------------------------------------------------------------------
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 fc7c3cc..78221b7 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
@@ -75,10 +75,6 @@ public class CassandraMailboxModule extends AbstractModule {
         install(new DefaultEventModule());
         install(new CassandraQuotaModule());
 
-        bind(Integer.class)
-            .annotatedWith(com.google.inject.name.Names.named(CassandraMailboxDAO.MAX_ACL_RETRY))
-            .toInstance(CassandraMailboxSessionMapperFactory.DEFAULT_MAX_RETRY);
-
         bind(CassandraMailboxSessionMapperFactory.class).in(Scopes.SINGLETON);
         bind(CassandraMailboxManager.class).in(Scopes.SINGLETON);
         bind(NoMailboxPathLocker.class).in(Scopes.SINGLETON);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index 6208d52..9d5ca75 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -30,6 +30,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.backends.cassandra.init.CassandraZonedDateTimeModule;
@@ -37,6 +38,7 @@ import org.apache.james.backends.cassandra.init.ClusterBuilder;
 import org.apache.james.backends.cassandra.init.ClusterWithKeyspaceCreatedFactory;
 import org.apache.james.backends.cassandra.init.QueryLoggerConfiguration;
 import org.apache.james.backends.cassandra.init.SessionWithInitializedTablesFactory;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.store.BatchSizes;
 import org.apache.james.util.Host;
 import org.apache.james.utils.PropertiesProvider;
@@ -54,6 +56,7 @@ import com.datastax.driver.core.exceptions.NoHostAvailableException;
 import com.github.steveash.guavate.Guavate;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
+import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 import com.nurkiewicz.asyncretry.AsyncRetryExecutor;
@@ -77,6 +80,8 @@ public class CassandraSessionModule extends AbstractModule {
     @Override
     protected void configure() {
         bind(ScheduledExecutorService.class).toProvider(ScheduledExecutorServiceProvider.class);
+        bind(CassandraConfiguration.class).toInstance(CassandraConfiguration.DEFAULT_CONFIGURATION);
+        bind(CassandraUtils.class).in(Scopes.SINGLETON);
 
         Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
         cassandraDataDefinitions.addBinding().to(CassandraZonedDateTimeModule.class);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
index 10599a8..fbee908 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
@@ -28,7 +28,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.stream.Collectors;
 
-import javax.annotation.Resource;
 import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraConstants;
@@ -39,20 +38,27 @@ import org.apache.james.domainlist.cassandra.tables.CassandraDomainsTable;
 
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Session;
+import com.google.common.annotations.VisibleForTesting;
 
 public class CassandraDomainList extends AbstractDomainList {
 
-    private Session session;
+    private final Session session;
+    private final CassandraUtils cassandraUtils;
 
     @Inject
-    @Resource
-    public void setSession(Session session) {
+    public CassandraDomainList(Session session, CassandraUtils cassandraUtils) {
         this.session = session;
+        this.cassandraUtils = cassandraUtils;
+    }
+
+    @VisibleForTesting
+    CassandraDomainList(Session session) {
+        this(session, CassandraUtils.DEFAULT_CASSANDRA_UTILS);
     }
 
     @Override
     protected List<String> getDomainListInternal() throws DomainListException {
-        return CassandraUtils.convertToStream(session.execute(select(CassandraDomainsTable.DOMAIN).from(CassandraDomainsTable.TABLE_NAME)))
+        return cassandraUtils.convertToStream(session.execute(select(CassandraDomainsTable.DOMAIN).from(CassandraDomainsTable.TABLE_NAME)))
             .map(row -> row.getString(CassandraDomainsTable.DOMAIN))
             .collect(Collectors.toList());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
index e3d8824..f7b9251 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepository.java
@@ -55,12 +55,13 @@ public class CassandraUsersRepository extends AbstractUsersRepository {
 
     private static final String DEFAULT_ALGO_VALUE = "SHA1";
 
-    private Session session;
+    private final Session session;
+    private final CassandraUtils cassandraUtils;
 
     @Inject
-    @Resource
-    public void setSession(Session session) {
+    public CassandraUsersRepository(Session session, CassandraUtils cassandraUtils) {
         this.session = session;
+        this.cassandraUtils = cassandraUtils;
     }
     
     @Override
@@ -132,7 +133,7 @@ public class CassandraUsersRepository extends AbstractUsersRepository {
         ResultSet result = session.execute(
                 select(REALNAME)
                 .from(TABLE_NAME));
-        return CassandraUtils.convertToStream(result)
+        return cassandraUtils.convertToStream(result)
             .map(row -> row.getString(REALNAME))
             .iterator();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CassandraDomainListTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CassandraDomainListTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CassandraDomainListTest.java
index 802d92d..411aa1b 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CassandraDomainListTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CassandraDomainListTest.java
@@ -30,9 +30,8 @@ public class CassandraDomainListTest extends AbstractDomainListTest {
 
     @Override
     protected DomainList createDomainList() {
-        CassandraDomainList testee = new CassandraDomainList();
         cassandra = CassandraCluster.create(new CassandraDomainListModule());
-        testee.setSession(cassandra.getConf());
+        CassandraDomainList testee = new CassandraDomainList(cassandra.getConf());
         testee.setLog(LoggerFactory.getLogger(getClass()));
         testee.setDNSService(getDNSServer("localhost"));
         testee.setAutoDetect(false);

http://git-wip-us.apache.org/repos/asf/james-project/blob/0daadc62/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
index f9a3853..5fea737 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
@@ -20,6 +20,7 @@
 package org.apache.james.user.cassandra;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.user.lib.AbstractUsersRepository;
 import org.apache.james.user.lib.AbstractUsersRepositoryTest;
 import org.junit.After;
@@ -36,8 +37,6 @@ public class CassandraUsersRepositoryTest extends AbstractUsersRepositoryTest {
     @Override
     protected AbstractUsersRepository getUsersRepository() throws Exception {
         cassandra = CassandraCluster.create(new CassandraUsersRepositoryModule());
-        CassandraUsersRepository cassandraUsersRepository = new CassandraUsersRepository();
-        cassandraUsersRepository.setSession(cassandra.getConf());
-        return cassandraUsersRepository;
+        return new CassandraUsersRepository(cassandra.getConf(), CassandraUtils.DEFAULT_CASSANDRA_UTILS);
     }
 }


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


[13/15] james-project git commit: JAMES-2090 Remove dependency-reduced-pom.xml

Posted by ad...@apache.org.
JAMES-2090 Remove dependency-reduced-pom.xml


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a66c0806
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a66c0806
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a66c0806

Branch: refs/heads/master
Commit: a66c0806b94e82175ad1777cd05120fe1d71fcb6
Parents: c8286d9
Author: benwa <bt...@linagora.com>
Authored: Thu Jul 6 08:33:04 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:48:54 2017 +0700

----------------------------------------------------------------------
 mpt/app/dependency-reduced-pom.xml        | 102 ------------------
 protocols/smtp/dependency-reduced-pom.xml | 143 -------------------------
 2 files changed, 245 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a66c0806/mpt/app/dependency-reduced-pom.xml
----------------------------------------------------------------------
diff --git a/mpt/app/dependency-reduced-pom.xml b/mpt/app/dependency-reduced-pom.xml
deleted file mode 100644
index 9815884..0000000
--- a/mpt/app/dependency-reduced-pom.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <parent>
-    <artifactId>apache-james-mpt</artifactId>
-    <groupId>org.apache.james</groupId>
-    <version>3.0.0-beta6-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>apache-james-mpt-app</artifactId>
-  <name>Apache James MPT Application</name>
-  <description>Apache James Mail Protocol Tester (MPT) is a library providing a framework for the 
-scriptable functional testing of ASCII based line protocols. This application provides easy executable
-interfaces to the MPT library.</description>
-  <url>http://james.apache.org/mpt/app</url>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-shade-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <artifactSet>
-            <includes>
-              <include>commons-logging:commons-logging</include>
-              <include>commons-cli:commons-cli</include>
-              <include>junit:junit</include>
-              <include>${project.groupId}:apache-james-mpt-core</include>
-            </includes>
-          </artifactSet>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive>
-            <manifestEntries>
-              <Main-Class>org.apache.james.mpt.app.Main</Main-Class>
-              <Specification-Title>Apache James MPT Application</Specification-Title>
-              <Specification-Version>${project.version}</Specification-Version>
-              <Specification-Vendor>The Apache Software Foundation</Specification-Vendor>
-              <Implementation-Title>Apache James MPT Application</Implementation-Title>
-              <Implementation-Version>${project.version}</Implementation-Version>
-              <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
-              <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
-              <url>${project.url}</url>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>create-javadocs</id>
-            <phase>package</phase>
-            <goals>
-              <goal>javadoc</goal>
-              <goal>jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <profiles>
-    <profile>
-      <id>doclint-java8-disable</id>
-      <build>
-        <plugins>
-          <plugin>
-            <artifactId>maven-javadoc-plugin</artifactId>
-            <configuration>
-              <additionalparam>-Xdoclint:none</additionalparam>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.james</groupId>
-      <artifactId>apache-james-mpt-core</artifactId>
-      <version>3.0.0-beta6-SNAPSHOT</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>jmock</groupId>
-      <artifactId>jmock</artifactId>
-      <version>1.1.0</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
-

http://git-wip-us.apache.org/repos/asf/james-project/blob/a66c0806/protocols/smtp/dependency-reduced-pom.xml
----------------------------------------------------------------------
diff --git a/protocols/smtp/dependency-reduced-pom.xml b/protocols/smtp/dependency-reduced-pom.xml
deleted file mode 100644
index 51135a9..0000000
--- a/protocols/smtp/dependency-reduced-pom.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <parent>
-    <artifactId>protocols</artifactId>
-    <groupId>org.apache.james</groupId>
-    <version>3.0.0-beta6-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.james.protocols</groupId>
-  <artifactId>protocols-smtp</artifactId>
-  <packaging>bundle</packaging>
-  <name>Apache James :: Protocols :: SMTP</name>
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-shade-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <artifactSet>
-                <includes>
-                  <include>commons-codec:commons-codec</include>
-                </includes>
-              </artifactSet>
-              <filters>
-                <filter>
-                  <artifact>commons-codec:commons-codec</artifact>
-                  <excludes>
-                    <exclude>org/apache/commons/codec/*</exclude>
-                  </excludes>
-                  <includes>
-                    <include>org/apache/commons/codec/binary/*</include>
-                  </includes>
-                </filter>
-              </filters>
-              <relocations>
-                <relocation>
-                  <pattern>org.apache.commons.codec.binary</pattern>
-                  <shadedPattern>org.apache.james.protocols.smtp.util</shadedPattern>
-                </relocation>
-              </relocations>
-              <transformers>
-                <transformer />
-              </transformers>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.james</groupId>
-      <artifactId>james-server-util</artifactId>
-      <version>3.0.0-beta6-SNAPSHOT</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.james.protocols</groupId>
-      <artifactId>protocols-api</artifactId>
-      <version>3.0.0-beta6-SNAPSHOT</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.james.protocols</groupId>
-      <artifactId>protocols-api</artifactId>
-      <version>3.0.0-beta6-SNAPSHOT</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.james.protocols</groupId>
-      <artifactId>protocols-netty</artifactId>
-      <version>3.0.0-beta6-SNAPSHOT</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.james</groupId>
-      <artifactId>metrics-api</artifactId>
-      <version>3.0.0-beta6-SNAPSHOT</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.google.guava</groupId>
-      <artifactId>guava</artifactId>
-      <version>18.0</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-net</groupId>
-      <artifactId>commons-net</artifactId>
-      <version>3.2</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>io.netty</groupId>
-      <artifactId>netty</artifactId>
-      <version>3.10.6.Final</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>javax.inject</groupId>
-      <artifactId>javax.inject</artifactId>
-      <version>1</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.10</version>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <artifactId>hamcrest-core</artifactId>
-          <groupId>org.hamcrest</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>com.sun.mail</groupId>
-      <artifactId>javax.mail</artifactId>
-      <version>1.5.4</version>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <artifactId>activation</artifactId>
-          <groupId>javax.activation</groupId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <version>1.7.1</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-</project>
-


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


[07/15] james-project git commit: JAMES-2090 Read configuration object from properties

Posted by ad...@apache.org.
JAMES-2090 Read configuration object from properties


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4695c7a7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4695c7a7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4695c7a7

Branch: refs/heads/master
Commit: 4695c7a7d55454561d6e36b2701cac1e03f83bec
Parents: 35ab6bd
Author: benwa <bt...@linagora.com>
Authored: Wed Jul 5 11:14:56 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 6 08:48:51 2017 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraConfiguration.java       | 45 ++++++++++++++
 .../cassandra/utils/CassandraUtils.java         |  3 +
 .../modules/mailbox/CassandraSessionModule.java | 39 +++++++++++-
 .../mailbox/CassandraSessionModuleTest.java     | 65 ++++++++++++++++++++
 .../modules/mailbox/cassandra.properties        |  9 +++
 5 files changed, 160 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4695c7a7/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java
index 3d985d4..ff3cad9 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/CassandraConfiguration.java
@@ -104,6 +104,51 @@ public class CassandraConfiguration {
             return this;
         }
 
+        public Builder messageReadChunkSize(Optional<Integer> value) {
+            value.ifPresent(this::messageReadChunkSize);
+            return this;
+        }
+
+        public Builder expungeChunkSize(Optional<Integer> value) {
+            value.ifPresent(this::expungeChunkSize);
+            return this;
+        }
+
+        public Builder flagsUpdateChunkSize(Optional<Integer> value) {
+            value.ifPresent(this::flagsUpdateChunkSize);
+            return this;
+        }
+
+        public Builder flagsUpdateMessageIdMaxRetry(Optional<Integer> value) {
+            value.ifPresent(this::flagsUpdateMessageIdMaxRetry);
+            return this;
+        }
+
+        public Builder flagsUpdateMessageMaxRetry(Optional<Integer> value) {
+            value.ifPresent(this::flagsUpdateMessageMaxRetry);
+            return this;
+        }
+
+        public Builder modSeqMaxRetry(Optional<Integer> value) {
+            value.ifPresent(this::modSeqMaxRetry);
+            return this;
+        }
+
+        public Builder uidMaxRetry(Optional<Integer> value) {
+            value.ifPresent(this::uidMaxRetry);
+            return this;
+        }
+
+        public Builder aclMaxRetry(Optional<Integer> value) {
+            value.ifPresent(this::aclMaxRetry);
+            return this;
+        }
+
+        public Builder fetchNextPageInAdvanceRow(Optional<Integer> value) {
+            value.ifPresent(this::fetchNextPageInAdvanceRow);
+            return this;
+        }
+
         public CassandraConfiguration build() {
             return new CassandraConfiguration(aclMaxRetry.orElse(DEFAULT_ACL_MAX_RETRY),
                 messageReadChunkSize.orElse(DEFAULT_MESSAGE_CHUNK_SIZE_ON_READ),

http://git-wip-us.apache.org/repos/asf/james-project/blob/4695c7a7/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
index adef1c0..c224b57 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraUtils.java
@@ -22,6 +22,8 @@ package org.apache.james.backends.cassandra.utils;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
+import javax.inject.Inject;
+
 import org.apache.james.backends.cassandra.CassandraConfiguration;
 
 import com.datastax.driver.core.ResultSet;
@@ -33,6 +35,7 @@ public class CassandraUtils {
 
     private final CassandraConfiguration cassandraConfiguration;
 
+    @Inject
     public CassandraUtils(CassandraConfiguration cassandraConfiguration) {
         this.cassandraConfiguration = cassandraConfiguration;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4695c7a7/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index f20aa98..9b4806f 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -54,6 +54,7 @@ import com.datastax.driver.core.QueryLogger;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.exceptions.NoHostAvailableException;
 import com.github.steveash.guavate.Guavate;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
@@ -76,11 +77,19 @@ public class CassandraSessionModule extends AbstractModule {
     private static final int DEFAULT_READ_TIMEOUT_MILLIS = 5000;
     private static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 5000;
     private static final String BATCHSIZES_FILE_NAME = "batchsizes";
+    private static final String MAILBOX_MAX_RETRY_ACL = "mailbox.max.retry.acl";
+    private static final String MAILBOX_MAX_RETRY_MODSEQ = "mailbox.max.retry.modseq";
+    private static final String MAILBOX_MAX_RETRY_UID = "mailbox.max.retry.uid";
+    private static final String MAILBOX_MAX_RETRY_MESSAGE_FLAGS_UPDATE = "mailbox.max.retry.message.flags.update";
+    private static final String MAILBOX_MAX_RETRY_MESSAGE_ID_FLAGS_UPDATE = "mailbox.max.retry.message.id.flags.update";
+    private static final String FETCH_ADVANCE_ROW_COUNT = "fetch.advance.row.count";
+    private static final String CHUNK_SIZE_FLAGS_UPDATE = "chunk.size.flags.update";
+    private static final String CHUNK_SIZE_MESSAGE_READ = "chunk.size.message.read";
+    private static final String CHUNK_SIZE_EXPUNGE = "chunk.size.expunge";
 
     @Override
     protected void configure() {
         bind(ScheduledExecutorService.class).toProvider(ScheduledExecutorServiceProvider.class);
-        bind(CassandraConfiguration.class).toInstance(CassandraConfiguration.DEFAULT_CONFIGURATION);
         bind(CassandraUtils.class).in(Scopes.SINGLETON);
 
         Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class);
@@ -243,6 +252,34 @@ public class CassandraSessionModule extends AbstractModule {
         return new AsyncRetryExecutor(scheduler);
     }
 
+    @VisibleForTesting
+    @Provides
+    @Singleton
+    CassandraConfiguration provideCassandraConfiguration(CassandraSessionConfiguration sessionConfiguration) throws ConfigurationException {
+        PropertiesConfiguration propertiesConfiguration = sessionConfiguration.getConfiguration();
+
+        return CassandraConfiguration.builder()
+            .aclMaxRetry(Optional.ofNullable(
+                propertiesConfiguration.getInteger(MAILBOX_MAX_RETRY_ACL, null)))
+            .modSeqMaxRetry(Optional.ofNullable(
+                propertiesConfiguration.getInteger(MAILBOX_MAX_RETRY_MODSEQ, null)))
+            .uidMaxRetry(Optional.ofNullable(
+                propertiesConfiguration.getInteger(MAILBOX_MAX_RETRY_UID, null)))
+            .flagsUpdateMessageMaxRetry(Optional.ofNullable(
+                propertiesConfiguration.getInteger(MAILBOX_MAX_RETRY_MESSAGE_FLAGS_UPDATE, null)))
+            .flagsUpdateMessageIdMaxRetry(Optional.ofNullable(
+                propertiesConfiguration.getInteger(MAILBOX_MAX_RETRY_MESSAGE_ID_FLAGS_UPDATE, null)))
+            .fetchNextPageInAdvanceRow(Optional.ofNullable(
+                propertiesConfiguration.getInteger(FETCH_ADVANCE_ROW_COUNT, null)))
+            .flagsUpdateChunkSize(Optional.ofNullable(
+                propertiesConfiguration.getInteger(CHUNK_SIZE_FLAGS_UPDATE, null)))
+            .messageReadChunkSize(Optional.ofNullable(
+                propertiesConfiguration.getInteger(CHUNK_SIZE_MESSAGE_READ, null)))
+            .expungeChunkSize(Optional.ofNullable(
+                propertiesConfiguration.getInteger(CHUNK_SIZE_EXPUNGE, null)))
+            .build();
+    }
+
     private PropertiesConfiguration getConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException {
         try {
             return propertiesProvider.getConfiguration("cassandra");

http://git-wip-us.apache.org/repos/asf/james-project/blob/4695c7a7/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java
new file mode 100644
index 0000000..893f76d
--- /dev/null
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/mailbox/CassandraSessionModuleTest.java
@@ -0,0 +1,65 @@
+/****************************************************************
+ * 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.modules.mailbox;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.james.backends.cassandra.CassandraConfiguration;
+import org.junit.Before;
+import org.junit.Test;
+
+public class CassandraSessionModuleTest {
+
+    private CassandraSessionModule cassandraSessionModule;
+
+    @Before
+    public void setUp() {
+        cassandraSessionModule = new CassandraSessionModule();
+    }
+
+    @Test
+    public void provideCassandraConfigurationShouldReturnDefaultOnEmptyConfigurationFile() throws ConfigurationException {
+        CassandraConfiguration configuration = cassandraSessionModule.provideCassandraConfiguration(PropertiesConfiguration::new);
+
+        assertThat(configuration).isEqualTo(CassandraConfiguration.DEFAULT_CONFIGURATION);
+    }
+
+    @Test
+    public void provideCassandraConfigurationShouldReturnRightConfigurationFile() throws ConfigurationException {
+        CassandraConfiguration configuration = cassandraSessionModule.provideCassandraConfiguration(
+            () -> new PropertiesConfiguration(ClassLoader.getSystemResource("modules/mailbox/cassandra.properties")));
+
+        assertThat(configuration)
+            .isEqualTo(CassandraConfiguration.builder()
+                .aclMaxRetry(1)
+                .modSeqMaxRetry(2)
+                .uidMaxRetry(3)
+                .flagsUpdateMessageMaxRetry(4)
+                .flagsUpdateMessageIdMaxRetry(5)
+                .fetchNextPageInAdvanceRow(6)
+                .flagsUpdateChunkSize(7)
+                .messageReadChunkSize(8)
+                .expungeChunkSize(9)
+                .build());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/4695c7a7/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties b/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties
new file mode 100644
index 0000000..217be79
--- /dev/null
+++ b/server/container/guice/cassandra-guice/src/test/resources/modules/mailbox/cassandra.properties
@@ -0,0 +1,9 @@
+mailbox.max.retry.acl=1
+mailbox.max.retry.modseq=2
+mailbox.max.retry.uid=3
+mailbox.max.retry.message.flags.update=4
+mailbox.max.retry.message.id.flags.update=5
+fetch.advance.row.count=6
+chunk.size.flags.update=7
+chunk.size.message.read=8
+chunk.size.expunge=9


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