This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 0f5e381fac65f91e45559c25c8259d697be49239 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Fri Jun 26 10:29:50 2020 +0700 JAMES-3277 Rework MessageIdMapper APIs - Reactify delete (easy win) - Copy in mailboxes should take as an argument the target mailbox so that we don't need to ensure it exists --- .../cassandra/mail/CassandraMessageIdMapper.java | 17 +++++++------- .../inmemory/mail/InMemoryMessageIdMapper.java | 4 ++-- .../james/mailbox/store/mail/MessageIdMapper.java | 8 ++++++- .../store/mail/model/MessageIdMapperTest.java | 26 +++++----------------- 4 files changed, 23 insertions(+), 32 deletions(-) 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 2777ec4..b0293d1 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 @@ -35,6 +35,7 @@ import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData; +import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.UpdatedFlags; @@ -140,11 +141,10 @@ public class CassandraMessageIdMapper implements MessageIdMapper { } @Override - public void copyInMailbox(MailboxMessage mailboxMessage) throws MailboxException { - CassandraId mailboxId = (CassandraId) mailboxMessage.getMailboxId(); - MailboxReactorUtils.block(mailboxMapper.findMailboxById(mailboxId) - .switchIfEmpty(Mono.error(() -> new MailboxNotFoundException(mailboxId))) - .then(saveMessageMetadata(mailboxMessage, mailboxId))); + public void copyInMailbox(MailboxMessage mailboxMessage, Mailbox mailbox) throws MailboxException { + CassandraId mailboxId = (CassandraId) mailbox.getMailboxId(); + + MailboxReactorUtils.block(saveMessageMetadata(mailboxMessage, mailboxId)); } private Mono<Void> saveMessageMetadata(MailboxMessage mailboxMessage, CassandraId mailboxId) { @@ -172,10 +172,11 @@ public class CassandraMessageIdMapper implements MessageIdMapper { @Override public void delete(MessageId messageId, Collection<MailboxId> mailboxIds) { - deleteAsMono(messageId, mailboxIds).block(); + deleteReactive(messageId, mailboxIds).block(); } - public Mono<Void> deleteAsMono(MessageId messageId, Collection<MailboxId> mailboxIds) { + @Override + public Mono<Void> deleteReactive(MessageId messageId, Collection<MailboxId> mailboxIds) { CassandraMessageId cassandraMessageId = (CassandraMessageId) messageId; return Flux.fromStream(mailboxIds.stream()) .flatMap(mailboxId -> retrieveAndDeleteIndices(cassandraMessageId, Optional.of((CassandraId) mailboxId))) @@ -187,7 +188,7 @@ public class CassandraMessageIdMapper implements MessageIdMapper { Flux.fromIterable(ids.asMap() .entrySet()) .publishOn(Schedulers.elastic()) - .flatMap(entry -> deleteAsMono(entry.getKey(), entry.getValue()), cassandraConfiguration.getExpungeChunkSize()) + .flatMap(entry -> deleteReactive(entry.getKey(), entry.getValue()), cassandraConfiguration.getExpungeChunkSize()) .then() .block(); } diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java index 2fe2bee..c16968b 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java @@ -87,8 +87,8 @@ public class InMemoryMessageIdMapper implements MessageIdMapper { } @Override - public void copyInMailbox(MailboxMessage mailboxMessage) throws MailboxException { - boolean isAlreadyInMailbox = findMailboxes(mailboxMessage.getMessageId()).contains(mailboxMessage.getMailboxId()); + public void copyInMailbox(MailboxMessage mailboxMessage, Mailbox mailbox) throws MailboxException { + boolean isAlreadyInMailbox = findMailboxes(mailboxMessage.getMessageId()).contains(mailbox.getMailboxId()); if (!isAlreadyInMailbox) { save(mailboxMessage); } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java index eeecd30..6e422e2 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java @@ -26,6 +26,7 @@ import javax.mail.Flags; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; +import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.UpdatedFlags; @@ -35,6 +36,7 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage; import com.google.common.collect.Multimap; import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; public interface MessageIdMapper { @@ -48,12 +50,16 @@ public interface MessageIdMapper { void save(MailboxMessage mailboxMessage) throws MailboxNotFoundException, MailboxException; - void copyInMailbox(MailboxMessage mailboxMessage) throws MailboxNotFoundException, MailboxException; + void copyInMailbox(MailboxMessage mailboxMessage, Mailbox mailbox) throws MailboxException; void delete(MessageId messageId); void delete(MessageId messageId, Collection<MailboxId> mailboxIds); + default Mono<Void> deleteReactive(MessageId messageId, Collection<MailboxId> mailboxIds) { + return Mono.fromRunnable(() -> delete(messageId, mailboxIds)); + } + default void delete(Multimap<MessageId, MailboxId> ids) { ids.asMap() .forEach(this::delete); 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 944301b..3abb0c9 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 @@ -202,22 +202,6 @@ public abstract class MessageIdMapperTest { } @Test - void copyInMailboxShouldThrowWhenMailboxDoesntExist() throws Exception { - message1.setUid(mapperProvider.generateMessageUid()); - message1.setModSeq(mapperProvider.generateModSeq(benwaInboxMailbox)); - sut.save(message1); - - Mailbox notPersistedMailbox = new Mailbox(MailboxPath.forUser(BENWA, "mybox"), UID_VALIDITY, mapperProvider.generateId()); - - SimpleMailboxMessage message1InOtherMailbox = SimpleMailboxMessage.copy(notPersistedMailbox.getMailboxId(), message1); - message1InOtherMailbox.setUid(mapperProvider.generateMessageUid()); - message1InOtherMailbox.setModSeq(mapperProvider.generateModSeq(benwaWorkMailbox)); - - assertThatThrownBy(() -> sut.copyInMailbox(message1InOtherMailbox)) - .isInstanceOf(MailboxNotFoundException.class); - } - - @Test void copyInMailboxShouldSaveMessageInAnotherMailbox() throws Exception { message1.setUid(mapperProvider.generateMessageUid()); message1.setModSeq(mapperProvider.generateModSeq(benwaInboxMailbox)); @@ -226,7 +210,7 @@ public abstract class MessageIdMapperTest { SimpleMailboxMessage message1InOtherMailbox = SimpleMailboxMessage.copy(benwaWorkMailbox.getMailboxId(), message1); message1InOtherMailbox.setUid(mapperProvider.generateMessageUid()); message1InOtherMailbox.setModSeq(mapperProvider.generateModSeq(benwaWorkMailbox)); - sut.copyInMailbox(message1InOtherMailbox); + sut.copyInMailbox(message1InOtherMailbox, benwaWorkMailbox); List<MailboxId> mailboxes = sut.findMailboxes(message1.getMessageId()); assertThat(mailboxes).containsOnly(benwaInboxMailbox.getMailboxId(), benwaWorkMailbox.getMailboxId()); @@ -241,8 +225,8 @@ public abstract class MessageIdMapperTest { copiedMessage.setUid(mapperProvider.generateMessageUid()); copiedMessage.setModSeq(mapperProvider.generateModSeq(benwaWorkMailbox)); - sut.copyInMailbox(copiedMessage); - sut.copyInMailbox(copiedMessage); + sut.copyInMailbox(copiedMessage, benwaWorkMailbox); + sut.copyInMailbox(copiedMessage, benwaWorkMailbox); List<MailboxId> mailboxes = sut.findMailboxes(message1.getMessageId()); assertThat(mailboxes) @@ -894,7 +878,7 @@ public abstract class MessageIdMapperTest { SimpleMailboxMessage copiedMessage = SimpleMailboxMessage.copy(benwaWorkMailbox.getMailboxId(), message1); copiedMessage.setUid(mapperProvider.generateMessageUid()); copiedMessage.setModSeq(mapperProvider.generateModSeq(benwaWorkMailbox)); - sut.copyInMailbox(copiedMessage); + sut.copyInMailbox(copiedMessage, benwaWorkMailbox); sut.delete( ImmutableMultimap.<MessageId, MailboxId>builder() @@ -919,7 +903,7 @@ public abstract class MessageIdMapperTest { SimpleMailboxMessage copiedMessage = SimpleMailboxMessage.copy(benwaWorkMailbox.getMailboxId(), message1); copiedMessage.setUid(mapperProvider.generateMessageUid()); copiedMessage.setModSeq(mapperProvider.generateModSeq(benwaWorkMailbox)); - sut.copyInMailbox(copiedMessage); + sut.copyInMailbox(copiedMessage, benwaWorkMailbox); sut.delete( ImmutableMultimap.<MessageId, MailboxId>builder() --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org