You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2020/11/12 04:42:24 UTC

[james-project] 07/12: JAMES-3171 Limit concurrency in JMAP methods

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 7fa59ded0afb5621195683de91bdccbda1cdd971
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Nov 11 14:13:53 2020 +0700

    JAMES-3171 Limit concurrency in JMAP methods
---
 .../main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala | 3 ++-
 .../org/apache/james/jmap/method/MailboxSetDeletePerformer.scala   | 3 ++-
 .../org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala   | 7 +++----
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
index c13bf3a..a7adf77 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
@@ -108,7 +108,8 @@ class MailboxGetMethod @Inject() (serializer: MailboxSerializer,
       case Some(ids) => SFlux.fromIterable(ids.value)
         .flatMap(id => Try(mailboxIdFactory.fromString(id.value))
           .fold(e => SMono.just(MailboxGetResults.notFound(id)),
-            mailboxId => getMailboxResultById(capabilities, mailboxId, mailboxSession)))
+            mailboxId => getMailboxResultById(capabilities, mailboxId, mailboxSession)),
+          maxConcurrency = 5)
     }
 
   private def getMailboxResultById(capabilities: Set[CapabilityIdentifier],
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetDeletePerformer.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetDeletePerformer.scala
index 3ccd8f4..de5d4ea 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetDeletePerformer.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetDeletePerformer.scala
@@ -67,7 +67,8 @@ class MailboxSetDeletePerformer @Inject()(mailboxManager: MailboxManager,
   def deleteMailboxes(mailboxSession: MailboxSession, mailboxSetRequest: MailboxSetRequest): SMono[MailboxDeletionResults] = {
     SFlux.fromIterable(mailboxSetRequest.destroy.getOrElse(Seq()))
       .flatMap(id => delete(mailboxSession, id, mailboxSetRequest.onDestroyRemoveEmails.getOrElse(RemoveEmailsOnDestroy(false)))
-        .onErrorRecover(e => MailboxDeletionFailure(id, e)))
+        .onErrorRecover(e => MailboxDeletionFailure(id, e)),
+        maxConcurrency = 5)
       .collectSeq()
       .map(MailboxDeletionResults)
   }
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
index f208989..c82e5c3 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
@@ -92,7 +92,7 @@ class MailboxSetUpdatePerformer @Inject()(serializer: MailboxSerializer,
               e => SMono.just(MailboxUpdateFailure(unparsedMailboxId, e, None)),
               mailboxId => updateMailbox(mailboxSession, mailboxId, unparsedMailboxId, patch, capabilities))
             .onErrorResume(e => SMono.just(MailboxUpdateFailure(unparsedMailboxId, e, None)))
-      })
+      }, maxConcurrency = 5)
       .collectSeq()
       .map(MailboxUpdateResults)
   }
@@ -216,9 +216,8 @@ class MailboxSetUpdatePerformer @Inject()(serializer: MailboxSerializer,
     }).getOrElse(SMono.empty)
 
     val partialUpdatesOperation: SMono[Unit] = SFlux.fromIterable(validatedPatch.rightsPartialUpdates)
-      .flatMap(partialUpdate => SMono.fromCallable(() => {
-        mailboxManager.applyRightsCommand(mailboxId, partialUpdate.asACLCommand(), mailboxSession)
-      }))
+      .flatMap(partialUpdate => SMono.fromCallable(() => mailboxManager.applyRightsCommand(mailboxId, partialUpdate.asACLCommand(), mailboxSession)),
+        maxConcurrency = 5)
       .`then`()
 
     SFlux.merge(Seq(resetOperation, partialUpdatesOperation))


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