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/04/30 04:12:35 UTC

[james-project] 01/02: JAMES-3752 - Enable ImapHeartbeatHandler by setting idle time interval

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

commit c00eba46a81a44e95e3a6c63b2cd57b9a8791949
Author: Tung Van TRAN <vt...@linagora.com>
AuthorDate: Mon Apr 18 16:32:04 2022 +0700

    JAMES-3752 - Enable ImapHeartbeatHandler by setting idle time interval
---
 .../java/org/apache/james/imap/api/ImapConfiguration.java |  5 +++++
 .../org/apache/james/imap/processor/IdleProcessor.java    |  2 +-
 .../org/apache/james/imapserver/netty/IMAPServer.java     |  8 ++++++--
 .../imapserver/netty/ImapChannelUpstreamHandler.java      | 15 ++++++++++++---
 4 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java b/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java
index 962f7f53b6..4db594d3d7 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.api;
 
+import java.time.Duration;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
@@ -145,6 +146,10 @@ public class ImapConfiguration {
         return isCondstoreEnable;
     }
 
+    public Duration idleTimeIntervalAsDuration() {
+        return Duration.of(getIdleTimeInterval(), getIdleTimeIntervalUnit().toChronoUnit());
+    }
+
     @Override
     public final boolean equals(Object obj) {
         if (obj instanceof ImapConfiguration) {
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index 28895174b2..39005f0020 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -69,7 +69,7 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
     public void configure(ImapConfiguration imapConfiguration) {
         super.configure(imapConfiguration);
 
-        this.heartbeatInterval = Duration.of(imapConfiguration.getIdleTimeInterval(), imapConfiguration.getIdleTimeIntervalUnit().toChronoUnit());
+        this.heartbeatInterval = imapConfiguration.idleTimeIntervalAsDuration();
         this.enableIdle = imapConfiguration.isEnableIdle();
     }
 
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
index 5082d59015..d2a8e2fe1a 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
@@ -19,6 +19,7 @@
 package org.apache.james.imapserver.netty;
 
 import java.net.MalformedURLException;
+import java.time.Duration;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
@@ -134,6 +135,7 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC
     private AuthenticationConfiguration authenticationConfiguration;
     private Optional<ConnectionLimitUpstreamHandler> connectionLimitUpstreamHandler = Optional.empty();
     private Optional<ConnectionPerIpLimitUpstreamHandler> connectionPerIpLimitUpstreamHandler = Optional.empty();
+    private Duration heartbeatInterval;
 
     public static final int DEFAULT_MAX_LINE_LENGTH = 65536; // Use a big default
     public static final Size DEFAULT_IN_MEMORY_SIZE_LIMIT = Size.of(10L, Size.Unit.M); // Use 10MB as default
@@ -172,8 +174,9 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC
         authenticationConfiguration = AuthenticationConfiguration.parse(configuration);
         connectionLimitUpstreamHandler = ConnectionLimitUpstreamHandler.forCount(connectionLimit);
         connectionPerIpLimitUpstreamHandler = ConnectionPerIpLimitUpstreamHandler.forCount(connPerIP);
-
-        processor.configure(getImapConfiguration(configuration));
+        ImapConfiguration imapConfiguration = getImapConfiguration(configuration);
+        heartbeatInterval = imapConfiguration.idleTimeIntervalAsDuration();
+        processor.configure(imapConfiguration);
     }
 
     @VisibleForTesting static ImapConfiguration getImapConfiguration(HierarchicalConfiguration<ImmutableNode> configuration) {
@@ -262,6 +265,7 @@ public class IMAPServer extends AbstractConfigurableAsyncServer implements ImapC
             .authenticationConfiguration(authenticationConfiguration)
             .secure(secure)
             .imapMetrics(imapMetrics)
+            .heartbeatInterval(heartbeatInterval)
             .build();
     }
 
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
index 137f4ec30c..f4271d959a 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
@@ -23,6 +23,7 @@ import static org.apache.james.imapserver.netty.IMAPServer.AuthenticationConfigu
 import java.io.Closeable;
 import java.io.IOException;
 import java.net.InetSocketAddress;
+import java.time.Duration;
 import java.util.NoSuchElementException;
 import java.util.Optional;
 
@@ -71,6 +72,7 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp
         private ImapEncoder encoder;
         private IMAPServer.AuthenticationConfiguration authenticationConfiguration;
         private ImapMetrics imapMetrics;
+        private Duration heartbeatInterval;
 
         public ImapChannelUpstreamHandlerBuilder hello(String hello) {
             this.hello = hello;
@@ -107,8 +109,13 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp
             return this;
         }
 
+        public ImapChannelUpstreamHandlerBuilder heartbeatInterval(Duration heartbeatInterval) {
+            this.heartbeatInterval = heartbeatInterval;
+            return this;
+        }
+
         public ImapChannelUpstreamHandler build() {
-            return new ImapChannelUpstreamHandler(hello, processor, encoder, compress, secure, imapMetrics, authenticationConfiguration);
+            return new ImapChannelUpstreamHandler(hello, processor, encoder, compress, secure, imapMetrics, authenticationConfiguration, (int) heartbeatInterval.toSeconds());
         }
     }
 
@@ -126,7 +133,7 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp
 
     private final ImapEncoder encoder;
 
-    private final ImapHeartbeatHandler heartbeatHandler = new ImapHeartbeatHandler(0,0,0);
+    private final ImapHeartbeatHandler heartbeatHandler;
 
     private final AuthenticationConfiguration authenticationConfiguration;
 
@@ -135,7 +142,8 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp
     private final Metric imapCommandsMetric;
 
     public ImapChannelUpstreamHandler(String hello, ImapProcessor processor, ImapEncoder encoder, boolean compress,
-                                      Encryption secure, ImapMetrics imapMetrics, AuthenticationConfiguration authenticationConfiguration) {
+                                      Encryption secure, ImapMetrics imapMetrics, AuthenticationConfiguration authenticationConfiguration,
+                                      int heartbeatIntervalSeconds) {
         this.hello = hello;
         this.processor = processor;
         this.encoder = encoder;
@@ -144,6 +152,7 @@ public class ImapChannelUpstreamHandler extends ChannelInboundHandlerAdapter imp
         this.authenticationConfiguration = authenticationConfiguration;
         this.imapConnectionsMetric = imapMetrics.getConnectionsMetric();
         this.imapCommandsMetric = imapMetrics.getCommandsMetric();
+        this.heartbeatHandler = new ImapHeartbeatHandler(heartbeatIntervalSeconds, heartbeatIntervalSeconds, heartbeatIntervalSeconds);
     }
 
     @Override


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