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/04/25 06:50:01 UTC

[1/3] james-project git commit: MAILBOX-294 Correct MessageIdMapper test

Repository: james-project
Updated Branches:
  refs/heads/master 2a4984533 -> d8e844e3c


MAILBOX-294 Correct MessageIdMapper test

Removing a flag that was not present lead to NOOP.


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

Branch: refs/heads/master
Commit: c68500119ef65dc5b978e61000465c54f93a8e00
Parents: 2a49845
Author: benwa <bt...@linagora.com>
Authored: Fri Apr 21 09:05:07 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Apr 21 17:51:20 2017 +0700

----------------------------------------------------------------------
 .../store/mail/model/MessageIdMapperTest.java       | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c6850011/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
index fed386c..b080eda 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
@@ -425,7 +425,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
 
         MessageId messageId = message1.getMessageId();
         Flags newFlags = new Flags(Flag.ANSWERED);
-        Map<MailboxId, UpdatedFlags> flags = sut.setFlags(messageId, ImmutableList.<MailboxId> of(), newFlags, MessageManager.FlagsUpdateMode.REMOVE);
+        Map<MailboxId, UpdatedFlags> flags = sut.setFlags(messageId, ImmutableList.<MailboxId> of(), newFlags, FlagsUpdateMode.REMOVE);
 
         assertThat(flags).isEmpty();
     }
@@ -433,7 +433,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
     @ContractTest
     public void setFlagsShouldReturnEmptyWhenMessageIdDoesntExist() throws Exception {
         MessageId unknownMessageId = mapperProvider.generateMessageId();
-        Map<MailboxId, UpdatedFlags> flags = sut.setFlags(unknownMessageId, ImmutableList.of(message1.getMailboxId()), new Flags(Flag.RECENT), MessageManager.FlagsUpdateMode.REMOVE);
+        Map<MailboxId, UpdatedFlags> flags = sut.setFlags(unknownMessageId, ImmutableList.of(message1.getMailboxId()), new Flags(Flag.RECENT), FlagsUpdateMode.REMOVE);
 
         assertThat(flags).isEmpty();
     }
@@ -448,7 +448,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
 
         MessageId messageId = message1.getMessageId();
 
-        Map<MailboxId, UpdatedFlags> flags = sut.setFlags(messageId, ImmutableList.of(message1.getMailboxId()), new Flags(Flag.ANSWERED), MessageManager.FlagsUpdateMode.ADD);
+        Map<MailboxId, UpdatedFlags> flags = sut.setFlags(messageId, ImmutableList.of(message1.getMailboxId()), new Flags(Flag.ANSWERED), FlagsUpdateMode.ADD);
 
         Flags newFlags = new FlagsBuilder()
             .add(Flag.RECENT)
@@ -520,7 +520,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
 
         MessageId messageId = message1.getMessageId();
         Flags newFlags = new Flags(Flag.ANSWERED);
-        sut.setFlags(messageId, ImmutableList.<MailboxId> of(), newFlags, MessageManager.FlagsUpdateMode.REMOVE);
+        sut.setFlags(messageId, ImmutableList.<MailboxId> of(), newFlags, FlagsUpdateMode.REMOVE);
 
         List<MailboxMessage> messages = sut.find(ImmutableList.of(messageId), MessageMapper.FetchType.Body);
         assertThat(messages).hasSize(1);
@@ -535,7 +535,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
         sut.save(message1);
 
         MessageId messageId = message1.getMessageId();
-        sut.setFlags(messageId, ImmutableList.of(message1.getMailboxId()), new Flags(Flag.ANSWERED), MessageManager.FlagsUpdateMode.REMOVE);
+        sut.setFlags(messageId, ImmutableList.of(message1.getMailboxId()), new Flags(Flag.ANSWERED), FlagsUpdateMode.ADD);
 
         List<MailboxMessage> messages = sut.find(ImmutableList.of(messageId), MessageMapper.FetchType.Body);
         assertThat(messages).hasSize(1);
