You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vk...@apache.org on 2021/06/25 18:37:55 UTC

[ignite-3] 01/06: IGNITE-14993 - Choose available port out of a range

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 <va...@gmail.com>
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;