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 bt...@apache.org on 2018/07/17 10:25:04 UTC
[12/12] james-project git commit: MAILBOX-343 Concurrently creating
mailbox hierarchy should not fail
MAILBOX-343 Concurrently creating mailbox hierarchy should not fail
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/83c24e19
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/83c24e19
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/83c24e19
Branch: refs/heads/master
Commit: 83c24e192ff31c7a43b4144413d5956cf00171dc
Parents: 0262feb
Author: benwa <bt...@linagora.com>
Authored: Sat Jul 14 16:28:29 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 17 17:24:33 2018 +0700
----------------------------------------------------------------------
mailbox/api/pom.xml | 5 +++++
.../apache/james/mailbox/MailboxManagerTest.java | 16 ++++++++++++++++
.../james/mailbox/jpa/JPAMailboxManagerTest.java | 9 +++++++++
.../james/mailbox/store/StoreMailboxManager.java | 11 +++++++----
4 files changed, 37 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/83c24e19/mailbox/api/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/api/pom.xml b/mailbox/api/pom.xml
index 867178e..31d0cd5 100644
--- a/mailbox/api/pom.xml
+++ b/mailbox/api/pom.xml
@@ -38,6 +38,11 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>james-server-util</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>james-server-util-java8</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/83c24e19/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 2f42eec..796d80e 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -25,6 +25,7 @@ import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional;
+import java.util.concurrent.TimeUnit;
import javax.mail.Flags;
@@ -47,6 +48,7 @@ import org.apache.james.mailbox.model.SearchQuery;
import org.apache.james.mailbox.model.search.MailboxQuery;
import org.apache.james.mailbox.util.EventCollector;
import org.apache.james.mime4j.dom.Message;
+import org.apache.james.util.concurrency.ConcurrentTestRunner;
import org.assertj.core.api.JUnitSoftAssertions;
import org.junit.Assume;
import org.junit.Rule;
@@ -951,4 +953,18 @@ public abstract class MailboxManagerTest {
assertThatCode(() -> mailboxManager.copyMessages(MessageRange.all(), inbox, inbox, session))
.doesNotThrowAnyException();
}
+
+ @Test
+ public void creatingConcurrentlyMailboxesWithSameParentShouldNotFail() throws Exception {
+ MailboxSession session = mailboxManager.createSystemSession(USER_1);
+ String mailboxName = "a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z";
+
+ ConcurrentTestRunner testRunner = ConcurrentTestRunner.builder()
+ .threadCount(10)
+ .build(
+ (a, b) -> mailboxManager.createMailbox(MailboxPath.forUser(USER_1, mailboxName + a), session))
+ .run();
+ testRunner.awaitTermination(1, TimeUnit.MINUTES);
+ testRunner.assertNoException();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/83c24e19/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
index 3c75021..5164cf7 100644
--- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
+++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
@@ -27,6 +27,8 @@ import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
import org.junit.After;
import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
public class JPAMailboxManagerTest extends MailboxManagerTest {
@@ -53,4 +55,11 @@ public class JPAMailboxManagerTest extends MailboxManagerTest {
JPA_TEST_CLUSTER.clear(JPAMailboxFixture.MAILBOX_TABLE_NAMES);
}
+ @Ignore("MAILBOX-343")
+ @Test
+ @Override
+ public void creatingConcurrentlyMailboxesWithSameParentShouldNotFail() {
+
+ }
+
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/83c24e19/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index da20bea..31307fa 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -505,10 +505,13 @@ public class StoreMailboxManager implements MailboxManager {
if (!mailboxExists(mailbox, mailboxSession)) {
Mailbox m = doCreateMailbox(mailbox, mailboxSession);
MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
- mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(m))));
-
- // notify listeners
- dispatcher.mailboxAdded(mailboxSession, m);
+ try {
+ mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(m))));
+ // notify listeners
+ dispatcher.mailboxAdded(mailboxSession, m);
+ } catch (MailboxExistsException e) {
+ LOGGER.info("{} mailbox was created concurrently", m.generateAssociatedPath());
+ }
}
return null;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org