Repository: mina-sshd Updated Branches: refs/heads/master 101a50951 -> bba23bf70
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java b/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java index e797456..8704a4a 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractCommandSupport.java @@ -23,13 +23,13 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Collection; -import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import org.apache.sshd.common.session.Session; import org.apache.sshd.common.session.SessionHolder; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.logging.AbstractLoggingBean; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.common.util.threads.ExecutorServiceCarrier; import org.apache.sshd.common.util.threads.ThreadUtils; import org.apache.sshd.server.Environment; @@ -56,20 +56,17 @@ public abstract class AbstractCommandSupport protected Future<?> cmdFuture; protected Thread cmdRunner; protected ExecutorService executorService; - protected boolean shutdownOnExit; protected boolean cbCalled; protected ServerSession serverSession; - protected AbstractCommandSupport(String command, ExecutorService executorService, boolean shutdownOnExit) { + protected AbstractCommandSupport(String command, ExecutorService executorService) { this.command = command; if (executorService == null) { String poolName = GenericUtils.isEmpty(command) ? getClass().getSimpleName() : command.replace(' ', '_').replace('/', ':'); this.executorService = ThreadUtils.newSingleThreadExecutor(poolName); - this.shutdownOnExit = true; // we always close the ad-hoc executor service } else { this.executorService = executorService; - this.shutdownOnExit = shutdownOnExit; } } @@ -97,11 +94,6 @@ public abstract class AbstractCommandSupport return executorService; } - @Override - public boolean isShutdownOnExit() { - return shutdownOnExit; - } - public InputStream getInputStream() { return in; } @@ -176,7 +168,7 @@ public abstract class AbstractCommandSupport cmdFuture = null; ExecutorService executors = getExecutorService(); - if ((executors != null) && (!executors.isShutdown()) && isShutdownOnExit()) { + if ((executors != null) && (!executors.isShutdown())) { Collection<Runnable> runners = executors.shutdownNow(); if (debugEnabled) { log.debug("destroy() - shutdown executor service - runners count=" + runners.size()); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java b/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java index e4d0f58..6722976 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/command/AbstractFileSystemCommand.java @@ -21,9 +21,9 @@ package org.apache.sshd.server.command; import java.io.IOException; import java.nio.file.FileSystem; -import java.util.concurrent.ExecutorService; import org.apache.sshd.common.file.FileSystemAware; +import org.apache.sshd.common.util.threads.ExecutorService; /** * Provides a basic useful skeleton for {@link Command} executions that require file system access @@ -34,8 +34,8 @@ public abstract class AbstractFileSystemCommand extends AbstractCommandSupport i protected FileSystem fileSystem; - public AbstractFileSystemCommand(String command, ExecutorService executorService, boolean shutdownOnExit) { - super(command, executorService, shutdownOnExit); + public AbstractFileSystemCommand(String command, ExecutorService executorService) { + super(command, executorService); } public FileSystem getFileSystem() { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java b/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java index 55ba23d..48ec7bd 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/DirectTcpipFactory.java @@ -24,6 +24,7 @@ import org.apache.sshd.server.forward.TcpipServerChannel.TcpipFactory; * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ public class DirectTcpipFactory extends TcpipFactory { + public static final DirectTcpipFactory INSTANCE = new DirectTcpipFactory(); public DirectTcpipFactory() { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java b/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java index 74e394e..352667c 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/ForwardedTcpipFactory.java @@ -24,6 +24,7 @@ import org.apache.sshd.server.forward.TcpipServerChannel.TcpipFactory; * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ public class ForwardedTcpipFactory extends TcpipFactory { + public static final ForwardedTcpipFactory INSTANCE = new ForwardedTcpipFactory(); public ForwardedTcpipFactory() { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java index 949fd55..663553b 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/forward/TcpipServerChannel.java @@ -22,9 +22,8 @@ import java.io.IOException; import java.io.OutputStream; import java.net.ConnectException; import java.net.SocketAddress; -import java.util.Collection; +import java.util.Collections; import java.util.Objects; -import java.util.concurrent.ExecutorService; import org.apache.sshd.client.future.DefaultOpenFuture; import org.apache.sshd.client.future.OpenFuture; @@ -50,6 +49,7 @@ import org.apache.sshd.common.util.ValidateUtils; import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.common.util.net.SshdSocketAddress; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.common.util.threads.ExecutorServiceCarrier; import org.apache.sshd.common.util.threads.ThreadUtils; import org.apache.sshd.server.channel.AbstractServerChannel; @@ -61,7 +61,9 @@ import org.apache.sshd.server.forward.TcpForwardingFilter.Type; * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ public class TcpipServerChannel extends AbstractServerChannel implements ForwardingTunnelEndpointsProvider { + public abstract static class TcpipFactory implements ChannelFactory, ExecutorServiceCarrier { + private final ForwardingFilter.Type type; protected TcpipFactory(ForwardingFilter.Type type) { @@ -77,21 +79,14 @@ public class TcpipServerChannel extends AbstractServerChannel implements Forward return type.getName(); } - @Override // user can override to provide an alternative + @Override public ExecutorService getExecutorService() { return null; } @Override - public boolean isShutdownOnExit() { - return false; - } - - @Override public Channel create() { - TcpipServerChannel channel = new TcpipServerChannel(getType()); - channel.setExecutorService(getExecutorService()); - channel.setShutdownOnExit(isShutdownOnExit()); + TcpipServerChannel channel = new TcpipServerChannel(getType(), ThreadUtils.noClose(getExecutorService())); return channel; } } @@ -105,7 +100,8 @@ public class TcpipServerChannel extends AbstractServerChannel implements Forward private SshdSocketAddress originatorAddress; private SocketAddress localAddress; - public TcpipServerChannel(ForwardingFilter.Type type) { + public TcpipServerChannel(ForwardingFilter.Type type, ExecutorService executor) { + super("", Collections.emptyList(), executor); this.type = Objects.requireNonNull(type, "No channel type specified"); } @@ -329,27 +325,16 @@ public class TcpipServerChannel extends AbstractServerChannel implements Forward // allocate a temporary executor service if none provided ExecutorService executors = (service == null) - ? ThreadUtils.newSingleThreadExecutor("TcpIpServerChannel-ConnectorCleanup[" + getSession() + "]") - : service; - // shutdown the temporary executor service if had to create it - boolean shutdown = (executors != service) || isShutdownOnExit(); + ? ThreadUtils.newSingleThreadExecutor("TcpIpServerChannel-ConnectorCleanup[" + getSession() + "]") + : ThreadUtils.noClose(service); return builder().when(closingFeature).run(toString(), () -> { executors.submit(() -> { - try { - if (debugEnabled) { - log.debug("disposing connector: {} for: {}", connector, TcpipServerChannel.this); - } - connector.close(immediately); - } finally { - if (shutdown && (!executors.isShutdown())) { - Collection<Runnable> runners = executors.shutdownNow(); - if (debugEnabled) { - log.debug("destroy({}) - shutdown executor service - runners count={}", - TcpipServerChannel.this, runners.size()); - } - } + if (debugEnabled) { + log.debug("disposing connector: {} for: {}", connector, TcpipServerChannel.this); } + connector.close(immediately) + .addListener(f -> executors.close(true)); }); }).build().close(false); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/main/java/org/apache/sshd/server/session/ServerConnectionService.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerConnectionService.java b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerConnectionService.java index b76bfa3..98c785a 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/session/ServerConnectionService.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/session/ServerConnectionService.java @@ -27,8 +27,9 @@ import org.apache.sshd.common.session.helpers.AbstractConnectionService; * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ public class ServerConnectionService - extends AbstractConnectionService<AbstractServerSession> + extends AbstractConnectionService implements ServerSessionHolder { + protected ServerConnectionService(AbstractServerSession s) throws SshException { super(s); @@ -41,4 +42,9 @@ public class ServerConnectionService public final ServerSession getServerSession() { return getSession(); } + + @Override + public AbstractServerSession getSession() { + return (AbstractServerSession) super.getSession(); + } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/test/java/org/apache/sshd/common/forward/AbstractServerCloseTestSupport.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/forward/AbstractServerCloseTestSupport.java b/sshd-core/src/test/java/org/apache/sshd/common/forward/AbstractServerCloseTestSupport.java index 0ab991e..ab5194f 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/forward/AbstractServerCloseTestSupport.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/forward/AbstractServerCloseTestSupport.java @@ -29,11 +29,9 @@ import java.nio.channels.CompletionHandler; import java.nio.charset.StandardCharsets; import java.util.Collections; -import org.apache.sshd.common.util.OsUtils; import org.apache.sshd.util.test.BaseTestSupport; import org.junit.After; import org.junit.Assert; -import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; @@ -141,8 +139,11 @@ public abstract class AbstractServerCloseTestSupport extends BaseTestSupport { private void readInOneBuffer(int serverPort) throws Exception { outputDebugMessage("readInOneBuffer(port=%d)", serverPort); - try (Socket s = new Socket(TEST_LOCALHOST, serverPort)) { + try (Socket s = new Socket()) { s.setSoTimeout(300); + s.setReceiveBufferSize(65536); + s.connect(new InetSocketAddress(TEST_LOCALHOST, serverPort)); + Thread.sleep(50L); byte buf[] = new byte[PAYLOAD.length()]; try (InputStream inputStream = s.getInputStream()) { @@ -157,8 +158,12 @@ public abstract class AbstractServerCloseTestSupport extends BaseTestSupport { private void readInTwoBuffersWithPause(int serverPort) throws Exception { outputDebugMessage("readInTwoBuffersWithPause(port=%d)", serverPort); - try (Socket s = new Socket(TEST_LOCALHOST, serverPort)) { + try (Socket s = new Socket()) { s.setSoTimeout(300); + s.setReceiveBufferSize(65536); + s.connect(new InetSocketAddress(TEST_LOCALHOST, serverPort)); + Thread.sleep(50L); + byte b1[] = new byte[PAYLOAD.length() / 2]; byte b2[] = new byte[PAYLOAD.length()]; @@ -202,7 +207,6 @@ public abstract class AbstractServerCloseTestSupport extends BaseTestSupport { */ @Test public void testRemotePortForwardOneBuffer() throws Exception { - Assume.assumeTrue("Intermittent failures in Windows", OsUtils.isUNIX()); readInOneBuffer(startRemotePF()); } @@ -224,7 +228,6 @@ public abstract class AbstractServerCloseTestSupport extends BaseTestSupport { @Test public void testLocalPortForwardOneBuffer() throws Exception { - Assume.assumeTrue("Intermittent failures in Windows", OsUtils.isUNIX()); readInOneBuffer(startLocalPF()); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/test/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactoryTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactoryTest.java b/sshd-core/src/test/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactoryTest.java index 6d48266..ebf4284 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactoryTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/io/DefaultIoServiceFactoryFactoryTest.java @@ -19,12 +19,10 @@ package org.apache.sshd.common.io; -import java.io.IOException; import java.util.Collections; -import java.util.concurrent.ExecutorService; import org.apache.sshd.common.FactoryManager; -import org.apache.sshd.common.util.threads.ExecutorServiceCarrier; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.util.test.BaseTestSupport; import org.junit.FixMethodOrder; import org.junit.Test; @@ -57,7 +55,7 @@ public class DefaultIoServiceFactoryFactoryTest extends BaseTestSupport { @SuppressWarnings("boxing") @Test - public void testExecutorServiceInitialization() throws IOException { + public void testExecutorServiceInitialization() throws Exception { ExecutorService service = Mockito.mock(ExecutorService.class); Mockito.when(service.shutdownNow()).thenReturn(Collections.emptyList()); Mockito.when(service.isShutdown()).thenReturn(Boolean.TRUE); @@ -74,18 +72,14 @@ public class DefaultIoServiceFactoryFactoryTest extends BaseTestSupport { String name = f.getName(); try { System.setProperty(propName, name); - for (boolean shutdownOnExit : new boolean[]{true, false}) { - DefaultIoServiceFactoryFactory defaultFactory = new DefaultIoServiceFactoryFactory(service, shutdownOnExit); + DefaultIoServiceFactoryFactory defaultFactory = new DefaultIoServiceFactoryFactory(() -> service); - try (IoServiceFactory factory = defaultFactory.create(manager)) { - if (!(factory instanceof ExecutorServiceCarrier)) { - continue; - } + try (IoServiceFactory factory = defaultFactory.create(manager)) { - ExecutorServiceCarrier carrier = (ExecutorServiceCarrier) factory; - assertSame(name + "/" + shutdownOnExit + " - mismatched executor service", service, carrier.getExecutorService()); - assertEquals(name + "/" + shutdownOnExit + " - mismatched shutdown on exit", shutdownOnExit, carrier.isShutdownOnExit()); - } + ExecutorService svc = (ExecutorService) factory.getClass().getMethod("getExecutorService").invoke(factory); + assertSame(name + " - mismatched executor service", service, svc); + } catch (NoSuchMethodException e) { + // ignore if there's no executor service } } finally { System.clearProperty(propName); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/test/java/org/apache/sshd/common/util/ThreadUtilsTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/common/util/ThreadUtilsTest.java b/sshd-core/src/test/java/org/apache/sshd/common/util/ThreadUtilsTest.java index 5e224ff..09f3bb0 100644 --- a/sshd-core/src/test/java/org/apache/sshd/common/util/ThreadUtilsTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/common/util/ThreadUtilsTest.java @@ -20,9 +20,8 @@ package org.apache.sshd.common.util; import java.util.Collection; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.common.util.threads.ThreadUtils; import org.apache.sshd.util.test.BaseTestSupport; import org.apache.sshd.util.test.NoIoTestCase; @@ -47,7 +46,7 @@ public class ThreadUtilsTest extends BaseTestSupport { assertNull("Unexpected instance for shutdown=" + shutdownOnExit, ThreadUtils.protectExecutorServiceShutdown(null, shutdownOnExit)); } - ExecutorService service = Executors.newSingleThreadExecutor(); + ExecutorService service = ThreadUtils.newSingleThreadExecutor("pool"); try { assertSame("Unexpected wrapped instance", service, ThreadUtils.protectExecutorServiceShutdown(service, true)); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java b/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java index 6b4f0df..3bbcbc2 100644 --- a/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/server/ServerTest.java @@ -326,7 +326,7 @@ public class ServerTest extends BaseTestSupport { assertTrue("No changes in open channels", channelListener.waitForOpenChannelsChange(5L, TimeUnit.SECONDS)); try (AbstractSession serverSession = sshd.getActiveSessions().iterator().next()) { - AbstractConnectionService<?> service = serverSession.getService(AbstractConnectionService.class); + AbstractConnectionService service = serverSession.getService(AbstractConnectionService.class); Collection<? extends Channel> channels = service.getChannels(); try (Channel channel = channels.iterator().next()) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java b/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java index c199a38..da2c95e 100644 --- a/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java +++ b/sshd-core/src/test/java/org/apache/sshd/util/test/CommandExecutionHelper.java @@ -37,7 +37,7 @@ public abstract class CommandExecutionHelper extends AbstractCommandSupport { } protected CommandExecutionHelper(String command) { - super(command, null, true); + super(command, null); } @Override http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java ---------------------------------------------------------------------- diff --git a/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java b/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java index 1542e75..cb75a3a 100644 --- a/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java +++ b/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommand.java @@ -24,9 +24,9 @@ import java.nio.file.FileSystem; import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.concurrent.ExecutorService; import org.apache.sshd.common.channel.ChannelOutputStream; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.server.command.AbstractFileSystemCommand; /** @@ -45,8 +45,8 @@ public abstract class AbstractGitCommand protected final GitLocationResolver rootDirResolver; protected FileSystem fileSystem; - protected AbstractGitCommand(GitLocationResolver rootDirResolver, String command, ExecutorService executorService, boolean shutdownOnExit) { - super(command, executorService, shutdownOnExit); + protected AbstractGitCommand(GitLocationResolver rootDirResolver, String command, ExecutorService executorService) { + super(command, executorService); this.rootDirResolver = Objects.requireNonNull(rootDirResolver, "No GIT root directory resolver provided"); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommandFactory.java ---------------------------------------------------------------------- diff --git a/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommandFactory.java b/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommandFactory.java index 71f6d1b..b0cb79f 100644 --- a/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommandFactory.java +++ b/sshd-git/src/main/java/org/apache/sshd/git/AbstractGitCommandFactory.java @@ -19,10 +19,9 @@ package org.apache.sshd.git; -import java.util.concurrent.ExecutorService; - import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.ValidateUtils; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.common.util.threads.ExecutorServiceCarrier; import org.apache.sshd.server.command.AbstractDelegatingCommandFactory; import org.apache.sshd.server.command.Command; @@ -40,7 +39,6 @@ public abstract class AbstractGitCommandFactory private final String cmdPrefix; private GitLocationResolver rootDirResolver; private ExecutorService executorService; - private boolean shutdownOnExit; /** * @param name Command factory logical name @@ -62,21 +60,11 @@ public abstract class AbstractGitCommandFactory return executorService; } - @Override - public boolean isShutdownOnExit() { - return shutdownOnExit; - } - public AbstractGitCommandFactory withExecutorService(ExecutorService executorService) { this.executorService = executorService; return this; } - public AbstractGitCommandFactory withShutdownOnExit(boolean shutdownOnExit) { - this.shutdownOnExit = shutdownOnExit; - return this; - } - @Override public GitLocationResolver getGitLocationResolver() { return rootDirResolver; http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java ---------------------------------------------------------------------- diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java index 3b65b2a..565f88b 100644 --- a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java +++ b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommand.java @@ -21,10 +21,10 @@ package org.apache.sshd.git.pack; import java.io.IOException; import java.nio.file.Path; import java.util.List; -import java.util.concurrent.ExecutorService; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.ValidateUtils; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.git.AbstractGitCommand; import org.apache.sshd.git.GitLocationResolver; import org.apache.sshd.server.Environment; @@ -46,11 +46,9 @@ public class GitPackCommand extends AbstractGitCommand { * @param command Command to execute * @param executorService An {@link ExecutorService} to be used when {@link #start(Environment)}-ing * execution. If {@code null} an ad-hoc single-threaded service is created and used. - * @param shutdownOnExit If {@code true} the {@link ExecutorService#shutdownNow()} will be called when - * command terminates - unless it is the ad-hoc service, which will be shutdown regardless */ - public GitPackCommand(GitLocationResolver rootDirResolver, String command, ExecutorService executorService, boolean shutdownOnExit) { - super(rootDirResolver, command, executorService, shutdownOnExit); + public GitPackCommand(GitLocationResolver rootDirResolver, String command, ExecutorService executorService) { + super(rootDirResolver, command, executorService); } @Override http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommandFactory.java ---------------------------------------------------------------------- diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommandFactory.java b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommandFactory.java index 784281f..5548df6 100644 --- a/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommandFactory.java +++ b/sshd-git/src/main/java/org/apache/sshd/git/pack/GitPackCommandFactory.java @@ -18,8 +18,7 @@ */ package org.apache.sshd.git.pack; -import java.util.concurrent.ExecutorService; - +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.git.AbstractGitCommandFactory; import org.apache.sshd.git.GitLocationResolver; import org.apache.sshd.server.command.CommandFactory; @@ -58,12 +57,7 @@ public class GitPackCommandFactory extends AbstractGitCommandFactory { } @Override - public GitPackCommandFactory withShutdownOnExit(boolean shutdownOnExit) { - return (GitPackCommandFactory) super.withShutdownOnExit(shutdownOnExit); - } - - @Override public GitPackCommand createGitCommand(String command) { - return new GitPackCommand(getGitLocationResolver(), command, getExecutorService(), isShutdownOnExit()); + return new GitPackCommand(getGitLocationResolver(), command, getExecutorService()); } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java ---------------------------------------------------------------------- diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java b/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java index 5a95449..c827057 100644 --- a/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java +++ b/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommand.java @@ -23,9 +23,9 @@ import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.List; -import java.util.concurrent.ExecutorService; import org.apache.sshd.common.util.ValidateUtils; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.git.AbstractGitCommand; import org.apache.sshd.git.GitLocationResolver; import org.apache.sshd.server.Environment; @@ -41,11 +41,9 @@ public class GitPgmCommand extends AbstractGitCommand { * @param command Command to execute * @param executorService An {@link ExecutorService} to be used when {@link #start(Environment)}-ing * execution. If {@code null} an ad-hoc single-threaded service is created and used. - * @param shutdownOnExit If {@code true} the {@link ExecutorService#shutdownNow()} will be called when - * command terminates - unless it is the ad-hoc service, which will be shutdown regardless */ - public GitPgmCommand(GitLocationResolver rootDirResolver, String command, ExecutorService executorService, boolean shutdownOnExit) { - super(rootDirResolver, command, executorService, shutdownOnExit); + public GitPgmCommand(GitLocationResolver rootDirResolver, String command, ExecutorService executorService) { + super(rootDirResolver, command, executorService); } @Override http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommandFactory.java ---------------------------------------------------------------------- diff --git a/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommandFactory.java b/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommandFactory.java index 2da6d48..b68cb00 100644 --- a/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommandFactory.java +++ b/sshd-git/src/main/java/org/apache/sshd/git/pgm/GitPgmCommandFactory.java @@ -18,8 +18,7 @@ */ package org.apache.sshd.git.pgm; -import java.util.concurrent.ExecutorService; - +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.git.AbstractGitCommandFactory; import org.apache.sshd.git.GitLocationResolver; import org.apache.sshd.server.command.CommandFactory; @@ -58,12 +57,7 @@ public class GitPgmCommandFactory extends AbstractGitCommandFactory { } @Override - public GitPgmCommandFactory withShutdownOnExit(boolean shutdownOnExit) { - return (GitPgmCommandFactory) super.withShutdownOnExit(shutdownOnExit); - } - - @Override public GitPgmCommand createGitCommand(String command) { - return new GitPgmCommand(getGitLocationResolver(), command.substring(GIT_COMMAND_PREFIX.length()), getExecutorService(), isShutdownOnExit()); + return new GitPgmCommand(getGitLocationResolver(), command.substring(GIT_COMMAND_PREFIX.length()), getExecutorService()); } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactory.java ---------------------------------------------------------------------- diff --git a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactory.java b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactory.java index 9581b69..2931566 100644 --- a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactory.java +++ b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactory.java @@ -18,8 +18,6 @@ */ package org.apache.sshd.common.io.mina; -import java.util.concurrent.ExecutorService; - import org.apache.mina.core.service.IoProcessor; import org.apache.mina.core.service.SimpleIoProcessorPool; import org.apache.mina.transport.socket.nio.NioProcessor; @@ -29,6 +27,7 @@ import org.apache.sshd.common.io.AbstractIoServiceFactory; import org.apache.sshd.common.io.IoAcceptor; import org.apache.sshd.common.io.IoConnector; import org.apache.sshd.common.io.IoHandler; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.common.util.threads.ThreadUtils; /** @@ -40,10 +39,8 @@ public class MinaServiceFactory extends AbstractIoServiceFactory { private final IoProcessor<NioSession> ioProcessor; - public MinaServiceFactory(FactoryManager factoryManager, ExecutorService service, boolean shutdownOnExit) { - super(factoryManager, - (service == null) ? ThreadUtils.newCachedThreadPool(factoryManager.toString() + "-mina") : service, - (service == null) || shutdownOnExit); + public MinaServiceFactory(FactoryManager factoryManager, ExecutorService service) { + super(factoryManager, ThreadUtils.newCachedThreadPoolIf(service, factoryManager.toString() + "-mina")); ioProcessor = new SimpleIoProcessorPool<>(NioProcessor.class, getExecutorService(), getNioWorkers(factoryManager), null); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactoryFactory.java ---------------------------------------------------------------------- diff --git a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactoryFactory.java b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactoryFactory.java index 7057d5a..dfef37d 100644 --- a/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactoryFactory.java +++ b/sshd-mina/src/main/java/org/apache/sshd/common/io/mina/MinaServiceFactoryFactory.java @@ -18,34 +18,29 @@ */ package org.apache.sshd.common.io.mina; -import java.util.concurrent.ExecutorService; - +import org.apache.sshd.common.Factory; import org.apache.sshd.common.FactoryManager; import org.apache.sshd.common.io.AbstractIoServiceFactoryFactory; import org.apache.sshd.common.io.IoServiceFactory; +import org.apache.sshd.common.util.threads.ExecutorService; /** */ public class MinaServiceFactoryFactory extends AbstractIoServiceFactoryFactory { public MinaServiceFactoryFactory() { - this(null, true); + this(null); } /** - * @param executors The {@link ExecutorService} to use for spawning threads. - * If {@code null} then an internal service is allocated - in which case it - * is automatically shutdown regardless of the value of the <tt>shutdownOnExit</tt> - * parameter value - * @param shutdownOnExit If {@code true} then the {@link ExecutorService#shutdownNow()} - * will be called (unless it is an internally allocated service which is always - * closed) + * @param factory The {@link ExecutorService} factory to use for spawning threads. + * If {@code null} then an internal service is allocated. */ - public MinaServiceFactoryFactory(ExecutorService executors, boolean shutdownOnExit) { - super(executors, shutdownOnExit); + public MinaServiceFactoryFactory(Factory<ExecutorService> factory) { + super(factory); } @Override public IoServiceFactory create(FactoryManager manager) { - return new MinaServiceFactory(manager, getExecutorService(), isShutdownOnExit()); + return new MinaServiceFactory(manager, newExecutor()); } } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoServiceFactoryFactory.java ---------------------------------------------------------------------- diff --git a/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoServiceFactoryFactory.java b/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoServiceFactoryFactory.java index 7920227..8cafba2 100644 --- a/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoServiceFactoryFactory.java +++ b/sshd-netty/src/main/java/org/apache/sshd/netty/NettyIoServiceFactoryFactory.java @@ -20,8 +20,8 @@ package org.apache.sshd.netty; import org.apache.sshd.common.FactoryManager; +import org.apache.sshd.common.io.AbstractIoServiceFactoryFactory; import org.apache.sshd.common.io.IoServiceFactory; -import org.apache.sshd.common.io.IoServiceFactoryFactory; import io.netty.channel.EventLoopGroup; @@ -29,7 +29,7 @@ import io.netty.channel.EventLoopGroup; * @author <a href="mailto:jul...@julienviet.com">Julien Viet</a> * @author <a href="mailto:d...@mina.apache.org">Apache MINA SSHD Project</a> */ -public class NettyIoServiceFactoryFactory implements IoServiceFactoryFactory { +public class NettyIoServiceFactoryFactory extends AbstractIoServiceFactoryFactory { protected final EventLoopGroup eventLoopGroup; @@ -38,6 +38,7 @@ public class NettyIoServiceFactoryFactory implements IoServiceFactoryFactory { } public NettyIoServiceFactoryFactory(EventLoopGroup eventLoopGroup) { + super(null); this.eventLoopGroup = eventLoopGroup; } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-scp/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java ---------------------------------------------------------------------- diff --git a/sshd-scp/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java b/sshd-scp/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java index 81c20db..bbea856 100644 --- a/sshd-scp/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java +++ b/sshd-scp/src/main/java/org/apache/sshd/client/scp/AbstractScpClient.java @@ -56,6 +56,10 @@ public abstract class AbstractScpClient extends AbstractLoggingBean implements S super(); } + public boolean isOpen() { + return getSession().isOpen(); + } + @Override public final ClientSession getSession() { return getClientSession(); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommand.java ---------------------------------------------------------------------- diff --git a/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommand.java b/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommand.java index 3bb4453..7af2b09 100644 --- a/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommand.java +++ b/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommand.java @@ -20,7 +20,6 @@ package org.apache.sshd.server.scp; import java.io.IOException; import java.util.Collections; -import java.util.concurrent.ExecutorService; import org.apache.sshd.common.scp.ScpException; import org.apache.sshd.common.scp.ScpFileOpener; @@ -28,6 +27,7 @@ import org.apache.sshd.common.scp.ScpHelper; import org.apache.sshd.common.scp.ScpTransferEventListener; import org.apache.sshd.common.scp.helpers.DefaultScpFileOpener; import org.apache.sshd.common.util.GenericUtils; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.common.util.threads.ThreadUtils; import org.apache.sshd.server.Environment; import org.apache.sshd.server.command.AbstractFileSystemCommand; @@ -60,9 +60,6 @@ public class ScpCommand * @param executorService An {@link ExecutorService} to be used when * {@link #start(Environment)}-ing execution. If {@code null} an ad-hoc * single-threaded service is created and used. - * @param shutdownOnExit If {@code true} the {@link ExecutorService#shutdownNow()} - * will be called when command terminates - unless it is the ad-hoc - * service, which will be shutdown regardless * @param sendSize Size (in bytes) of buffer to use when sending files * @param receiveSize Size (in bytes) of buffer to use when receiving files * @param fileOpener The {@link ScpFileOpener} - if {@code null} then {@link DefaultScpFileOpener} is used @@ -72,10 +69,10 @@ public class ScpCommand * @see ScpHelper#MIN_RECEIVE_BUFFER_SIZE */ public ScpCommand(String command, - ExecutorService executorService, boolean shutdownOnExit, + ExecutorService executorService, int sendSize, int receiveSize, ScpFileOpener fileOpener, ScpTransferEventListener eventListener) { - super(command, executorService, shutdownOnExit); + super(command, executorService); if (sendSize < ScpHelper.MIN_SEND_BUFFER_SIZE) { throw new IllegalArgumentException("<ScpCommmand>(" + command + ") send buffer size " http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommandFactory.java ---------------------------------------------------------------------- diff --git a/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommandFactory.java b/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommandFactory.java index 0f9a474..4f7aa00 100644 --- a/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommandFactory.java +++ b/sshd-scp/src/main/java/org/apache/sshd/server/scp/ScpCommandFactory.java @@ -20,7 +20,6 @@ package org.apache.sshd.server.scp; import java.util.Collection; import java.util.concurrent.CopyOnWriteArraySet; -import java.util.concurrent.ExecutorService; import org.apache.sshd.common.scp.ScpFileOpener; import org.apache.sshd.common.scp.ScpFileOpenerHolder; @@ -29,7 +28,8 @@ import org.apache.sshd.common.scp.ScpTransferEventListener; import org.apache.sshd.common.util.EventListenerUtils; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.ObjectBuilder; -import org.apache.sshd.common.util.threads.ExecutorServiceConfigurer; +import org.apache.sshd.common.util.threads.ExecutorService; +import org.apache.sshd.common.util.threads.ExecutorServiceCarrier; import org.apache.sshd.server.command.AbstractDelegatingCommandFactory; import org.apache.sshd.server.command.Command; import org.apache.sshd.server.command.CommandFactory; @@ -46,7 +46,8 @@ public class ScpCommandFactory extends AbstractDelegatingCommandFactory implements ScpFileOpenerHolder, Cloneable, - ExecutorServiceConfigurer { + ExecutorServiceCarrier { + public static final String SCP_FACTORY_NAME = "scp"; /** @@ -74,11 +75,6 @@ public class ScpCommandFactory return this; } - public Builder withShutdownOnExit(boolean shutdown) { - factory.setShutdownOnExit(shutdown); - return this; - } - public Builder withSendBufferSize(int sendSize) { factory.setSendBufferSize(sendSize); return this; @@ -106,7 +102,6 @@ public class ScpCommandFactory } private ExecutorService executors; - private boolean shutdownExecutor; private ScpFileOpener fileOpener; private int sendBufferSize = ScpHelper.MIN_SEND_BUFFER_SIZE; private int receiveBufferSize = ScpHelper.MIN_RECEIVE_BUFFER_SIZE; @@ -140,21 +135,10 @@ public class ScpCommandFactory * when the command is terminated - unless it is the ad-hoc service, which will be * shutdown regardless */ - @Override public void setExecutorService(ExecutorService service) { executors = service; } - @Override - public boolean isShutdownOnExit() { - return shutdownExecutor; - } - - @Override - public void setShutdownOnExit(boolean shutdown) { - shutdownExecutor = shutdown; - } - public int getSendBufferSize() { return sendBufferSize; } @@ -227,7 +211,7 @@ public class ScpCommandFactory @Override protected Command executeSupportedCommand(String command) { return new ScpCommand(command, - getExecutorService(), isShutdownOnExit(), + getExecutorService(), getSendBufferSize(), getReceiveBufferSize(), getScpFileOpener(), listenerProxy); } http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-scp/src/test/java/org/apache/sshd/client/scp/ScpTest.java ---------------------------------------------------------------------- diff --git a/sshd-scp/src/test/java/org/apache/sshd/client/scp/ScpTest.java b/sshd-scp/src/test/java/org/apache/sshd/client/scp/ScpTest.java index 3cc15b7..5712e2f 100644 --- a/sshd-scp/src/test/java/org/apache/sshd/client/scp/ScpTest.java +++ b/sshd-scp/src/test/java/org/apache/sshd/client/scp/ScpTest.java @@ -35,7 +35,6 @@ import java.util.Collection; import java.util.Date; import java.util.EnumSet; import java.util.Set; -import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -60,6 +59,7 @@ import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.OsUtils; import org.apache.sshd.common.util.ValidateUtils; import org.apache.sshd.common.util.io.IoUtils; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.server.SshServer; import org.apache.sshd.server.command.Command; import org.apache.sshd.server.scp.ScpCommand; @@ -768,9 +768,9 @@ public class ScpTest extends BaseTestSupport { final int testExitValue = 7365; class InternalScpCommand extends ScpCommand { - InternalScpCommand(String command, ExecutorService executorService, boolean shutdownOnExit, + InternalScpCommand(String command, ExecutorService executorService, int sendSize, int receiveSize, ScpFileOpener opener, ScpTransferEventListener eventListener) { - super(command, executorService, shutdownOnExit, sendSize, receiveSize, opener, eventListener); + super(command, executorService, sendSize, receiveSize, opener, eventListener); } @Override @@ -792,7 +792,7 @@ public class ScpTest extends BaseTestSupport { public Command createCommand(String command) { ValidateUtils.checkTrue(command.startsWith(ScpHelper.SCP_COMMAND_PREFIX), "Bad SCP command: %s", command); return new InternalScpCommand(command, - getExecutorService(), isShutdownOnExit(), + getExecutorService(), getSendBufferSize(), getReceiveBufferSize(), DefaultScpFileOpener.INSTANCE, ScpTransferEventListener.EMPTY); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-scp/src/test/java/org/apache/sshd/server/scp/ScpCommandFactoryTest.java ---------------------------------------------------------------------- diff --git a/sshd-scp/src/test/java/org/apache/sshd/server/scp/ScpCommandFactoryTest.java b/sshd-scp/src/test/java/org/apache/sshd/server/scp/ScpCommandFactoryTest.java index 1ee20fd..06ae97e 100644 --- a/sshd-scp/src/test/java/org/apache/sshd/server/scp/ScpCommandFactoryTest.java +++ b/sshd-scp/src/test/java/org/apache/sshd/server/scp/ScpCommandFactoryTest.java @@ -19,9 +19,8 @@ package org.apache.sshd.server.scp; -import java.util.concurrent.ExecutorService; - import org.apache.sshd.common.scp.ScpHelper; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.server.command.CommandFactory; import org.apache.sshd.util.test.BaseTestSupport; import org.apache.sshd.util.test.NoIoTestCase; @@ -52,7 +51,6 @@ public class ScpCommandFactoryTest extends BaseTestSupport { assertNull("Mismatched executor", factory.getExecutorService()); assertEquals("Mismatched send size", ScpHelper.MIN_SEND_BUFFER_SIZE, factory.getSendBufferSize()); assertEquals("Mismatched receive size", ScpHelper.MIN_RECEIVE_BUFFER_SIZE, factory.getReceiveBufferSize()); - assertFalse("Mismatched shutdown state", factory.isShutdownOnExit()); } /** @@ -69,13 +67,11 @@ public class ScpCommandFactoryTest extends BaseTestSupport { .withExecutorService(service) .withSendBufferSize(sendSize) .withReceiveBufferSize(receiveSize) - .withShutdownOnExit(true) .build(); assertSame("Mismatched delegate", delegate, factory.getDelegateCommandFactory()); assertSame("Mismatched executor", service, factory.getExecutorService()); assertEquals("Mismatched send size", sendSize, factory.getSendBufferSize()); assertEquals("Mismatched receive size", receiveSize, factory.getReceiveBufferSize()); - assertTrue("Mismatched shutdown state", factory.isShutdownOnExit()); } /** http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java b/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java index 369d1b2..aecbe2f 100644 --- a/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java +++ b/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystem.java @@ -40,7 +40,6 @@ import java.util.Objects; import java.util.TreeMap; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicBoolean; @@ -66,6 +65,7 @@ import org.apache.sshd.common.util.buffer.Buffer; import org.apache.sshd.common.util.buffer.BufferUtils; import org.apache.sshd.common.util.buffer.ByteArrayBuffer; import org.apache.sshd.common.util.io.IoUtils; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.common.util.threads.ExecutorServiceCarrier; import org.apache.sshd.common.util.threads.ThreadUtils; import org.apache.sshd.server.ChannelSessionAware; @@ -150,15 +150,11 @@ public class SftpSubsystem protected ServerSession serverSession; protected ChannelSession channelSession; protected ExecutorService executorService; - protected boolean shutdownOnExit; /** * @param executorService The {@link ExecutorService} to be used by * the {@link SftpSubsystem} command when starting execution. If * {@code null} then a single-threaded ad-hoc service is used. - * @param shutdownOnExit If {@code true} the {@link ExecutorService#shutdownNow()} - * will be called when subsystem terminates - unless it is the ad-hoc - * service, which will be shutdown regardless * @param policy The {@link UnsupportedAttributePolicy} to use if failed to access * some local file attributes * @param accessor The {@link SftpFileSystemAccessor} to use for opening files and directories @@ -166,16 +162,14 @@ public class SftpSubsystem * use when generating failed commands error messages * @see ThreadUtils#newSingleThreadExecutor(String) */ - public SftpSubsystem(ExecutorService executorService, boolean shutdownOnExit, UnsupportedAttributePolicy policy, + public SftpSubsystem(ExecutorService executorService, UnsupportedAttributePolicy policy, SftpFileSystemAccessor accessor, SftpErrorStatusDataHandler errorStatusDataHandler) { super(policy, accessor, errorStatusDataHandler); if (executorService == null) { this.executorService = ThreadUtils.newSingleThreadExecutor(getClass().getSimpleName()); - this.shutdownOnExit = true; // we always close the ad-hoc executor service } else { this.executorService = executorService; - this.shutdownOnExit = shutdownOnExit; } } @@ -195,11 +189,6 @@ public class SftpSubsystem } @Override - public boolean isShutdownOnExit() { - return shutdownOnExit; - } - - @Override public void setSession(ServerSession session) { this.serverSession = Objects.requireNonNull(session, "No session"); @@ -1003,7 +992,7 @@ public class SftpSubsystem pendingFuture = null; ExecutorService executors = getExecutorService(); - if ((executors != null) && (!executors.isShutdown()) && isShutdownOnExit()) { + if ((executors != null) && (!executors.isShutdown())) { Collection<Runnable> runners = executors.shutdownNow(); if (debugEnabled) { log.debug("destroy(" + session + ") - shutdown executor service - runners count=" + runners.size()); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactory.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactory.java b/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactory.java index 860f3ce..a60cab6 100644 --- a/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactory.java +++ b/sshd-sftp/src/main/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactory.java @@ -20,12 +20,11 @@ package org.apache.sshd.server.subsystem.sftp; import java.util.Objects; -import java.util.concurrent.ExecutorService; import org.apache.sshd.common.subsystem.sftp.SftpConstants; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.common.util.ObjectBuilder; -import org.apache.sshd.common.util.threads.ExecutorServiceConfigurer; +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.server.command.Command; import org.apache.sshd.server.subsystem.SubsystemFactory; @@ -34,13 +33,13 @@ import org.apache.sshd.server.subsystem.SubsystemFactory; */ public class SftpSubsystemFactory extends AbstractSftpEventListenerManager - implements SubsystemFactory, ExecutorServiceConfigurer, SftpEventListenerManager, SftpFileSystemAccessorManager { + implements SubsystemFactory, SftpEventListenerManager, SftpFileSystemAccessorManager { + public static final String NAME = SftpConstants.SFTP_SUBSYSTEM_NAME; public static final UnsupportedAttributePolicy DEFAULT_POLICY = UnsupportedAttributePolicy.Warn; public static class Builder extends AbstractSftpEventListenerManager implements ObjectBuilder<SftpSubsystemFactory> { private ExecutorService executors; - private boolean shutdownExecutor; private UnsupportedAttributePolicy policy = DEFAULT_POLICY; private SftpFileSystemAccessor fileSystemAccessor = SftpFileSystemAccessor.DEFAULT; private SftpErrorStatusDataHandler errorStatusDataHandler = SftpErrorStatusDataHandler.DEFAULT; @@ -54,11 +53,6 @@ public class SftpSubsystemFactory return this; } - public Builder withShutdownOnExit(boolean shutdown) { - shutdownExecutor = shutdown; - return this; - } - public Builder withUnsupportedAttributePolicy(UnsupportedAttributePolicy p) { policy = Objects.requireNonNull(p, "No policy"); return this; @@ -78,7 +72,6 @@ public class SftpSubsystemFactory public SftpSubsystemFactory build() { SftpSubsystemFactory factory = new SftpSubsystemFactory(); factory.setExecutorService(executors); - factory.setShutdownOnExit(shutdownExecutor); factory.setUnsupportedAttributePolicy(policy); factory.setFileSystemAccessor(fileSystemAccessor); factory.setErrorStatusDataHandler(errorStatusDataHandler); @@ -88,7 +81,6 @@ public class SftpSubsystemFactory } private ExecutorService executors; - private boolean shutdownExecutor; private UnsupportedAttributePolicy policy = DEFAULT_POLICY; private SftpFileSystemAccessor fileSystemAccessor = SftpFileSystemAccessor.DEFAULT; private SftpErrorStatusDataHandler errorStatusDataHandler = SftpErrorStatusDataHandler.DEFAULT; @@ -102,7 +94,6 @@ public class SftpSubsystemFactory return NAME; } - @Override public ExecutorService getExecutorService() { return executors; } @@ -111,26 +102,10 @@ public class SftpSubsystemFactory * @param service The {@link ExecutorService} to be used by the {@link SftpSubsystem} * command when starting execution. If {@code null} then a single-threaded ad-hoc service is used. */ - @Override public void setExecutorService(ExecutorService service) { executors = service; } - @Override - public boolean isShutdownOnExit() { - return shutdownExecutor; - } - - /** - * @param shutdownOnExit If {@code true} the {@link ExecutorService#shutdownNow()} - * will be called when subsystem terminates - unless it is the ad-hoc service, which - * will be shutdown regardless - */ - @Override - public void setShutdownOnExit(boolean shutdownOnExit) { - shutdownExecutor = shutdownOnExit; - } - public UnsupportedAttributePolicy getUnsupportedAttributePolicy() { return policy; } @@ -164,7 +139,7 @@ public class SftpSubsystemFactory @Override public Command create() { SftpSubsystem subsystem = - new SftpSubsystem(getExecutorService(), isShutdownOnExit(), + new SftpSubsystem(getExecutorService(), getUnsupportedAttributePolicy(), getFileSystemAccessor(), getErrorStatusDataHandler()); GenericUtils.forEach(getRegisteredListeners(), subsystem::addSftpEventListener); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java b/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java index 3f85a68..09bb1a9 100644 --- a/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java +++ b/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/SftpVersionsTest.java @@ -227,7 +227,7 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport { SftpSubsystemFactory factory = new SftpSubsystemFactory() { @Override public Command create() { - SftpSubsystem subsystem = new SftpSubsystem(getExecutorService(), isShutdownOnExit(), + SftpSubsystem subsystem = new SftpSubsystem(getExecutorService(), getUnsupportedAttributePolicy(), getFileSystemAccessor(), getErrorStatusDataHandler()) { @Override protected NavigableMap<String, Object> resolveFileAttributes(Path file, int flags, LinkOption... options) throws IOException { @@ -346,7 +346,7 @@ public class SftpVersionsTest extends AbstractSftpClientTestSupport { SftpSubsystemFactory factory = new SftpSubsystemFactory() { @Override public Command create() { - SftpSubsystem subsystem = new SftpSubsystem(getExecutorService(), isShutdownOnExit(), + SftpSubsystem subsystem = new SftpSubsystem(getExecutorService(), getUnsupportedAttributePolicy(), getFileSystemAccessor(), getErrorStatusDataHandler()) { @Override protected NavigableMap<String, Object> resolveFileAttributes(Path file, int flags, LinkOption... options) throws IOException { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/SpaceAvailableExtensionImplTest.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/SpaceAvailableExtensionImplTest.java b/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/SpaceAvailableExtensionImplTest.java index 82b82df..af83656 100644 --- a/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/SpaceAvailableExtensionImplTest.java +++ b/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/SpaceAvailableExtensionImplTest.java @@ -71,7 +71,7 @@ public class SpaceAvailableExtensionImplTest extends AbstractSftpClientTestSuppo sshd.setSubsystemFactories(Collections.singletonList(new SftpSubsystemFactory() { @Override public Command create() { - return new SftpSubsystem(getExecutorService(), isShutdownOnExit(), + return new SftpSubsystem(getExecutorService(), getUnsupportedAttributePolicy(), getFileSystemAccessor(), getErrorStatusDataHandler()) { @Override protected SpaceAvailableExtensionInfo doSpaceAvailable(int id, String path) throws IOException { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHExtensionsTest.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHExtensionsTest.java b/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHExtensionsTest.java index b8240d8..83ef70f 100644 --- a/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHExtensionsTest.java +++ b/sshd-sftp/src/test/java/org/apache/sshd/client/subsystem/sftp/extensions/openssh/helpers/OpenSSHExtensionsTest.java @@ -124,7 +124,7 @@ public class OpenSSHExtensionsTest extends AbstractSftpClientTestSupport { sshd.setSubsystemFactories(Collections.singletonList(new SftpSubsystemFactory() { @Override public Command create() { - return new SftpSubsystem(getExecutorService(), isShutdownOnExit(), + return new SftpSubsystem(getExecutorService(), getUnsupportedAttributePolicy(), getFileSystemAccessor(), getErrorStatusDataHandler()) { @Override protected List<OpenSSHExtension> resolveOpenSSHExtensions(ServerSession session) { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/7b35bb36/sshd-sftp/src/test/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactoryTest.java ---------------------------------------------------------------------- diff --git a/sshd-sftp/src/test/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactoryTest.java b/sshd-sftp/src/test/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactoryTest.java index 6420411..436ae17 100644 --- a/sshd-sftp/src/test/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactoryTest.java +++ b/sshd-sftp/src/test/java/org/apache/sshd/server/subsystem/sftp/SftpSubsystemFactoryTest.java @@ -19,8 +19,7 @@ package org.apache.sshd.server.subsystem.sftp; -import java.util.concurrent.ExecutorService; - +import org.apache.sshd.common.util.threads.ExecutorService; import org.apache.sshd.util.test.BaseTestSupport; import org.apache.sshd.util.test.NoIoTestCase; import org.junit.FixMethodOrder; @@ -47,7 +46,6 @@ public class SftpSubsystemFactoryTest extends BaseTestSupport { public void testBuilderDefaultFactoryValues() { SftpSubsystemFactory factory = new SftpSubsystemFactory.Builder().build(); assertNull("Mismatched executor", factory.getExecutorService()); - assertFalse("Mismatched shutdown state", factory.isShutdownOnExit()); assertSame("Mismatched unsupported attribute policy", SftpSubsystemFactory.DEFAULT_POLICY, factory.getUnsupportedAttributePolicy()); } @@ -59,10 +57,8 @@ public class SftpSubsystemFactoryTest extends BaseTestSupport { SftpSubsystemFactory.Builder builder = new SftpSubsystemFactory.Builder(); ExecutorService service = dummyExecutor(); SftpSubsystemFactory factory = builder.withExecutorService(service) - .withShutdownOnExit(true) .build(); assertSame("Mismatched executor", service, factory.getExecutorService()); - assertTrue("Mismatched shutdown state", factory.isShutdownOnExit()); for (UnsupportedAttributePolicy policy : UnsupportedAttributePolicy.VALUES) { SftpSubsystemFactory actual = builder.withUnsupportedAttributePolicy(policy).build();