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 2011/12/20 09:40:43 UTC

svn commit: r1221145 - in /james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty: ConnectionLimitUpstreamHandler.java ConnectionPerIpLimitUpstreamHandler.java NettyServer.java

Author: norman
Date: Tue Dec 20 08:40:43 2011
New Revision: 1221145

URL: http://svn.apache.org/viewvc?rev=1221145&view=rev
Log:
Allow to set maximal current connections in NettyServer. See PROTOCOLS-57

Modified:
    james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionLimitUpstreamHandler.java
    james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionPerIpLimitUpstreamHandler.java
    james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java

Modified: james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionLimitUpstreamHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionLimitUpstreamHandler.java?rev=1221145&r1=1221144&r2=1221145&view=diff
==============================================================================
--- james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionLimitUpstreamHandler.java (original)
+++ james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionLimitUpstreamHandler.java Tue Dec 20 08:40:43 2011
@@ -37,7 +37,7 @@ import org.jboss.netty.channel.SimpleCha
 public class ConnectionLimitUpstreamHandler extends SimpleChannelUpstreamHandler{
 
     private final AtomicInteger connections = new AtomicInteger(0);
-    private int maxConnections;
+    private volatile int maxConnections = -1;
     
     public ConnectionLimitUpstreamHandler(int maxConnections) {
         this.maxConnections = maxConnections;

Modified: james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionPerIpLimitUpstreamHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionPerIpLimitUpstreamHandler.java?rev=1221145&r1=1221144&r2=1221145&view=diff
==============================================================================
--- james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionPerIpLimitUpstreamHandler.java (original)
+++ james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/ConnectionPerIpLimitUpstreamHandler.java Tue Dec 20 08:40:43 2011
@@ -40,7 +40,7 @@ import org.jboss.netty.channel.SimpleCha
 public class ConnectionPerIpLimitUpstreamHandler extends SimpleChannelUpstreamHandler{
 
     private final ConcurrentMap<String, AtomicInteger> connections = new ConcurrentHashMap<String, AtomicInteger>();    
-    private int maxConnectionsPerIp;
+    private volatile int maxConnectionsPerIp = -1;
     
     public ConnectionPerIpLimitUpstreamHandler(int maxConnectionsPerIp) {
         this.maxConnectionsPerIp = maxConnectionsPerIp;

Modified: james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java?rev=1221145&r1=1221144&r2=1221145&view=diff
==============================================================================
--- james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java (original)
+++ james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java Tue Dec 20 08:40:43 2011
@@ -23,6 +23,8 @@ import javax.net.ssl.SSLContext;
 
 import org.apache.james.protocols.api.Protocol;
 import org.apache.james.protocols.api.Encryption;
+import org.apache.james.protocols.api.handler.ProtocolHandler;
+import org.jboss.netty.channel.ChannelPipeline;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.jboss.netty.channel.group.ChannelGroup;
@@ -32,7 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Generic NettyServer
+ * Generic NettyServer 
  */
 public class NettyServer extends AbstractAsyncServer {
 
@@ -46,6 +48,11 @@ public class NettyServer extends Abstrac
 
     protected final Encryption secure;
 
+    private final ConnectionLimitUpstreamHandler connLimit = new ConnectionLimitUpstreamHandler(-1);
+
+    
+    private final ConnectionPerIpLimitUpstreamHandler connPerIPLimit =  new ConnectionPerIpLimitUpstreamHandler(-1);
+   
     public NettyServer(Protocol protocol) {
         this(protocol, null);
     }
@@ -62,6 +69,12 @@ public class NettyServer extends Abstrac
     }
     
     
+    /**
+     * Set true if an ExecutionHandler should be used to hand over the tasks. This should be done if you have some {@link ProtocolHandler}'s which need to full fill some blocking operation.
+     * 
+     * @param useHandler <code>true</code> if an ExecutionHandler should be used
+     * @param size the thread count to use
+     */
     public void setUseExecutionHandler(boolean useHandler, int size) {
         if (isBound()) throw new IllegalStateException("Server running already");
         if (useHandler) {
@@ -74,7 +87,13 @@ public class NettyServer extends Abstrac
         }
     }
     
+    public void setMaxConcurrentConnections(int maxCurConnections) {
+        connLimit.setMaxConnections(maxCurConnections);
+    }
   
+    public void setMaxConcurrentConnectionsPerIP(int maxCurConnectionsPerIP) {
+        connPerIPLimit.setMaxConnectionsPerIp(maxCurConnectionsPerIP);
+    }
     protected ChannelUpstreamHandler createCoreHandler() {
         return new BasicChannelUpstreamHandler(protocol, logger, secure);
     }
@@ -88,7 +107,17 @@ public class NettyServer extends Abstrac
 
     @Override
     protected ChannelPipelineFactory createPipelineFactory(ChannelGroup group) {
+
         return new AbstractSSLAwareChannelPipelineFactory(getTimeout(), 0, getBacklog(), group, eHandler) {
+            
+            @Override
+            public ChannelPipeline getPipeline() throws Exception {
+                ChannelPipeline cp =  super.getPipeline();
+                cp.addFirst(HandlerConstants.CONNECTION_PER_IP_LIMIT_HANDLER, connPerIPLimit);
+                cp.addFirst(HandlerConstants.CONNECTION_LIMIT_HANDLER, connLimit);
+                
+                return cp;
+            }
 
             @Override
             protected ChannelUpstreamHandler createHandler() {



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