Author: gnodet
Date: Wed Aug 31 20:19:23 2011
New Revision: 1163790

URL: http://svn.apache.org/viewvc?rev=1163790&view=rev
Log:
[SSHD-142] Ability to customize the number of nio workers on the client

Added:
    
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSessionFactory.java
      - copied, changed from r1163540, 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java
Modified:
    mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java
    mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java
    
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/SessionFactory.java
    
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/AbstractFactoryManager.java
    
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java
    
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java

Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java?rev=1163790&r1=1163789&r2=1163790&view=diff
==============================================================================
--- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java 
(original)
+++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java Wed 
Aug 31 20:19:23 2011
@@ -18,15 +18,20 @@
  */
 package org.apache.sshd;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.security.InvalidKeyException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
-import java.util.LinkedList;
 import java.util.Iterator;
-import java.security.InvalidKeyException;
+import java.util.LinkedList;
+import java.util.List;
 
 import org.apache.mina.core.future.IoFutureListener;
 import org.apache.mina.core.service.IoConnector;
@@ -41,7 +46,14 @@ import org.apache.sshd.client.future.Def
 import org.apache.sshd.client.kex.DHG1;
 import org.apache.sshd.client.kex.DHG14;
 import org.apache.sshd.client.session.ClientSessionImpl;
-import org.apache.sshd.common.*;
+import org.apache.sshd.common.AbstractFactoryManager;
+import org.apache.sshd.common.Channel;
+import org.apache.sshd.common.Cipher;
+import org.apache.sshd.common.Compression;
+import org.apache.sshd.common.KeyExchange;
+import org.apache.sshd.common.Mac;
+import org.apache.sshd.common.NamedFactory;
+import org.apache.sshd.common.Signature;
 import org.apache.sshd.common.cipher.AES128CBC;
 import org.apache.sshd.common.cipher.AES192CBC;
 import org.apache.sshd.common.cipher.AES256CBC;
