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/02/15 13:36:15 UTC

[12/20] james-project git commit: JAMES-1925 Avoid CassandraACLMapper to instanciate CassandraAsyncExecutor on each request

JAMES-1925 Avoid CassandraACLMapper to instanciate CassandraAsyncExecutor on each request


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

Branch: refs/heads/master
Commit: b1dad43c51255f27ae1edc2f9b248c67f6e3dac5
Parents: 422209e
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Feb 14 13:27:01 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Wed Feb 15 13:12:38 2017 +0100

----------------------------------------------------------------------
 .../cassandra/mail/CassandraACLMapper.java       |  8 ++++----
 .../cassandra/mail/CassandraMailboxDAO.java      |  4 ++--
 .../cassandra/mail/CassandraMailboxMapper.java   |  7 +++++--
 .../cassandra/mail/CassandraACLMapperTest.java   | 19 ++++++++++++++-----
 4 files changed, 25 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b1dad43c/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 18b406a..68698ca 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
@@ -66,16 +66,16 @@ public class CassandraACLMapper {
 
     private static final Logger LOG = LoggerFactory.getLogger(CassandraACLMapper.class);
 
-    public CassandraACLMapper(CassandraId cassandraId, Session session, int maxRetry) {
-        this(cassandraId, session, maxRetry, () -> {});
+    public CassandraACLMapper(CassandraId cassandraId, Session session, CassandraAsyncExecutor cassandraAsyncExecutor, int maxRetry) {
+        this(cassandraId, session, cassandraAsyncExecutor, maxRetry, () -> {});
     }
 
-    public CassandraACLMapper(CassandraId cassandraId, Session session, int maxRetry, CodeInjector codeInjector) {
+    public CassandraACLMapper(CassandraId cassandraId, Session session, CassandraAsyncExecutor cassandraAsyncExecutor, int maxRetry, CodeInjector codeInjector) {
         Preconditions.checkArgument(maxRetry > 0);
         Preconditions.checkArgument(cassandraId != null);
         this.cassandraId = cassandraId;
         this.session = session;
-        this.executor = new CassandraAsyncExecutor(session);
+        this.executor = cassandraAsyncExecutor;
         this.maxRetry = maxRetry;
         this.codeInjector = codeInjector;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1dad43c/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 8b5868a..2efce2a 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
@@ -140,7 +140,7 @@ public class CassandraMailboxDAO {
     }
 
     private CompletableFuture<Optional<SimpleMailbox>> mailbox(CassandraId cassandraId, CompletableFuture<Optional<Row>> rowFuture) {
-        CompletableFuture<MailboxACL> aclCompletableFuture = new CassandraACLMapper(cassandraId, session, maxAclRetry).getACL();
+        CompletableFuture<MailboxACL> aclCompletableFuture = new CassandraACLMapper(cassandraId, session, executor, maxAclRetry).getACL();
         return rowFuture.thenApply(rowOptional -> rowOptional.map(this::mailboxFromRow))
             .thenApply(mailboxOptional -> {
                 mailboxOptional.ifPresent(mailbox -> mailbox.setMailboxId(cassandraId));
@@ -176,7 +176,7 @@ public class CassandraMailboxDAO {
 
     private CompletableFuture<SimpleMailbox> toMailboxWithAclFuture(SimpleMailbox mailbox) {
         CassandraId cassandraId = (CassandraId) mailbox.getMailboxId();
-        return new CassandraACLMapper(cassandraId, session, maxAclRetry).getACL()
+        return new CassandraACLMapper(cassandraId, session, executor, maxAclRetry).getACL()
             .thenApply(acl -> {
                 mailbox.setACL(acl);
                 return mailbox;

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1dad43c/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 4314148..d88a6e7 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
@@ -39,6 +39,7 @@ import java.util.stream.Stream;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.CassandraUtils;
 import org.apache.james.mailbox.cassandra.CassandraId;
 import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
@@ -72,11 +73,13 @@ public class CassandraMailboxMapper implements MailboxMapper {
     private final Session session;
     private final int maxRetry;
     private final CassandraTypesProvider typesProvider;
+    private final CassandraAsyncExecutor cassandraAsyncExecutor;
 
     public CassandraMailboxMapper(Session session, CassandraTypesProvider typesProvider, int maxRetry) {
         this.session = session;
         this.maxRetry = maxRetry;
         this.typesProvider = typesProvider;
+        this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
     }
 
     @Override
@@ -159,7 +162,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, maxRetry).updateACL(mailboxACLCommand);
+        new CassandraACLMapper(cassandraId, session, cassandraAsyncExecutor, maxRetry).updateACL(mailboxACLCommand);
     }
 
     @Override
@@ -176,7 +179,7 @@ public class CassandraMailboxMapper implements MailboxMapper {
             row.getLong(UIDVALIDITY));
         CassandraId mailboxId = CassandraId.of(row.getUUID(ID));
         mailbox.setMailboxId(mailboxId);
-        mailbox.setACL(new CassandraACLMapper(mailboxId, session, maxRetry).getACL().join());
+        mailbox.setACL(new CassandraACLMapper(mailboxId, session, cassandraAsyncExecutor, maxRetry).getACL().join());
         return mailbox;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1dad43c/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 ebff807..5e1d5a4 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.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.cassandra.CassandraId;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
 import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
@@ -49,13 +50,15 @@ public class CassandraACLMapperTest {
     public static final int MAX_RETRY = 100;
     private CassandraACLMapper cassandraACLMapper;
     private CassandraCluster cassandra;
+    private CassandraAsyncExecutor cassandraAsyncExecutor;
     private ExecutorService executor;
 
     @Before
     public void setUp() {
         cassandra = CassandraCluster.create(new CassandraAclModule());
         cassandra.ensureAllTables();
-        cassandraACLMapper = new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), MAX_RETRY);
+        cassandraAsyncExecutor = new CassandraAsyncExecutor(cassandra.getConf());
+        cassandraACLMapper = new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), cassandraAsyncExecutor, MAX_RETRY);
         executor = Executors.newFixedThreadPool(2);
     }
 
@@ -67,12 +70,14 @@ public class CassandraACLMapperTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void creatingACLMapperWithNegativeMaxRetryShouldFail() {
-        new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), -1);
+        int maxRetry = -1;
+        new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), cassandraAsyncExecutor, maxRetry);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void creatingACLMapperWithNullMaxRetryShouldFail() {
-        new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), 0);
+        int maxRetry = 0;
+        new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), cassandraAsyncExecutor, maxRetry);
     }
 
     @Test
@@ -194,13 +199,17 @@ public class CassandraACLMapperTest {
     private void awaitAll(Future<?>... futures) 
             throws InterruptedException, ExecutionException, TimeoutException {
         for (Future<?> future : futures) {
-            future.get(10l, TimeUnit.SECONDS);
+            future.get(10L, TimeUnit.SECONDS);
         }
     }
 
     private Future<Boolean> performACLUpdateInExecutor(ExecutorService executor, SimpleMailboxACL.SimpleMailboxACLEntryKey key, SimpleMailboxACL.Rfc4314Rights rights, CassandraACLMapper.CodeInjector runnable) {
         return executor.submit(() -> {
-            CassandraACLMapper aclMapper = new CassandraACLMapper(MAILBOX_ID, cassandra.getConf(), MAX_RETRY, runnable);
+            CassandraACLMapper aclMapper = new CassandraACLMapper(MAILBOX_ID,
+                cassandra.getConf(),
+                new CassandraAsyncExecutor(cassandra.getConf()),
+                MAX_RETRY,
+                runnable);
             try {
                 aclMapper.updateACL(new SimpleMailboxACL.SimpleMailboxACLCommand(key, MailboxACL.EditMode.ADD, rights));
             } catch (MailboxException exception) {


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