Arsnael commented on a change in pull request #428:
URL: https://github.com/apache/james-project/pull/428#discussion_r632243923



##########
File path: 
mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
##########
@@ -456,45 +454,53 @@ public void setInMailboxesNoCheck(MessageId messageId, 
MailboxId targetMailboxId
         }
     }
 
-    private void addMessageToMailboxes(MailboxMessage mailboxMessage, 
Set<Mailbox> mailboxes, MailboxSession mailboxSession) throws MailboxException {
+    private Mono<Void> addMessageToMailboxes(MailboxMessage mailboxMessage, 
Set<Mailbox> mailboxes, MailboxSession mailboxSession) {
         MessageIdMapper messageIdMapper = 
mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession);
 
-        for (Mailbox mailbox : mailboxes) {
-            MailboxACL.Rfc4314Rights myRights = rightManager.myRights(mailbox, 
mailboxSession);
-            boolean shouldPreserveFlags = myRights.contains(Right.Write);
-            SimpleMailboxMessage copy =
-                SimpleMailboxMessage.from(mailboxMessage)
-                    .mailboxId(mailbox.getMailboxId())
-                    .flags(
-                        FlagsFactory
-                            .builder()
-                            .flags(mailboxMessage.createFlags())
-                            .filteringFlags(
-                                FlagsFilter.builder()
-                                    .systemFlagFilter(f -> shouldPreserveFlags)
-                                    .userFlagFilter(f -> shouldPreserveFlags)
-                                    .build())
-                            .build())
-                    .build();
-            save(messageIdMapper, copy, mailbox);
-
-            eventBus.dispatch(EventFactory.added()
-                    .randomEventId()
-                    .mailboxSession(mailboxSession)
-                    .mailbox(mailbox)
-                    .addMetaData(copy.metaData())
-                    .build(),
-                    new MailboxIdRegistrationKey(mailbox.getMailboxId()))
-                .block();
-        }
+        System.out.println("Adding to " + mailboxes);
+
+        return Flux.fromIterable(mailboxes)
+            .flatMap(Throwing.<Mailbox, Mono<Void>>function(mailbox -> {
+                MailboxACL.Rfc4314Rights myRights = 
rightManager.myRights(mailbox, mailboxSession);
+                boolean shouldPreserveFlags = myRights.contains(Right.Write);
+                SimpleMailboxMessage copy =
+                    SimpleMailboxMessage.from(mailboxMessage)
+                        .mailboxId(mailbox.getMailboxId())
+                        .flags(
+                            FlagsFactory
+                                .builder()
+                                .flags(mailboxMessage.createFlags())
+                                .filteringFlags(
+                                    FlagsFilter.builder()
+                                        .systemFlagFilter(f -> 
shouldPreserveFlags)
+                                        .userFlagFilter(f -> 
shouldPreserveFlags)
+                                        .build())
+                                .build())
+                        .build();
+
+                return save(messageIdMapper, copy, mailbox)
+                    .flatMap(metadata -> eventBus.dispatch(EventFactory.added()
+                            .randomEventId()
+                            .mailboxSession(mailboxSession)
+                            .mailbox(mailbox)
+                            .addMetaData(metadata)
+                            .build(),
+                        new MailboxIdRegistrationKey(mailbox.getMailboxId())));
+            }).sneakyThrow())
+            .then();
     }
 
-    private void save(MessageIdMapper messageIdMapper, MailboxMessage 
mailboxMessage, Mailbox mailbox) throws MailboxException {
-        ModSeq modSeq = 
mailboxSessionMapperFactory.getModSeqProvider().nextModSeq(mailbox.getMailboxId());
-        MessageUid uid = 
mailboxSessionMapperFactory.getUidProvider().nextUid(mailbox.getMailboxId());
-        mailboxMessage.setModSeq(modSeq);
-        mailboxMessage.setUid(uid);
-        messageIdMapper.copyInMailbox(mailboxMessage, mailbox);
+    private Mono<MessageMetaData> save(MessageIdMapper messageIdMapper, 
MailboxMessage mailboxMessage, Mailbox mailbox) {
+        return Mono.zip(
+                
mailboxSessionMapperFactory.getModSeqProvider().nextModSeqReactive(mailbox.getMailboxId()),
+                
mailboxSessionMapperFactory.getUidProvider().nextUidReactive(mailbox.getMailboxId()))
+            .flatMap(modSeqAndUid -> {
+                mailboxMessage.setModSeq(modSeqAndUid.getT1());
+                mailboxMessage.setUid(modSeqAndUid.getT2());
+                System.out.println("Persist " + mailboxMessage);

Review comment:
       Not resolved...




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to