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 <[email protected]> Authored: Tue Feb 14 13:27:01 2017 +0700 Committer: Antoine Duprat <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
