You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/04/29 17:56:38 UTC
svn commit: r939355 - in /james/server/trunk:
netty-socket/src/main/java/org/apache/james/socket/netty/
smtpserver/src/test/java/org/apache/james/smtpserver/
Author: norman
Date: Thu Apr 29 15:56:38 2010
New Revision: 939355
URL: http://svn.apache.org/viewvc?rev=939355&view=rev
Log:
Fix connection limiting when using netty
Modified:
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelPipelineFactory.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/ConnectionLimitUpstreamHandler.java
james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/NioSMTPServerTest.java
Modified: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelPipelineFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelPipelineFactory.java?rev=939355&r1=939354&r2=939355&view=diff
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelPipelineFactory.java (original)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/AbstractChannelPipelineFactory.java Thu Apr 29 15:56:38 2010
@@ -41,6 +41,13 @@ public abstract class AbstractChannelPip
public final static int MAX_LINE_LENGTH = 8192;
private final Timer timer = new HashedWheelTimer();
+ private final ConnectionLimitUpstreamHandler connectionLimitHandler;
+ private final ConnectionPerIpLimitUpstreamHandler connectionPerIpLimitHandler;
+
+ public AbstractChannelPipelineFactory() {
+ connectionLimitHandler = new ConnectionLimitUpstreamHandler(getMaxConnections());
+ connectionPerIpLimitHandler = new ConnectionPerIpLimitUpstreamHandler(getMaxConnectionsPerIP());
+ }
/*
* (non-Javadoc)
* @see org.jboss.netty.channel.ChannelPipelineFactory#getPipeline()
@@ -49,9 +56,9 @@ public abstract class AbstractChannelPip
// Create a default pipeline implementation.
ChannelPipeline pipeline = pipeline();
- pipeline.addLast("connectionLimit", new ConnectionLimitUpstreamHandler(getMaxConnections()));
+ pipeline.addLast("connectionLimit", connectionLimitHandler);
- pipeline.addLast("connectionPerIpLimit", new ConnectionPerIpLimitUpstreamHandler(getMaxConnectionsPerIP()));
+ pipeline.addLast("connectionPerIpLimit", connectionPerIpLimitHandler);
// Add the text line decoder which limit the max line length, don't strip the delimiter and use CRLF as delimiter
Modified: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/ConnectionLimitUpstreamHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/ConnectionLimitUpstreamHandler.java?rev=939355&r1=939354&r2=939355&view=diff
==============================================================================
--- james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/ConnectionLimitUpstreamHandler.java (original)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/ConnectionLimitUpstreamHandler.java Thu Apr 29 15:56:38 2010
@@ -33,18 +33,19 @@ import org.jboss.netty.channel.SimpleCha
@ChannelPipelineCoverage("all")
public class ConnectionLimitUpstreamHandler extends SimpleChannelUpstreamHandler{
- private final AtomicInteger connections = new AtomicInteger(0);
+ private static final AtomicInteger connections = new AtomicInteger(0);
private final int maxConnections;
public ConnectionLimitUpstreamHandler(int maxConnections) {
this.maxConnections = maxConnections;
}
+
@Override
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
if (maxConnections > 0) {
int currentCount = connections.getAndIncrement();
- if (currentCount > maxConnections) {
+ if (currentCount + 1 > maxConnections) {
ctx.getChannel().close();
connections.decrementAndGet();
}
Modified: james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/NioSMTPServerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/NioSMTPServerTest.java?rev=939355&r1=939354&r2=939355&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/NioSMTPServerTest.java (original)
+++ james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/NioSMTPServerTest.java Thu Apr 29 15:56:38 2010
@@ -70,5 +70,35 @@ public class NioSMTPServerTest extends A
smtpProtocol.quit();
smtpProtocol.disconnect();
}
+
+ public void testConnectionLimit() throws Exception {
+ m_testConfiguration.setConnectionLimit(2);
+ finishSetUp(m_testConfiguration);
+
+ SMTPClient smtpProtocol = new SMTPClient();
+ smtpProtocol.connect("127.0.0.1", m_smtpListenerPort);
+ SMTPClient smtpProtocol2 = new SMTPClient();
+ smtpProtocol2.connect("127.0.0.1", m_smtpListenerPort);
+
+ SMTPClient smtpProtocol3 = new SMTPClient();
+
+ try {
+ smtpProtocol3.connect("127.0.0.1", m_smtpListenerPort);
+ Thread.sleep(3000);
+ fail("Shold disconnect connection 3");
+ } catch (Exception e) {
+
+ }
+
+ smtpProtocol.quit();
+ smtpProtocol.disconnect();
+ smtpProtocol2.quit();
+ smtpProtocol2.disconnect();
+
+ smtpProtocol3.connect("127.0.0.1", m_smtpListenerPort);
+ Thread.sleep(3000);
+
+
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org