You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/08/19 09:18:40 UTC

[james-project] branch master updated: JAMES-3803 RemoteDelivery uses different scheduler for dequeuing (#1121)

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new c57bf62155 JAMES-3803 RemoteDelivery uses different scheduler for dequeuing (#1121)
c57bf62155 is described below

commit c57bf62155843f2577d2c62a205d5e064b2ea5d8
Author: AdBuch <41...@users.noreply.github.com>
AuthorDate: Fri Aug 19 11:18:35 2022 +0200

    JAMES-3803 RemoteDelivery uses different scheduler for dequeuing (#1121)
    
    This is necessary as else in high load a delivery-task can queue in the same thread as the never ending dequeuing-task and stay there forever
---
 .../transport/mailets/remote/delivery/DeliveryRunnable.java | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java
index 1c771f9920..25d3a2d549 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java
@@ -68,7 +68,8 @@ public class DeliveryRunnable implements Disposable {
     private final Supplier<Date> dateSupplier;
     private final MailetContext mailetContext;
     private Disposable disposable;
-    private Scheduler remoteDeliveryScheduler;
+    private Scheduler remoteDeliveryProcessScheduler;
+    private Scheduler remoteDeliveryDequeueScheduler;
 
     public DeliveryRunnable(MailQueue queue, RemoteDeliveryConfiguration configuration, DNSService dnsServer, MetricFactory metricFactory,
                             MailetContext mailetContext, Bouncer bouncer) {
@@ -91,11 +92,12 @@ public class DeliveryRunnable implements Disposable {
     }
 
     public void start() {
-        remoteDeliveryScheduler = Schedulers.newBoundedElastic(Schedulers.DEFAULT_BOUNDED_ELASTIC_SIZE, Schedulers.DEFAULT_BOUNDED_ELASTIC_QUEUESIZE, "RemoteDelivery");
+        remoteDeliveryProcessScheduler = Schedulers.newBoundedElastic(Schedulers.DEFAULT_BOUNDED_ELASTIC_SIZE, Schedulers.DEFAULT_BOUNDED_ELASTIC_QUEUESIZE, "RemoteDelivery-Process");
+        remoteDeliveryDequeueScheduler = Schedulers.newSingle("RemoteDelivery-Dequeue");
         disposable = Flux.from(queue.deQueue())
-            .flatMap(queueItem -> runStep(queueItem).subscribeOn(remoteDeliveryScheduler), Queues.SMALL_BUFFER_SIZE)
+            .flatMap(queueItem -> runStep(queueItem).subscribeOn(remoteDeliveryProcessScheduler), Queues.SMALL_BUFFER_SIZE)
             .onErrorContinue(((throwable, nothing) -> LOGGER.error("Exception caught in RemoteDelivery", throwable)))
-            .subscribeOn(remoteDeliveryScheduler)
+            .subscribeOn(remoteDeliveryDequeueScheduler)
             .subscribe();
     }
 
@@ -202,6 +204,7 @@ public class DeliveryRunnable implements Disposable {
     @Override
     public void dispose() {
         disposable.dispose();
-        remoteDeliveryScheduler.dispose();
+        remoteDeliveryProcessScheduler.dispose();
+        remoteDeliveryDequeueScheduler.dispose();
     }
 }


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