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);
}
}