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;