You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by yu...@apache.org on 2024/02/08 16:20:44 UTC
(rocketmq) branch develop updated: [ISSUE #7822] fix NettyRemotingClient can't connect to IPv6 address. (#7823)
This is an automated email from the ASF dual-hosted git repository.
yuzhou pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/develop by this push:
new 3acc262ab4 [ISSUE #7822] fix NettyRemotingClient can't connect to IPv6 address. (#7823)
3acc262ab4 is described below
commit 3acc262ab4421d08e6a6de92939e2960bb77ffca
Author: kaikoo <42...@users.noreply.github.com>
AuthorDate: Fri Feb 9 00:20:40 2024 +0800
[ISSUE #7822] fix NettyRemotingClient can't connect to IPv6 address. (#7823)
* #7822 fix NettyRemotingClient can't connect to IPv6 address.
* #7822 fix NettyRemotingClient can't connect to IPv6 address.
---
.../rocketmq/remoting/netty/NettyRemotingClient.java | 5 +++--
.../rocketmq/remoting/netty/NettyRemotingClientTest.java | 16 ++++++++++++++++
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/remoting/src/main/java/org/apache/rocketmq/remoting/netty/NettyRemotingClient.java b/remoting/src/main/java/org/apache/rocketmq/remoting/netty/NettyRemotingClient.java
index 9f15191306..f5157d0304 100644
--- a/remoting/src/main/java/org/apache/rocketmq/remoting/netty/NettyRemotingClient.java
+++ b/remoting/src/main/java/org/apache/rocketmq/remoting/netty/NettyRemotingClient.java
@@ -351,9 +351,10 @@ public class NettyRemotingClient extends NettyRemotingAbstract implements Remoti
return bootstrap;
}
- // Do not use RemotingUtil, it will directly resolve the domain
+ // Do not use RemotingHelper.string2SocketAddress(), it will directly resolve the domain
private String[] getHostAndPort(String address) {
- return address.split(":");
+ int split = address.lastIndexOf(":");
+ return split < 0 ? new String[]{address} : new String[]{address.substring(0, split), address.substring(split + 1)};
}
@Override
diff --git a/remoting/src/test/java/org/apache/rocketmq/remoting/netty/NettyRemotingClientTest.java b/remoting/src/test/java/org/apache/rocketmq/remoting/netty/NettyRemotingClientTest.java
index 1cc6b4f468..456e7ecdd5 100644
--- a/remoting/src/test/java/org/apache/rocketmq/remoting/netty/NettyRemotingClientTest.java
+++ b/remoting/src/test/java/org/apache/rocketmq/remoting/netty/NettyRemotingClientTest.java
@@ -16,9 +16,12 @@
*/
package org.apache.rocketmq.remoting.netty;
+import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.local.LocalChannel;
+
+import java.lang.reflect.Field;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -50,6 +53,7 @@ import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -290,4 +294,16 @@ public class NettyRemotingClientTest {
verify(rpcHookMock).doBeforeRequest(anyString(), eq(request));
verify(rpcHookMock, never()).doAfterResponse(anyString(), eq(request), any());
}
+
+ @Test
+ public void testIsAddressReachableFail() throws NoSuchFieldException, IllegalAccessException {
+ Bootstrap bootstrap = spy(Bootstrap.class);
+ Field field = NettyRemotingClient.class.getDeclaredField("bootstrap");
+ field.setAccessible(true);
+ field.set(remotingClient, bootstrap);
+ assertThat(remotingClient.isAddressReachable("0.0.0.0:8080")).isFalse();
+ verify(bootstrap).connect(eq("0.0.0.0"), eq(8080));
+ assertThat(remotingClient.isAddressReachable("[fe80::]:8080")).isFalse();
+ verify(bootstrap).connect(eq("[fe80::]"), eq(8080));
+ }
}