This is an automated email from the ASF dual-hosted git repository. vkulichenko pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 4c93ea183afe561b910f23e634c534bffa867f17 Author: Valentin Kulichenko <[email protected]> AuthorDate: Fri Jun 25 11:01:40 2021 -0700 IGNITE-14993 - Choose available port out of a range --- .../internal/network/netty/ConnectionManager.java | 2 ++ .../ignite/internal/network/netty/NettyServer.java | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/network/src/main/java/org/apache/ignite/internal/network/netty/ConnectionManager.java b/modules/network/src/main/java/org/apache/ignite/internal/network/netty/ConnectionManager.java index 7930e2d..1570026 100644 --- a/modules/network/src/main/java/org/apache/ignite/internal/network/netty/ConnectionManager.java +++ b/modules/network/src/main/java/org/apache/ignite/internal/network/netty/ConnectionManager.java @@ -120,6 +120,8 @@ public class ConnectionManager { //TODO: timeout value should be extracted into common configuration // https://issues.apache.org/jira/browse/IGNITE-14538 server.start().get(3, TimeUnit.SECONDS); + + LOG.info("Connection created [address=" + server.address() + ']'); } catch (ExecutionException e) { Throwable cause = e.getCause(); diff --git a/modules/network/src/main/java/org/apache/ignite/internal/network/netty/NettyServer.java b/modules/network/src/main/java/org/apache/ignite/internal/network/netty/NettyServer.java index c45c8bf..5cc998a 100644 --- a/modules/network/src/main/java/org/apache/ignite/internal/network/netty/NettyServer.java +++ b/modules/network/src/main/java/org/apache/ignite/internal/network/netty/NettyServer.java @@ -25,6 +25,7 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.ServerChannel; @@ -43,6 +44,9 @@ import org.jetbrains.annotations.TestOnly; * Netty server channel wrapper. */ public class NettyServer { + /** Port range. */ + private static final int PORT_RANGE = 100; + /** A lock for start and stop operations. */ private final Object startStopLock = new Object(); @@ -205,7 +209,18 @@ public class NettyServer { */ .childOption(ChannelOption.TCP_NODELAY, true); - serverStartFuture = NettyUtils.toChannelCompletableFuture(bootstrap.bind(port)) + CompletableFuture<Channel> bindFuture = NettyUtils.toChannelCompletableFuture(bootstrap.bind(port)); + + for (int i = 1; i < PORT_RANGE; i++) { + int port0 = port + i; + + bindFuture = bindFuture + .thenApply(CompletableFuture::completedFuture) + .exceptionally(err -> NettyUtils.toChannelCompletableFuture(bootstrap.bind(port0))) + .thenCompose(Function.identity()); + } + + serverStartFuture = bindFuture .handle((channel, err) -> { synchronized (startStopLock) { CompletableFuture<Void> workerCloseFuture = serverCloseFuture;
