From 93c387192562cd0e5680ede709626bff70ec942b Mon Sep 17 00:00:00 2001 From: Wenjun Ruan Date: Wed, 19 Jul 2023 17:25:58 +0800 Subject: [PATCH] Support parse ipv6 (#14584) --- .../api/service/LoggerServiceTest.java | 2 +- .../registry/api/RegistryClient.java | 6 +- .../dolphinscheduler/remote/utils/Host.java | 121 ++---------------- .../remote/utils/HostTest.java | 6 +- 4 files changed, 21 insertions(+), 114 deletions(-) diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java index 51b9faf55c..8b0594faf6 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java @@ -183,7 +183,7 @@ public class LoggerServiceTest { .thenReturn(new byte[0]); Mockito.when(projectMapper.queryProjectByTaskInstanceId(1)).thenReturn(project); byte[] result = loggerService.getLogBytes(loginUser, 1); - Assertions.assertEquals(90, result.length); + Assertions.assertEquals(62, result.length); } @Test diff --git a/dolphinscheduler-registry/dolphinscheduler-registry-api/src/main/java/org/apache/dolphinscheduler/registry/api/RegistryClient.java b/dolphinscheduler-registry/dolphinscheduler-registry-api/src/main/java/org/apache/dolphinscheduler/registry/api/RegistryClient.java index 4423a0ffd1..6b8046b6e2 100644 --- a/dolphinscheduler-registry/dolphinscheduler-registry-api/src/main/java/org/apache/dolphinscheduler/registry/api/RegistryClient.java +++ b/dolphinscheduler-registry/dolphinscheduler-registry-api/src/main/java/org/apache/dolphinscheduler/registry/api/RegistryClient.java @@ -109,10 +109,10 @@ public class RegistryClient { // todo: add host, port in heartBeat Info, so that we don't need to parse this again server.setZkDirectory(registryNodeType.getRegistryPath() + "/" + serverPath); // set host and port - String[] hostAndPort = serverPath.split(Constants.COLON); + int lastColonIndex = serverPath.lastIndexOf(":"); // fetch the last one - server.setHost(hostAndPort[0]); - server.setPort(Integer.parseInt(hostAndPort[1])); + server.setHost(serverPath.substring(0, lastColonIndex)); + server.setPort(Integer.parseInt(serverPath.substring(lastColonIndex + 1))); serverList.add(server); } return serverList; diff --git a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/Host.java b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/Host.java index ccc4af829d..94a852ea33 100644 --- a/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/Host.java +++ b/dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/utils/Host.java @@ -17,33 +17,20 @@ package org.apache.dolphinscheduler.remote.utils; +import static org.apache.dolphinscheduler.common.constants.Constants.COLON; + import java.io.Serializable; -import java.util.Objects; +import lombok.Data; import lombok.NonNull; -/** - * server address - */ +@Data public class Host implements Serializable { - private static final String COLON = ":"; - public static final Host EMPTY = new Host(); - /** - * address - */ - private String address; - - /** - * ip - */ private String ip; - /** - * port - */ private int port; public Host() { @@ -52,107 +39,23 @@ public class Host implements Serializable { public Host(String ip, int port) { this.ip = ip; this.port = port; - this.address = ip + COLON + port; } public Host(String address) { - String[] parts = splitAddress(address); - this.ip = parts[0]; - this.port = Integer.parseInt(parts[1]); - this.address = address; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - String[] parts = splitAddress(address); - this.ip = parts[0]; - this.port = Integer.parseInt(parts[1]); - this.address = address; - } - - public String getIp() { - return ip; - } - - public void setIp(String ip) { - this.ip = ip; - this.address = ip + COLON + port; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - this.address = ip + COLON + port; - } - - /** - * address convert host - * - * @param address address - * @return host - */ - public static Host of(@NonNull String address) { - String[] parts = splitAddress(address); - return new Host(parts[0], Integer.parseInt(parts[1])); - } - - /** - * address convert host - * - * @param address address - * @return host - */ - public static String[] splitAddress(String address) { - if (address == null) { - throw new IllegalArgumentException("Host : address is null."); - } - String[] parts = address.split(COLON); - if (parts.length != 2) { + int lastColonIndex = address.lastIndexOf(COLON); + if (lastColonIndex < 0) { throw new IllegalArgumentException(String.format("Host : %s illegal.", address)); } - return parts; - } - - /** - * whether old version - * - * @param address address - * @return old version is true , otherwise is false - */ - public static Boolean isOldVersion(String address) { - String[] parts = address.split(COLON); - return parts.length != 2; + this.ip = address.substring(0, lastColonIndex); + this.port = Integer.parseInt(address.substring(lastColonIndex + 1)); } - @Override - public String toString() { - return "Host{" - + "address='" + address + '\'' - + ", ip='" + ip + '\'' - + ", port=" + port - + '}'; + public String getAddress() { + return ip + COLON + port; } - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Host host = (Host) o; - return port == host.port && Objects.equals(address, host.address) && Objects.equals(ip, host.ip); + public static Host of(@NonNull String address) { + return new Host(address); } - @Override - public int hashCode() { - return Objects.hash(address, ip, port); - } } diff --git a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/utils/HostTest.java b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/utils/HostTest.java index ce8859fd9b..ce8a433a4b 100644 --- a/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/utils/HostTest.java +++ b/dolphinscheduler-remote/src/test/java/org/apache/dolphinscheduler/remote/utils/HostTest.java @@ -29,9 +29,13 @@ public class HostTest { public void testHost() { Host host = Host.of("192.158.2.2:22"); Assertions.assertEquals(22, host.getPort()); - host.setAddress("127.0.0.1:8888"); + host = new Host("127.0.0.1:8888"); Assertions.assertEquals("127.0.0.1", host.getIp()); Assertions.assertEquals(8888, host.getPort()); + + host = new Host("2001:db8:1::ab9:C0A8:102:5678"); + Assertions.assertEquals("2001:db8:1::ab9:C0A8:102", host.getIp()); + Assertions.assertEquals(5678, host.getPort()); } }