@@ -553,7 +553,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
 
         MessageId messageId = message1.getMessageId();
         Flags newFlags = new Flags(Flag.ANSWERED);
-        sut.setFlags(messageId, ImmutableList.<MailboxId> of(), newFlags, MessageManager.FlagsUpdateMode.REMOVE);
+        sut.setFlags(messageId, ImmutableList.<MailboxId> of(), newFlags, FlagsUpdateMode.REMOVE);
 
         List<MailboxMessage> messages = sut.find(ImmutableList.of(messageId), MessageMapper.FetchType.Body);
         assertThat(messages).hasSize(1);
@@ -755,7 +755,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
         message1.setModSeq(mapperProvider.generateModSeq(benwaInboxMailbox));
         sut.save(message1);
 
-        sut.setFlags(message1.getMessageId(), ImmutableList.of(message1.getMailboxId()), new Flags(Flag.SEEN), MessageManager.FlagsUpdateMode.ADD);
+        sut.setFlags(message1.getMessageId(), ImmutableList.of(message1.getMailboxId()), new Flags(Flag.SEEN), FlagsUpdateMode.ADD);
 
         assertThat(messageMapper.countUnseenMessagesInMailbox(benwaInboxMailbox)).isEqualTo(0);
     }
@@ -767,7 +767,7 @@ public class MessageIdMapperTest<T extends MapperProvider> {
         message1.setFlags(new Flags(Flag.SEEN));
         sut.save(message1);
 
-        sut.setFlags(message1.getMessageId(), ImmutableList.of(message1.getMailboxId()), new Flags(Flag.SEEN), MessageManager.FlagsUpdateMode.REMOVE);
+        sut.setFlags(message1.getMessageId(), ImmutableList.of(message1.getMailboxId()), new Flags(Flag.SEEN), FlagsUpdateMode.REMOVE);
 
         assertThat(messageMapper.countUnseenMessagesInMailbox(benwaInboxMailbox)).isEqualTo(1);
     }


---------------------------------------------------------------------
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: MAILBOX-294 Fix Eclipse warnings

Posted by ad...@apache.org.
MAILBOX-294 Fix Eclipse warnings


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

Branch: refs/heads/master
Commit: d8e844e3cce6e3b89c259ac77edddced896a1534
Parents: f60dfe3
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Apr 24 09:59:54 2017 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Apr 25 08:47:53 2017 +0200

----------------------------------------------------------------------
 .../store/mail/model/MessageIdMapperTest.java   |  1 -
 .../mailbox/ElasticSearchMailboxModule.java     |  3 +--
 .../apache/james/DockerElasticSearchRule.java   |  6 ++---
 .../JamesServerWithRetryConnectionTest.java     | 19 ++++++--------
 .../apache/james/utils/RetryExecutorUtil.java   |  2 +-
 .../utils/FileConfigurationProviderTest.java    |  1 -
 .../james/utils/RetryExecutorUtilTest.java      | 26 ++++++++++++--------
 .../apache/james/modules/server/JMXServer.java  |  1 -
 .../java/org/apache/james/jmap/JMAPModule.java  |  1 -
 9 files changed, 28 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
index bbac7ad..e9089e7 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
@@ -31,7 +31,6 @@ import javax.mail.Flags.Flag;
 import javax.mail.util.SharedByteArrayInputStream;
 
 import org.apache.james.mailbox.FlagsBuilder;
-import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;

http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index d1b124b..e4a1011 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -32,7 +32,6 @@ import org.apache.james.backends.es.IndexCreationFactory;
 import org.apache.james.backends.es.IndexName;
 import org.apache.james.backends.es.NodeMappingFactory;
 import org.apache.james.backends.es.TypeName;
-import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticsearchConstants;
 import org.apache.james.mailbox.elasticsearch.MailboxMappingFactory;
@@ -41,8 +40,8 @@ import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.tika.extractor.TikaTextExtractor;
-import org.apache.james.utils.RetryExecutorUtil;
 import org.apache.james.utils.PropertiesProvider;
