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 ma...@apache.org on 2017/08/17 11:20:14 UTC

[2/4] james-project git commit: JAMES-2123 Avoid a read before deleting out messages

JAMES-2123 Avoid a read before deleting out messages

This read was failing in case of denormalization issues, leading to impossible to move messages


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

Branch: refs/heads/master
Commit: 219eb4ec2c2b01b876682b645a719c5d9a9298d0
Parents: c3bae34
Author: benwa <bt...@linagora.com>
Authored: Thu Aug 17 08:48:14 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Aug 17 11:05:02 2017 +0700

----------------------------------------------------------------------
 .../cassandra/mail/CassandraMessageMapper.java       | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/219eb4ec/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 0bad299..837a94d 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
@@ -151,10 +151,13 @@ public class CassandraMessageMapper implements MessageMapper {
     }
 
     private CompletableFuture<Void> deleteAsFuture(MailboxMessage message, CassandraId mailboxId) {
-        return messageIdDAO.retrieve(mailboxId, message.getUid())
-            .thenCompose(optional -> optional
-                .map(this::deleteUsingMailboxId)
-                .orElse(CompletableFuture.completedFuture(null)));
+        ComposedMessageIdWithMetaData composedMessageIdWithMetaData = ComposedMessageIdWithMetaData.builder()
+            .composedMessageId(new ComposedMessageId(mailboxId, message.getMessageId(), message.getUid()))
+            .flags(message.createFlags())
+            .modSeq(message.getModSeq())
+            .build();
+
+        return deleteUsingMailboxId(composedMessageIdWithMetaData);
     }
 
     private CompletableFuture<Void> deleteUsingMailboxId(ComposedMessageIdWithMetaData composedMessageIdWithMetaData) {
@@ -168,10 +171,6 @@ public class CassandraMessageMapper implements MessageMapper {
         ).thenCompose(voidValue -> indexTableHandler.updateIndexOnDelete(composedMessageIdWithMetaData, mailboxId));
     }
 
-    private CompletableFuture<Optional<ComposedMessageIdWithMetaData>> retrieveMessageId(CassandraId mailboxId, MailboxMessage message) {
-        return messageIdDAO.retrieve(mailboxId, message.getUid());
-    }
-
     @Override
     public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, MessageRange messageRange, FetchType ftype, int max) throws MailboxException {
         CassandraId mailboxId = (CassandraId) mailbox.getMailboxId();


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