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