+import org.apache.james.utils.RetryExecutorUtil;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.client.transport.NoNodeAvailableException;
 import org.slf4j.Logger;

http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java
index 3dd19c2..3598b4f 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerElasticSearchRule.java
@@ -19,9 +19,9 @@
 
 package org.apache.james;
 
-import com.google.inject.Module;
+import java.util.Arrays;
+
 import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.james.modules.mailbox.CassandraSessionConfiguration;
 import org.apache.james.modules.mailbox.ElasticSearchConfiguration;
 import org.apache.james.util.streams.SwarmGenericContainer;
 import org.junit.runner.Description;
@@ -29,7 +29,7 @@ import org.junit.runners.model.Statement;
 import org.testcontainers.shaded.com.github.dockerjava.api.model.ExposedPort;
 import org.testcontainers.shaded.com.github.dockerjava.api.model.Ports.Binding;
 
-import java.util.Arrays;
+import com.google.inject.Module;
 
 
 public class DockerElasticSearchRule implements GuiceModuleTestRule {

http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
index 018bda1..ce18ad9 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
@@ -19,13 +19,7 @@
 
 package org.apache.james;
 
-import org.apache.james.util.streams.SwarmGenericContainer;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.testcontainers.DockerClientFactory;
-import org.testcontainers.shaded.com.google.common.base.Throwables;
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
@@ -36,16 +30,17 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import org.apache.james.util.streams.SwarmGenericContainer;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.testcontainers.shaded.com.google.common.base.Throwables;
 
 public class JamesServerWithRetryConnectionTest {
     private static final int IMAP_PORT = 1143;
     private static final long WAITING_TIME = TimeUnit.MILLISECONDS.convert(10, TimeUnit.SECONDS);
 
-    private static String getDockerHostIp() {
-        return DockerClientFactory.instance().dockerHostIpAddress();
-    }
-
     private final DockerCassandraRule dockerCassandraRule = new DockerCassandraRule();
     private final DockerElasticSearchRule dockerElasticSearchRule = new DockerElasticSearchRule();
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/server/container/guice/guice-common/src/main/java/org/apache/james/utils/RetryExecutorUtil.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/RetryExecutorUtil.java b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/RetryExecutorUtil.java
index 32b807e..8737ffe 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/RetryExecutorUtil.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/RetryExecutorUtil.java
@@ -26,7 +26,7 @@ public class RetryExecutorUtil {
     public static final int INITIAL_DELAY_MILLIS = 500;
     public static final int MULTIPLIER = 2;
 
-    public static AsyncRetryExecutor retryOnExceptions(AsyncRetryExecutor executor, int maxRetries, int minDelay, Class<? extends Throwable>... clazz) {
+    public static AsyncRetryExecutor retryOnExceptions(AsyncRetryExecutor executor, int maxRetries, int minDelay, Class<? extends Throwable> clazz) {
         return executor
             .retryOn(clazz)
             .withExponentialBackoff(INITIAL_DELAY_MILLIS, MULTIPLIER)

http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
index 04562f2..6318fc7 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
@@ -21,7 +21,6 @@ package org.apache.james.utils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.core.JamesServerResourceLoader;
 import org.apache.james.core.filesystem.FileSystemImpl;

http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/server/container/guice/guice-common/src/test/java/org/apache/james/utils/RetryExecutorUtilTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/RetryExecutorUtilTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/RetryExecutorUtilTest.java
index 32477ab..a9354f4 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/utils/RetryExecutorUtilTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/utils/RetryExecutorUtilTest.java
@@ -19,22 +19,23 @@
 
 package org.apache.james.utils;
 
-import com.nurkiewicz.asyncretry.AsyncRetryExecutor;
-import com.nurkiewicz.asyncretry.RetryExecutor;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.BDDMockito.given;
 
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.mockito.BDDMockito.given;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import com.nurkiewicz.asyncretry.AsyncRetryExecutor;
+import com.nurkiewicz.asyncretry.RetryExecutor;
 
 public class RetryExecutorUtilTest {
     private static final int MAX_RETRIES = 3;
@@ -57,6 +58,7 @@ public class RetryExecutorUtilTest {
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     public void retryOnExceptionsAndExecuteShouldRethrowWhenScheduledServiceAlwaysThrowException() throws Exception {
         given(serviceMock.faultyService())
                 .willThrow(IllegalArgumentException.class)
@@ -72,6 +74,7 @@ public class RetryExecutorUtilTest {
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     public void retryOnExceptionsAndExecuteShouldRetryWhenMatchExceptionAndSuccess() throws Exception {
         given(serviceMock.faultyService())
                 .willThrow(IllegalArgumentException.class)
@@ -84,6 +87,7 @@ public class RetryExecutorUtilTest {
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     public void retryOnExceptionsAndExecuteShouldNotRetryWhenDoesNotMatchException() throws Exception {
         given(serviceMock.faultyService())
                 .willThrow(IllegalStateException.class)
@@ -97,6 +101,7 @@ public class RetryExecutorUtilTest {
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     public void retryOnExceptionsAndExecuteShouldRetryWithMaxTimesAndReturnValue() throws Exception {
         given(serviceMock.faultyService())
                 .willThrow(IllegalStateException.class, IllegalStateException.class, IllegalStateException.class)
@@ -110,6 +115,7 @@ public class RetryExecutorUtilTest {
     }
 
     @Test
+    @SuppressWarnings("unchecked")
     public void retryOnExceptionsAndExecuteShouldFailIfFailMoreThanMaxRetry() throws Exception {
         given(serviceMock.faultyService()).
             willThrow(IllegalStateException.class, IllegalStateException.class, IllegalStateException.class, IllegalStateException.class).

http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
----------------------------------------------------------------------
diff --git a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
index 8be9f76..49b0893 100644
--- a/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
+++ b/server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
@@ -37,7 +37,6 @@ import javax.management.remote.JMXServiceURL;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.util.RestrictingRMISocketFactory;
 import org.apache.james.utils.PropertiesProvider;
 import org.slf4j.Logger;

http://git-wip-us.apache.org/repos/asf/james-project/blob/d8e844e3/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
index 73ef2f5..a43b0d6 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.commons.io.FileUtils;
 import org.apache.james.filesystem.api.FileSystem;


---------------------------------------------------------------------
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: MAILBOX-294 Avoid calling Cassandra when Noop flags update

Posted by ad...@apache.org.
MAILBOX-294 Avoid calling Cassandra when Noop flags update


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

Branch: refs/heads/master
Commit: f60dfe31fad132f65027af37a1a6f41af89ce168
Parents: c685001
Author: benwa <bt...@linagora.com>
Authored: Fri Apr 21 09:19:30 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Apr 25 08:47:53 2017 +0200

----------------------------------------------------------------------
 .../mail/CassandraMessageIdMapper.java          | 10 +++-
 .../cassandra/mail/CassandraMessageMapper.java  | 19 +++++-
 .../store/mail/model/MessageIdMapperTest.java   | 61 ++++++++++++++++++++
 .../store/mail/model/MessageMapperTest.java     | 27 +++++++++
 4 files changed, 114 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f60dfe31/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 bc950b7..bf3dc1d 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
@@ -263,14 +263,22 @@ public class CassandraMessageIdMapper implements MessageIdMapper {
             .join()
             .findFirst()
             .orElseThrow(MailboxDeleteDuringUpdateException::new);
+        Flags newFlags = new FlagsUpdateCalculator(newState, updateMode).buildNewFlags(oldComposedId.getFlags());
+        if (identicalFlags(oldComposedId, newFlags)) {
+            return Optional.of(Pair.of(oldComposedId.getFlags(), oldComposedId));
+        }
         ComposedMessageIdWithMetaData newComposedId = new ComposedMessageIdWithMetaData(
             oldComposedId.getComposedMessageId(),
-            new FlagsUpdateCalculator(newState, updateMode).buildNewFlags(oldComposedId.getFlags()),
+            newFlags,
             modSeqProvider.nextModSeq(mailboxSession, cassandraId));
 
         return updateFlags(oldComposedId, newComposedId);
     }
 
+    private boolean identicalFlags(ComposedMessageIdWithMetaData oldComposedId, Flags newFlags) {
+        return oldComposedId.getFlags().equals(newFlags);
+    }
+
     private Optional<Pair<Flags, ComposedMessageIdWithMetaData>> updateFlags(ComposedMessageIdWithMetaData oldComposedId, ComposedMessageIdWithMetaData newComposedId) {
         return imapUidDAO.updateMetadata(newComposedId, oldComposedId.getModSeq())
             .thenCompose(updateSuccess -> Optional.of(updateSuccess)

http://git-wip-us.apache.org/repos/asf/james-project/blob/f60dfe31/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 e12a93d..c00659a 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
@@ -333,12 +333,16 @@ public class CassandraMessageMapper implements MessageMapper {
             long oldModSeq = message.getModSeq();
             Flags oldFlags = message.createFlags();
             Flags newFlags = flagUpdateCalculator.buildNewFlags(oldFlags);
+
+            boolean involveFlagsChanges = !identicalFlags(oldFlags, newFlags);
+            long newModSeq = generateNewModSeqIfNeeded(mailbox, oldModSeq, involveFlagsChanges);
+
             message.setFlags(newFlags);
-            message.setModSeq(modSeqProvider.nextModSeq(mailboxSession, mailbox));
+            message.setModSeq(newModSeq);
             if (updateFlags(message, oldModSeq)) {
                 return Optional.of(UpdatedFlags.builder()
                     .uid(message.getUid())
-                    .modSeq(message.getModSeq())
+                    .modSeq(newModSeq)
                     .oldFlags(oldFlags)
                     .newFlags(newFlags)
                     .build());
@@ -350,6 +354,17 @@ public class CassandraMessageMapper implements MessageMapper {
         }
     }
 
+    private long generateNewModSeqIfNeeded(Mailbox mailbox, long oldModSeq, boolean involveFlagsChanges) throws MailboxException {
+        if (involveFlagsChanges) {
+            return modSeqProvider.nextModSeq(mailboxSession, mailbox);
+        }
+        return oldModSeq;
+    }
+
+    private boolean identicalFlags(Flags oldFlags, Flags newFlags) {
+        return oldFlags.equals(newFlags);
+    }
+
     private boolean updateFlags(MailboxMessage message, long oldModSeq) {
         ComposedMessageIdWithMetaData composedMessageIdWithMetaData = ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(new ComposedMessageId(message.getMailboxId(), message.getMessageId(), message.getUid()))

http://git-wip-us.apache.org/repos/asf/james-project/blob/f60dfe31/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
index b080eda..bbac7ad 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
@@ -773,6 +773,67 @@ public class MessageIdMapperTest<T extends MapperProvider> {
     }
 
     @ContractTest
+    public void setFlagsShouldNotUpdateModSeqWhenNoop() throws Exception {
+        message1.setUid(mapperProvider.generateMessageUid());
+        long modSeq = mapperProvider.generateModSeq(benwaInboxMailbox);
+        message1.setModSeq(modSeq);
+        message1.setFlags(new Flags(Flag.SEEN));
+        sut.save(message1);
+
+        sut.setFlags(message1.getMessageId(),
+            ImmutableList.of(message1.getMailboxId()),
+            new Flags(Flag.SEEN),
+            FlagsUpdateMode.ADD);
+
+        List<MailboxMessage> messages = sut.find(ImmutableList.of(message1.getMessageId()), MessageMapper.FetchType.Body);
+        assertThat(messages).hasSize(1);
+        assertThat(messages.get(0).getModSeq()).isEqualTo(modSeq);
+    }
+
+    @ContractTest
+    public void addingFlagToAMessageThatAlreadyHasThisFlagShouldResultInNoChange() throws Exception {
+        message1.setUid(mapperProvider.generateMessageUid());
+        long modSeq = mapperProvider.generateModSeq(benwaInboxMailbox);
+        message1.setModSeq(modSeq);
+        Flags flags = new Flags(Flag.SEEN);
+        message1.setFlags(flags);
+        sut.save(message1);
+
+        sut.setFlags(message1.getMessageId(),
+            ImmutableList.of(message1.getMailboxId()),
+            flags,
+            FlagsUpdateMode.ADD);
+
+        List<MailboxMessage> messages = sut.find(ImmutableList.of(message1.getMessageId()), MessageMapper.FetchType.Body);
+        assertThat(messages).hasSize(1);
+        assertThat(messages.get(0).createFlags()).isEqualTo(flags);
+    }
+
+    @ContractTest
+    public void setFlagsShouldReturnUpdatedFlagsWhenNoop() throws Exception {
+        message1.setUid(mapperProvider.generateMessageUid());
+        long modSeq = mapperProvider.generateModSeq(benwaInboxMailbox);
+        message1.setModSeq(modSeq);
+        Flags flags = new Flags(Flag.SEEN);
+        message1.setFlags(flags);
+        sut.save(message1);
+
+        Map<MailboxId, UpdatedFlags> mailboxIdUpdatedFlagsMap = sut.setFlags(message1.getMessageId(),
+            ImmutableList.of(message1.getMailboxId()),
+            flags,
+            FlagsUpdateMode.ADD);
+
+        assertThat(mailboxIdUpdatedFlagsMap)
+            .containsOnly(MapEntry.entry(message1.getMailboxId(),
+                UpdatedFlags.builder()
+                    .modSeq(modSeq)
+                    .uid(message1.getUid())
+                    .newFlags(flags)
+                    .oldFlags(flags)
+                    .build()));
+    }
+
+    @ContractTest
     public void countUnseenMessageShouldNotTakeCareOfOtherFlagsUpdates() throws Exception {
         message1.setUid(mapperProvider.generateMessageUid());
         message1.setModSeq(mapperProvider.generateModSeq(benwaInboxMailbox));

http://git-wip-us.apache.org/repos/asf/james-project/blob/f60dfe31/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index 8e8e494..955f39a 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -628,6 +628,16 @@ public class MessageMapperTest<T extends MapperProvider> {
     }
 
     @ContractTest
+    public void flagsAdditionShouldHaveNoEffectOnStoredFlagsWhenNoop() throws MailboxException {
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flags.Flag.FLAGGED), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid()));
+
+        messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flag.FLAGGED), FlagsUpdateMode.ADD), MessageRange.one(message1.getUid()));
+        assertThat(retrieveMessageFromStorage(message1))
+            .hasFlags(new FlagsBuilder().add(Flags.Flag.FLAGGED).build());
+    }
+
+    @ContractTest
     public void flagsRemovalShouldReturnAnUpdatedFlagHighlightingTheRemoval() throws MailboxException {
         saveMessages();
         messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new FlagsBuilder().add(Flags.Flag.FLAGGED, Flags.Flag.SEEN).build(), FlagsUpdateMode.REPLACE), MessageRange.one(message1.getUid()));
@@ -764,6 +774,23 @@ public class MessageMapperTest<T extends MapperProvider> {
     }
 
     @ContractTest
+    public void userFlagsUpdateShouldReturnCorrectUpdatedFlagsWhenNoop() throws Exception {
+        saveMessages();
+
+        assertThat(
+            messageMapper.updateFlags(benwaInboxMailbox,
+                new FlagsUpdateCalculator(new Flags(USER_FLAG), FlagsUpdateMode.REMOVE),
+                MessageRange.one(message1.getUid())))
+            .containsOnly(
+                UpdatedFlags.builder()
+                    .uid(message1.getUid())
+                    .modSeq(message1.getModSeq())
+                    .oldFlags(new Flags())
+                    .newFlags(new Flags())
+                    .build());
+    }
+
+    @ContractTest
     public void userFlagsUpdateShouldWorkInConcurrentEnvironment() throws Exception {
         saveMessages();
 


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