This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit b6fbc0ad3d5d1ab4c73be1abb67308641e0a98e0 Author: zhangdong <493738...@qq.com> AuthorDate: Sun Jul 30 22:47:24 2023 +0800 [fix](ipv6)Remove restrictions from IPv4 when add backend (#22323) When adding be, it is required to have only one colon, otherwise an error will be reported. However, ipv6 has many colons ``` String[] pair = hostPort.split(":"); if (pair.length != 2) { throw new AnalysisException("Invalid host port: " + hostPort); } ``` --- .../org/apache/doris/common/util/NetUtils.java | 14 +++++----- .../org/apache/doris/system/SystemInfoService.java | 5 ---- .../apache/doris/system/SystemInfoServiceTest.java | 32 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/NetUtils.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/NetUtils.java index 3470cea203..334dd11564 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/NetUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/NetUtils.java @@ -137,16 +137,16 @@ public class NetUtils { } public static SystemInfoService.HostInfo resolveHostInfoFromHostPort(String hostPort) throws AnalysisException { + String[] pair; if (hostPort.charAt(0) == '[') { - String[] pair = hostPort.substring(1).split("]:"); - return new SystemInfoService.HostInfo(pair[0], Integer.valueOf(pair[1])); + pair = hostPort.substring(1).split("]:"); } else { - String[] pair = hostPort.split(":"); - if (pair.length != 2) { - throw new AnalysisException("invalid host port: " + hostPort); - } - return new SystemInfoService.HostInfo(pair[0], Integer.valueOf(pair[1])); + pair = hostPort.split(":"); + } + if (pair.length != 2) { + throw new AnalysisException("invalid host port: " + hostPort); } + return new SystemInfoService.HostInfo(pair[0], Integer.valueOf(pair[1])); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java b/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java index f423981d2d..b2e5d7df40 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java +++ b/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java @@ -718,11 +718,6 @@ public class SystemInfoService { throw new AnalysisException("Invalid host port: " + hostPort); } - String[] pair = hostPort.split(":"); - if (pair.length != 2) { - throw new AnalysisException("Invalid host port: " + hostPort); - } - HostInfo hostInfo = NetUtils.resolveHostInfoFromHostPort(hostPort); String host = hostInfo.getHost(); diff --git a/fe/fe-core/src/test/java/org/apache/doris/system/SystemInfoServiceTest.java b/fe/fe-core/src/test/java/org/apache/doris/system/SystemInfoServiceTest.java index 172fbd5594..d207e0ce2a 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/system/SystemInfoServiceTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/system/SystemInfoServiceTest.java @@ -20,9 +20,11 @@ package org.apache.doris.system; import org.apache.doris.catalog.DiskInfo; import org.apache.doris.catalog.Env; import org.apache.doris.catalog.ReplicaAllocation; +import org.apache.doris.common.AnalysisException; import org.apache.doris.common.FeMetaVersion; import org.apache.doris.meta.MetaContext; import org.apache.doris.resource.Tag; +import org.apache.doris.system.SystemInfoService.HostInfo; import org.apache.doris.thrift.TStorageMedium; import com.google.common.collect.ImmutableMap; @@ -57,6 +59,35 @@ public class SystemInfoServiceTest { infoService.addBackend(backend); } + @Test + public void testGetHostAndPort() { + String ipv4 = "192.168.1.2:9050"; + String ipv6 = "[fe80::5054:ff:fec9:dee0]:9050"; + String ipv6Error = "fe80::5054:ff:fec9:dee0:9050"; + try { + HostInfo hostAndPort = SystemInfoService.getHostAndPort(ipv4); + Assert.assertEquals("192.168.1.2", hostAndPort.getHost()); + Assert.assertEquals(9050, hostAndPort.getPort()); + } catch (AnalysisException e) { + e.printStackTrace(); + Assert.fail(); + } + try { + HostInfo hostAndPort = SystemInfoService.getHostAndPort(ipv6); + Assert.assertEquals("fe80::5054:ff:fec9:dee0", hostAndPort.getHost()); + Assert.assertEquals(9050, hostAndPort.getPort()); + } catch (AnalysisException e) { + e.printStackTrace(); + Assert.fail(); + } + try { + SystemInfoService.getHostAndPort(ipv6Error); + Assert.fail(); + } catch (AnalysisException e) { + e.printStackTrace(); + } + } + @Test public void testBackendHbResponseSerialization() throws IOException { MetaContext metaContext = new MetaContext(); @@ -401,4 +432,5 @@ public class SystemInfoServiceTest { tagMap.put(Tag.TYPE_ROLE, Tag.VALUE_COMPUTATION); be.setTagMap(tagMap); } + } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org