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 <btell...@linagora.com> Authored: Thu Aug 17 08:48:14 2017 +0700 Committer: benwa <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org