Skip to content

Commit 3acc262

Browse files
authored
[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.
1 parent 5e61354 commit 3acc262

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

remoting/src/main/java/org/apache/rocketmq/remoting/netty/NettyRemotingClient.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,10 @@ public void initChannel(SocketChannel ch) {
351351
return bootstrap;
352352
}
353353

354-
// Do not use RemotingUtil, it will directly resolve the domain
354+
// Do not use RemotingHelper.string2SocketAddress(), it will directly resolve the domain
355355
private String[] getHostAndPort(String address) {
356-
return address.split(":");
356+
int split = address.lastIndexOf(":");
357+
return split < 0 ? new String[]{address} : new String[]{address.substring(0, split), address.substring(split + 1)};
357358
}
358359

359360
@Override

remoting/src/test/java/org/apache/rocketmq/remoting/netty/NettyRemotingClientTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616
*/
1717
package org.apache.rocketmq.remoting.netty;
1818

19+
import io.netty.bootstrap.Bootstrap;
1920
import io.netty.channel.Channel;
2021
import io.netty.channel.ChannelFuture;
2122
import io.netty.channel.local.LocalChannel;
23+
24+
import java.lang.reflect.Field;
2225
import java.util.concurrent.CompletableFuture;
2326
import java.util.concurrent.ExecutionException;
2427
import java.util.concurrent.ExecutorService;
@@ -50,6 +53,7 @@
5053
import static org.mockito.Mockito.doReturn;
5154
import static org.mockito.Mockito.mock;
5255
import static org.mockito.Mockito.never;
56+
import static org.mockito.Mockito.spy;
5357
import static org.mockito.Mockito.times;
5458
import static org.mockito.Mockito.verify;
5559

@@ -290,4 +294,16 @@ public void testInvokeImplFail() {
290294
verify(rpcHookMock).doBeforeRequest(anyString(), eq(request));
291295
verify(rpcHookMock, never()).doAfterResponse(anyString(), eq(request), any());
292296
}
297+
298+
@Test
299+
public void testIsAddressReachableFail() throws NoSuchFieldException, IllegalAccessException {
300+
Bootstrap bootstrap = spy(Bootstrap.class);
301+
Field field = NettyRemotingClient.class.getDeclaredField("bootstrap");
302+
field.setAccessible(true);
303+
field.set(remotingClient, bootstrap);
304+
assertThat(remotingClient.isAddressReachable("0.0.0.0:8080")).isFalse();
305+
verify(bootstrap).connect(eq("0.0.0.0"), eq(8080));
306+
assertThat(remotingClient.isAddressReachable("[fe80::]:8080")).isFalse();
307+
verify(bootstrap).connect(eq("[fe80::]"), eq(8080));
308+
}
293309
}

0 commit comments

Comments
 (0)