This is an automated email from the ASF dual-hosted git repository.

vkulichenko pushed a commit to branch ignite-3.0.0-alpha2
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 1f6acbbf1612c32c702b32bbe0a0e03dba6168ef
Author: Valentin Kulichenko <valentin.kuliche...@gmail.com>
AuthorDate: Thu Jun 24 14:15:00 2021 -0700

    IGNITE-14993 - Choose available port out of a range
---
 .../ignite/network/internal/netty/ConnectionManager.java   |  2 ++
 .../apache/ignite/network/internal/netty/NettyServer.java  | 14 +++++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git 
a/modules/network/src/main/java/org/apache/ignite/network/internal/netty/ConnectionManager.java
 
b/modules/network/src/main/java/org/apache/ignite/network/internal/netty/ConnectionManager.java
index 3b3f94c..b2f4a10 100644
--- 
a/modules/network/src/main/java/org/apache/ignite/network/internal/netty/ConnectionManager.java
+++ 
b/modules/network/src/main/java/org/apache/ignite/network/internal/netty/ConnectionManager.java
@@ -94,6 +94,8 @@ public class ConnectionManager {
     public void start() throws IgniteInternalException {
         try {
             server.start().join();
+
+            LOG.info("Connection created [address=" + server.address() + ']');
         }
         catch (CompletionException e) {
             Throwable cause = e.getCause();
diff --git 
a/modules/network/src/main/java/org/apache/ignite/network/internal/netty/NettyServer.java
 
b/modules/network/src/main/java/org/apache/ignite/network/internal/netty/NettyServer.java
index feb99ed..2a458a5 100644
--- 
a/modules/network/src/main/java/org/apache/ignite/network/internal/netty/NettyServer.java
+++ 
b/modules/network/src/main/java/org/apache/ignite/network/internal/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;
@@ -171,7 +172,18 @@ public class NettyServer {
                  */
                 .childOption(ChannelOption.SO_KEEPALIVE, 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;

Reply via email to