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/07/26 07:00:00 UTC
[2/3] james-project git commit: JAMES-2098 Optimize most flags
updates while moving messages with JMAP
JAMES-2098 Optimize most flags updates while moving messages with JMAP
It avoids reading messages before updating them to identity
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1d1eff41
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1d1eff41
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1d1eff41
Branch: refs/heads/master
Commit: 1d1eff4152a33e2624b6439e9ea5ac6ba0e31440
Parents: dbfc04c
Author: benwa <bt...@linagora.com>
Authored: Tue Jul 25 00:19:45 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Jul 26 13:55:26 2017 +0700
----------------------------------------------------------------------
.../methods/SetMessagesUpdateProcessor.java | 6 ++--
.../james/jmap/model/UpdateMessagePatch.java | 6 ++++
.../jmap/model/UpdateMessagePatchTest.java | 35 +++++++++++++++++++-
3 files changed, 44 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d1eff41/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
index 85a9668..53d58d4 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
@@ -117,8 +117,10 @@ public class SetMessagesUpdateProcessor implements SetMessagesProcessor {
private Stream<MailboxException> updateFlags(MessageId messageId, UpdateMessagePatch updateMessagePatch, MailboxSession mailboxSession, MessageResult messageResult) {
try {
- Flags newState = updateMessagePatch.applyToState(messageResult.getFlags());
- messageIdManager.setFlags(newState, MessageManager.FlagsUpdateMode.REPLACE, messageId, ImmutableList.of(messageResult.getMailboxId()), mailboxSession);
+ if (!updateMessagePatch.isFlagsIdentity()) {
+ Flags newState = updateMessagePatch.applyToState(messageResult.getFlags());
+ messageIdManager.setFlags(newState, MessageManager.FlagsUpdateMode.REPLACE, messageId, ImmutableList.of(messageResult.getMailboxId()), mailboxSession);
+ }
return Stream.of();
} catch (MailboxException e) {
return Stream.of(e);
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d1eff41/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
index cc0e184..32e3fe2 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
@@ -122,6 +122,12 @@ public class UpdateMessagePatch {
return isAnswered;
}
+ public boolean isFlagsIdentity() {
+ return !isAnswered.isPresent()
+ && !isFlagged.isPresent()
+ && !isUnread.isPresent();
+ }
+
public ImmutableList<ValidationResult> getValidationErrors() {
return validationErrors;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/1d1eff41/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java
index 0b60699..e97c49c 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java
@@ -19,7 +19,6 @@
package org.apache.james.jmap.model;
-
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Arrays;
@@ -80,4 +79,38 @@ public class UpdateMessagePatchTest {
assertThat(updatedFlags).containsExactly(Flags.Flag.SEEN);
}
+ @Test
+ public void isIdentityShouldReturnTrueWhenNoFlags() {
+ UpdateMessagePatch messagePatch = UpdateMessagePatch.builder().build();
+
+ assertThat(messagePatch.isFlagsIdentity()).isTrue();
+ }
+
+ @Test
+ public void isIdentityShouldReturnFalseWhenFlagsAnsweredUpdated() {
+ UpdateMessagePatch messagePatch = UpdateMessagePatch.builder()
+ .isAnswered(true)
+ .build();
+
+ assertThat(messagePatch.isFlagsIdentity()).isFalse();
+ }
+
+ @Test
+ public void isIdentityShouldReturnFalseWhenFlagsUnreadUpdated() {
+ UpdateMessagePatch messagePatch = UpdateMessagePatch.builder()
+ .isUnread(true)
+ .build();
+
+ assertThat(messagePatch.isFlagsIdentity()).isFalse();
+ }
+
+ @Test
+ public void isIdentityShouldReturnFalseWhenFlagsFlaggedUpdated() {
+ UpdateMessagePatch messagePatch = UpdateMessagePatch.builder()
+ .isFlagged(true)
+ .build();
+
+ assertThat(messagePatch.isFlagsIdentity()).isFalse();
+ }
+
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org