JAMES-1925 Solve mailboxRenames by reading oldPath first
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0063d303 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0063d303 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0063d303 Branch: refs/heads/master Commit: 0063d303c12931fe62b64651fb3c96419790c619 Parents: 3176d37 Author: Benoit Tellier <[email protected]> Authored: Tue Feb 14 16:19:52 2017 +0700 Committer: Antoine Duprat <[email protected]> Committed: Wed Feb 15 13:12:39 2017 +0100 ---------------------------------------------------------------------- .../cassandra/mail/CassandraMailboxMapper.java | 21 ++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/0063d303/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java index 959bacf..1f1e163 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java @@ -121,10 +121,15 @@ public class CassandraMailboxMapper implements MailboxMapper { public void save(Mailbox mailbox) throws MailboxException { Preconditions.checkArgument(mailbox instanceof SimpleMailbox); SimpleMailbox cassandraMailbox = (SimpleMailbox) mailbox; - if (cassandraMailbox.getMailboxId() == null) { - cassandraMailbox.setMailboxId(CassandraId.timeBased()); - } - boolean applied = mailboxPathDAO.save(mailbox.generateAssociatedPath(), (CassandraId) cassandraMailbox.getMailboxId()) + + CassandraId cassandraId = retrieveId(cassandraMailbox); + cassandraMailbox.setMailboxId(cassandraId); + + boolean applied = mailboxDAO.retrieveMailbox(cassandraId) + .thenCompose(optional -> optional + .map(storedMailbox -> mailboxPathDAO.delete(storedMailbox.generateAssociatedPath())) + .orElse(CompletableFuture.completedFuture(null))) + .thenCompose(any -> mailboxPathDAO.save(mailbox.generateAssociatedPath(), cassandraId)) .thenCompose(result -> { if (result) { return mailboxDAO.save(cassandraMailbox).thenApply(any -> result); @@ -136,6 +141,14 @@ public class CassandraMailboxMapper implements MailboxMapper { } } + private CassandraId retrieveId(SimpleMailbox cassandraMailbox) { + if (cassandraMailbox.getMailboxId() == null) { + return CassandraId.timeBased(); + } else { + return (CassandraId) cassandraMailbox.getMailboxId(); + } + } + @Override public boolean hasChildren(Mailbox mailbox, char delimiter) { return mailboxPathDAO.listUserMailboxes(mailbox.getNamespace(), mailbox.getUser()) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
