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