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 2017/05/30 08:33:19 UTC
[1/3] james-project git commit: JAMES-2038 Move collect out of future
Repository: james-project
Updated Branches:
refs/heads/master 09c9d34c6 -> 9505324c1
JAMES-2038 Move collect out of future
A bug exists: Datastax driver hangs when collecting in a future.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/12ac91f4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/12ac91f4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/12ac91f4
Branch: refs/heads/master
Commit: 12ac91f4ba80adc809c8b8e68fa913fa058df931
Parents: 09c9d34
Author: benwa <bt...@linagora.com>
Authored: Mon May 29 07:59:29 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue May 30 15:31:34 2017 +0700
----------------------------------------------------------------------
.../mail/CassandraMailboxRecentsDAO.java | 6 ++--
.../cassandra/mail/CassandraMessageMapper.java | 3 +-
.../mail/CassandraIndexTableHandlerTest.java | 18 ++++++----
.../mail/CassandraMailboxRecentDAOTest.java | 38 ++++++++++++++++----
4 files changed, 48 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/12ac91f4/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 06df836..48a6a9c 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
@@ -27,6 +27,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
import java.util.List;
import java.util.concurrent.CompletableFuture;
+import java.util.stream.Stream;
import javax.inject.Inject;
@@ -78,12 +79,11 @@ public class CassandraMailboxRecentsDAO {
.value(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID, bindMarker(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID)));
}
- public CompletableFuture<List<MessageUid>> getRecentMessageUidsInMailbox(CassandraId mailboxId) {
+ public CompletableFuture<Stream<MessageUid>> getRecentMessageUidsInMailbox(CassandraId mailboxId) {
return cassandraAsyncExecutor.execute(bindWithMailbox(mailboxId, readStatement))
.thenApply(CassandraUtils::convertToStream)
.thenApply(stream -> stream.map(row -> row.getLong(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID)))
- .thenApply(stream -> stream.map(MessageUid::of))
- .thenApply(stream -> stream.collect(Guavate.toImmutableList()));
+ .thenApply(stream -> stream.map(MessageUid::of));
}
private BoundStatement bindWithMailbox(CassandraId mailboxId, PreparedStatement statement) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/12ac91f4/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 8d00e77..b4ac929 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
@@ -202,7 +202,8 @@ public class CassandraMessageMapper implements MessageMapper {
public List<MessageUid> findRecentMessageUidsInMailbox(Mailbox mailbox) throws MailboxException {
CassandraId mailboxId = (CassandraId) mailbox.getMailboxId();
return mailboxRecentDAO.getRecentMessageUidsInMailbox(mailboxId)
- .join();
+ .join()
+ .collect(Guavate.toImmutableList());
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/12ac91f4/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
index b82fb4a..e1b9f34 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
@@ -149,7 +149,8 @@ public class CassandraIndexTableHandlerTest {
testee.updateIndexOnAdd(message, MAILBOX_ID).join();
- assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join())
+ assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join()
+ .collect(Guavate.toImmutableList()))
.isEmpty();
}
@@ -161,7 +162,8 @@ public class CassandraIndexTableHandlerTest {
testee.updateIndexOnAdd(message, MAILBOX_ID).join();
- assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join())
+ assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join()
+ .collect(Guavate.toImmutableList()))
.containsOnly(MESSAGE_UID);
}
@@ -232,7 +234,8 @@ public class CassandraIndexTableHandlerTest {
MODSEQ),
MAILBOX_ID).join();
- assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join())
+ assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join()
+ .collect(Guavate.toImmutableList()))
.isEmpty();
}
@@ -250,7 +253,8 @@ public class CassandraIndexTableHandlerTest {
MODSEQ),
MAILBOX_ID).join();
- assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join())
+ assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join()
+ .collect(Guavate.toImmutableList()))
.isEmpty();
}
@@ -476,7 +480,8 @@ public class CassandraIndexTableHandlerTest {
.modSeq(MODSEQ)
.build()).join();
- assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join())
+ assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join()
+ .collect(Guavate.toImmutableList()))
.containsOnly(MESSAGE_UID);
}
@@ -495,7 +500,8 @@ public class CassandraIndexTableHandlerTest {
.modSeq(MODSEQ)
.build()).join();
- assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join())
+ assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join()
+ .collect(Guavate.toImmutableList()))
.isEmpty();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/12ac91f4/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentDAOTest.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentDAOTest.java
index 81bb313..0517b4f 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentDAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentDAOTest.java
@@ -21,14 +21,19 @@ package org.apache.james.mailbox.cassandra.mail;
import static org.assertj.core.api.Assertions.assertThat;
+import java.util.stream.IntStream;
+
import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.cassandra.CassandraId;
import org.apache.james.mailbox.cassandra.modules.CassandraMailboxRecentsModule;
+import org.apache.james.util.FluentFutureStream;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import com.github.steveash.guavate.Guavate;
+
public class CassandraMailboxRecentDAOTest {
public static final MessageUid UID1 = MessageUid.of(36L);
public static final MessageUid UID2 = MessageUid.of(37L);
@@ -52,14 +57,16 @@ public class CassandraMailboxRecentDAOTest {
@Test
public void getRecentMessageUidsInMailboxShouldBeEmptyByDefault() throws Exception {
- assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()).isEmpty();
+ assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()
+ .collect(Guavate.toImmutableList())).isEmpty();
}
@Test
public void addToRecentShouldAddUidWhenEmpty() throws Exception {
testee.addToRecent(CASSANDRA_ID, UID1).join();
- assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()).containsOnly(UID1);
+ assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()
+ .collect(Guavate.toImmutableList())).containsOnly(UID1);
}
@Test
@@ -68,14 +75,16 @@ public class CassandraMailboxRecentDAOTest {
testee.removeFromRecent(CASSANDRA_ID, UID1).join();
- assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()).isEmpty();
+ assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()
+ .collect(Guavate.toImmutableList())).isEmpty();
}
@Test
public void removeFromRecentShouldNotFailIfNotExisting() throws Exception {
testee.removeFromRecent(CASSANDRA_ID, UID1).join();
- assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()).isEmpty();
+ assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()
+ .collect(Guavate.toImmutableList())).isEmpty();
}
@Test
@@ -84,7 +93,8 @@ public class CassandraMailboxRecentDAOTest {
testee.addToRecent(CASSANDRA_ID, UID2).join();
- assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()).containsOnly(UID1, UID2);
+ assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()
+ .collect(Guavate.toImmutableList())).containsOnly(UID1, UID2);
}
@Test
@@ -94,7 +104,8 @@ public class CassandraMailboxRecentDAOTest {
testee.removeFromRecent(CASSANDRA_ID, UID2).join();
- assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()).containsOnly(UID1);
+ assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()
+ .collect(Guavate.toImmutableList())).containsOnly(UID1);
}
@Test
@@ -102,6 +113,19 @@ public class CassandraMailboxRecentDAOTest {
testee.addToRecent(CASSANDRA_ID, UID1).join();
testee.addToRecent(CASSANDRA_ID, UID1).join();
- assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()).containsOnly(UID1);
+ assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()
+ .collect(Guavate.toImmutableList())).containsOnly(UID1);
+ }
+
+ @Test
+ public void getRecentMessageUidsInMailboxShouldNotTimeoutWhenOverPagingLimit() throws Exception {
+ int pageSize = 5000;
+ int size = pageSize + 1000;
+ FluentFutureStream.of(IntStream.range(0, size)
+ .mapToObj(i -> testee.addToRecent(CASSANDRA_ID, MessageUid.of(i + 1))))
+ .join();
+
+ assertThat(testee.getRecentMessageUidsInMailbox(CASSANDRA_ID).join()
+ .collect(Guavate.toImmutableList())).hasSize(size);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[3/3] james-project git commit: JAMES-2033 RemoteDelivery should not
raise error on JMAP when message is moved out of OUTBOX
Posted by bt...@apache.org.
JAMES-2033 RemoteDelivery should not raise error on JMAP when message is moved out of OUTBOX
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9505324c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9505324c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9505324c
Branch: refs/heads/master
Commit: 9505324c1530cd5dd16c842120789ddb5175d632
Parents: 986059d
Author: quynhn <qn...@linagora.com>
Authored: Mon May 29 16:49:15 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue May 30 15:32:27 2017 +0700
----------------------------------------------------------------------
.../james/jmap/send/PostDequeueDecorator.java | 2 ++
.../jmap/send/PostDequeueDecoratorTest.java | 26 +++++++++++++++++---
2 files changed, 25 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9505324c/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
index 41add56..5631c83 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
@@ -80,6 +80,8 @@ public class PostDequeueDecorator extends MailQueueItemDecorator {
MailboxSession mailboxSession = mailboxManager.createSystemSession(username, LOG);
moveFromOutboxToSent(messageId, mailboxSession);
getMail().setAttribute(IS_DELIVERED, IS_DELIVERED);
+ } catch (MailShouldBeInOutboxException e) {
+ LOG.info("Message does not exist on Outbox anymore, it could have already been sent {}", e);
} catch (MailboxException e) {
throw new MailQueueException(e.getMessage(), e);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9505324c/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
index 568aac9..beb0210 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
@@ -34,7 +34,6 @@ import javax.mail.Flags;
import org.apache.james.jmap.DefaultMailboxes;
import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
-import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
import org.apache.james.jmap.utils.SystemMailboxesProviderImpl;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
@@ -42,6 +41,7 @@ import org.apache.james.mailbox.MessageIdManager;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.acl.GroupMembershipResolver;
+import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.inmemory.InMemoryMessageId;
import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
import org.apache.james.mailbox.model.ComposedMessageId;
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageResult;
import org.apache.james.mailbox.model.MessageResultIterator;
+import org.apache.james.queue.api.MailQueue;
import org.apache.james.queue.api.MailQueue.MailQueueItem;
import org.apache.mailet.Mail;
import org.apache.mailet.base.test.FakeMail;
@@ -100,8 +101,8 @@ public class PostDequeueDecoratorTest {
verify(mockedMailQueueItem).done(true);
}
- @Test(expected=MailShouldBeInOutboxException.class)
- public void doneShouldThrowWhenMessageIsNotInOutbox() throws Exception {
+ @Test
+ public void doneShouldNotThrowWhenMessageIsNotInOutbox() throws Exception {
MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER);
mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession);
@@ -266,4 +267,23 @@ public class PostDequeueDecoratorTest {
verifyNoMoreInteractions(messageIdManager);
}
+
+ @Test(expected = MailQueue.MailQueueException.class)
+ public void doneShouldThrowWhenMailboxException() throws Exception {
+ MessageIdManager messageIdManager = mock(MessageIdManager.class);
+ testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, new InMemoryMessageId.Factory(),
+ messageIdManager, new SystemMailboxesProviderImpl(mailboxManager));
+
+ MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER);
+ mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
+ mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession).get();
+ MessageManager messageManager = mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
+ ComposedMessageId messageId = messageManager.appendMessage(new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), mailboxSession, false, new Flags());
+ mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, messageId.getMessageId().serialize());
+ mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME);
+
+ when(messageIdManager.getMessages(eq(ImmutableList.of(messageId.getMessageId())), eq(FetchGroupImpl.MINIMAL), any(MailboxSession.class))).thenThrow(MailboxException.class);
+
+ testee.done(true);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/3] james-project git commit: JAMES-2036 Store should not get
RECENT and COUNTs when checking UID validity
Posted by bt...@apache.org.
JAMES-2036 Store should not get RECENT and COUNTs when checking UID validity
The FetchGroup level for this Metadata was too high
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/986059d7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/986059d7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/986059d7
Branch: refs/heads/master
Commit: 986059d78b6ebbfd78f98b6512d260dc325ca1dd
Parents: 12ac91f
Author: benwa <bt...@linagora.com>
Authored: Fri May 26 17:47:36 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue May 30 15:31:38 2017 +0700
----------------------------------------------------------------------
.../main/java/org/apache/james/imap/processor/AppendProcessor.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/986059d7/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
index 01db050..2d976c7 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
@@ -142,7 +142,7 @@ public class AppendProcessor extends AbstractMailboxProcessor<AppendRequest> {
}
// get folder UIDVALIDITY
- Long uidValidity = mailboxManager.getMailbox(mailboxPath, mailboxSession).getMetaData(false, mailboxSession, FetchGroup.NO_UNSEEN).getUidValidity();
+ Long uidValidity = mailboxManager.getMailbox(mailboxPath, mailboxSession).getMetaData(false, mailboxSession, FetchGroup.NO_COUNT).getUidValidity();
unsolicitedResponses(session, responder, false);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org