@@ -135,14 +147,17 @@ public class SshClient extends AbstractF
     }
 
     public void start() {
-        connector = new NioSocketConnector();
+        connector = createAcceptor();
 
-        SessionFactory handler = sessionFactory;
-        if (handler == null) {
-            handler = new SessionFactory();
+        if (sessionFactory == null) {
+            sessionFactory = new SessionFactory();
         }
-        handler.setClient(this);
-        connector.setHandler(handler);
+        sessionFactory.setClient(this);
+        connector.setHandler(sessionFactory);
+    }
+
+    protected NioSocketConnector createAcceptor() {
+        return new NioSocketConnector(getNioWorkers());
     }
 
     public void stop() {

Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java?rev=1163790&r1=1163789&r2=1163790&view=diff
==============================================================================
--- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java 
(original)
+++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java Wed 
Aug 31 20:19:23 2011
@@ -389,7 +389,7 @@ public class SshServer extends AbstractF
     }
 
     protected IoAcceptor createAcceptor() {
-        return new NioSocketAcceptor();
+        return new NioSocketAcceptor(getNioWorkers());
     }
 
     protected void configure(IoAcceptor acceptor) {

Modified: 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/SessionFactory.java
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/SessionFactory.java?rev=1163790&r1=1163789&r2=1163790&view=diff
==============================================================================
--- 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/SessionFactory.java
 (original)
+++ 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/client/SessionFactory.java
 Wed Aug 31 20:19:23 2011
@@ -21,8 +21,8 @@ package org.apache.sshd.client;
 import org.apache.mina.core.session.IoSession;
 import org.apache.sshd.SshClient;
 import org.apache.sshd.client.session.ClientSessionImpl;
-import org.apache.sshd.common.AbstractSessionIoHandler;
 import org.apache.sshd.common.session.AbstractSession;
+import org.apache.sshd.common.session.AbstractSessionFactory;
 
 /**
  * A factory of client sessions.
@@ -32,7 +32,7 @@ import org.apache.sshd.common.session.Ab
  *
  * @author <a href="mailto:[email protected]";>Apache MINA SSHD Project</a>
  */
-public class SessionFactory extends AbstractSessionIoHandler {
+public class SessionFactory extends AbstractSessionFactory {
 
     protected SshClient client;
 
@@ -40,7 +40,7 @@ public class SessionFactory extends Abst
         this.client = client;
     }
 
-    protected AbstractSession createSession(IoSession ioSession) throws 
Exception {
+    protected AbstractSession doCreateSession(IoSession ioSession) throws 
Exception {
         return new ClientSessionImpl(client, ioSession);
     }
 

Modified: 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/AbstractFactoryManager.java
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/AbstractFactoryManager.java?rev=1163790&r1=1163789&r2=1163790&view=diff
==============================================================================
--- 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/AbstractFactoryManager.java
 (original)
+++ 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/AbstractFactoryManager.java
 Wed Aug 31 20:19:23 2011
@@ -23,10 +23,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
-import java.util.concurrent.ScheduledExecutorService;
 
-import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * TODO Add javadoc
@@ -144,4 +143,23 @@ public abstract class AbstractFactoryMan
         this.channelFactories = channelFactories;
     }
 
+    public int getNioWorkers() {
+        String nioWorkers = getProperties().get(NIO_WORKERS);
+        if (nioWorkers != null && nioWorkers.length() > 0) {
+            int nb = Integer.parseInt(nioWorkers);
+            if (nb > 0) {
+                return nb;
+            }
+        }
+        return DEFAULT_NIO_WORKERS;
+    }
+
+    public void setNioWorkers(int nioWorkers) {
+        if (nioWorkers > 0) {
+            getProperties().put(NIO_WORKERS, Integer.toString(nioWorkers));
+        } else {
+            getProperties().remove(NIO_WORKERS);
+        }
+    }
+
 }

Modified: 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java?rev=1163790&r1=1163789&r2=1163790&view=diff
==============================================================================
--- 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java
 (original)
+++ 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/FactoryManager.java
 Wed Aug 31 20:19:23 2011
@@ -42,6 +42,16 @@ public interface FactoryManager {
     public static final String MAX_PACKET_SIZE = "packet-size";
 
     /**
+     * Number of NIO worker threads to use.
+     */
+    public static final String NIO_WORKERS = "nio-workers";
+
+    /**
+     * Default number of worker threads to use.
+     */
+    public static final int DEFAULT_NIO_WORKERS = 
Runtime.getRuntime().availableProcessors() + 1;
+
+    /**
      * A map of properties that can be used to configure the SSH server
      * or client.  This map will never be changed by either the server or
      * client and is not supposed to be changed at runtime (changes are not

Copied: 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSessionFactory.java
 (from r1163540, 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java)
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSessionFactory.java?p2=mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSessionFactory.java&p1=mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java&r1=1163540&r2=1163790&rev=1163790&view=diff
==============================================================================
--- 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java
 (original)
+++ 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSessionFactory.java
 Wed Aug 31 20:19:23 2011
@@ -16,36 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sshd.server.session;
+package org.apache.sshd.common.session;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.mina.core.session.IoSession;
-import org.apache.sshd.SshServer;
 import org.apache.sshd.common.AbstractSessionIoHandler;
 import org.apache.sshd.common.SessionListener;
-import org.apache.sshd.common.session.AbstractSession;
 
 /**
- * A factory of server sessions.
- * This class can be used as a way to customize the creation of server 
sessions.
- *
- * @see SshServer#setSessionFactory(SessionFactory) 
+ * An abstract base factory of sessions.
  *
  * @author <a href="mailto:[email protected]";>Apache MINA SSHD Project</a>
  */
-public class SessionFactory extends AbstractSessionIoHandler {
+public abstract class AbstractSessionFactory extends AbstractSessionIoHandler {
 
-    protected SshServer server;
     protected final List<SessionListener> listeners = new 
ArrayList<SessionListener>();
 
-    public void setServer(SshServer server) {
-        this.server = server;
-    }
-
     protected AbstractSession createSession(IoSession ioSession) throws 
Exception {
-        ServerSession session = new ServerSession(server, ioSession);
+        AbstractSession session = doCreateSession(ioSession);
         List<SessionListener> sl = new 
ArrayList<SessionListener>(this.listeners);
 
         for (SessionListener l : sl) {
@@ -56,6 +46,8 @@ public class SessionFactory extends Abst
         return session;
     }
 
+    protected abstract AbstractSession doCreateSession(IoSession ioSession) 
throws Exception;
+
     /**
      * Add a session |listener|.
      *

Modified: 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java
URL: 
http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java?rev=1163790&r1=1163789&r2=1163790&view=diff
==============================================================================
--- 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java
 (original)
+++ 
mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/server/session/SessionFactory.java
 Wed Aug 31 20:19:23 2011
@@ -18,14 +18,10 @@
  */
 package org.apache.sshd.server.session;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.mina.core.session.IoSession;
 import org.apache.sshd.SshServer;
-import org.apache.sshd.common.AbstractSessionIoHandler;
-import org.apache.sshd.common.SessionListener;
 import org.apache.sshd.common.session.AbstractSession;
+import org.apache.sshd.common.session.AbstractSessionFactory;
 
 /**
  * A factory of server sessions.
@@ -35,51 +31,16 @@ import org.apache.sshd.common.session.Ab
  *
  * @author <a href="mailto:[email protected]";>Apache MINA SSHD Project</a>
  */
-public class SessionFactory extends AbstractSessionIoHandler {
+public class SessionFactory extends AbstractSessionFactory {
 
     protected SshServer server;
-    protected final List<SessionListener> listeners = new 
ArrayList<SessionListener>();
 
     public void setServer(SshServer server) {
         this.server = server;
     }
 
-    protected AbstractSession createSession(IoSession ioSession) throws 
Exception {
-        ServerSession session = new ServerSession(server, ioSession);
-        List<SessionListener> sl = new 
ArrayList<SessionListener>(this.listeners);
-
-        for (SessionListener l : sl) {
-            l.sessionCreated(session);
-            session.addListener(l);
-        }
-
-        return session;
-    }
-
-    /**
-     * Add a session |listener|.
-     *
-     * @param listener the session listener to add
-     */
-    public void addListener(SessionListener listener) {
-        if (listener == null) {
-            throw new IllegalArgumentException();
-        }
-
-        synchronized (this.listeners) {
-            this.listeners.add(listener);
-        }
-    }
-
-    /**
-     * Remove a session |listener|.
-     *
-     * @param listener the session listener to remove
-     */
-    public void removeListener(SessionListener listener) {
-        synchronized (this.listeners) {
-            this.listeners.remove(listener);
-        }
+    protected AbstractSession doCreateSession(IoSession ioSession) throws 
Exception {
+        return new ServerSession(server, ioSession);
     }
 
 }


Reply via email to