From f2e6540b0ea6776bbe4d57933dd02fdf7c43135a Mon Sep 17 00:00:00 2001 From: HTHou Date: Thu, 23 Jul 2026 17:04:08 +0800 Subject: [PATCH 1/5] Fix CLI IPv6 endpoint formatting --- .../apache/iotdb/cli/i18n/CliMessages.java | 3 +++ .../apache/iotdb/cli/i18n/CliMessages.java | 3 +++ .../main/java/org/apache/iotdb/cli/Cli.java | 19 ++++++++++++++----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/iotdb-client/cli/src/main/i18n/en/org/apache/iotdb/cli/i18n/CliMessages.java b/iotdb-client/cli/src/main/i18n/en/org/apache/iotdb/cli/i18n/CliMessages.java index 9a877ca9d3c3b..5c13eb5575292 100644 --- a/iotdb-client/cli/src/main/i18n/en/org/apache/iotdb/cli/i18n/CliMessages.java +++ b/iotdb-client/cli/src/main/i18n/en/org/apache/iotdb/cli/i18n/CliMessages.java @@ -24,6 +24,9 @@ public final class CliMessages { // CliContext public static final String EXITING_WITH_CODE = "Exiting with code %d"; + // Cli + public static final String SUCCESSFULLY_LOGIN_AT = "Successfully login at %s"; + // IoTDBDataBackTool public static final String TARGET_DIR_EMPTY = " -targetdir cannot be empty, The backup folder must be specified"; diff --git a/iotdb-client/cli/src/main/i18n/zh/org/apache/iotdb/cli/i18n/CliMessages.java b/iotdb-client/cli/src/main/i18n/zh/org/apache/iotdb/cli/i18n/CliMessages.java index 68e5c47e9995d..0e0f8f456345e 100644 --- a/iotdb-client/cli/src/main/i18n/zh/org/apache/iotdb/cli/i18n/CliMessages.java +++ b/iotdb-client/cli/src/main/i18n/zh/org/apache/iotdb/cli/i18n/CliMessages.java @@ -24,6 +24,9 @@ public final class CliMessages { // CliContext public static final String EXITING_WITH_CODE = "正在退出,退出码 %d"; + // Cli + public static final String SUCCESSFULLY_LOGIN_AT = "成功登录到 %s"; + // IoTDBDataBackTool public static final String TARGET_DIR_EMPTY = " -targetdir 不能为空,必须指定备份目录"; diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java index 63c3c5d11539d..5a20e61d76163 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java @@ -19,6 +19,7 @@ package org.apache.iotdb.cli; +import org.apache.iotdb.cli.i18n.CliMessages; import org.apache.iotdb.cli.type.ExitType; import org.apache.iotdb.cli.utils.CliContext; import org.apache.iotdb.cli.utils.JlineUtils; @@ -26,6 +27,7 @@ import org.apache.iotdb.jdbc.Config; import org.apache.iotdb.jdbc.IoTDBConnection; import org.apache.iotdb.rpc.RpcUtils; +import org.apache.iotdb.rpc.UrlUtils; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; @@ -204,8 +206,7 @@ private static void serve(CliContext ctx) { private static void executeSql(CliContext ctx) throws TException { try (IoTDBConnection connection = - (IoTDBConnection) - DriverManager.getConnection(Config.IOTDB_URL_PREFIX + host + ":" + port + "/", info)) { + (IoTDBConnection) DriverManager.getConnection(buildJdbcUrl(host, port), info)) { connection.setQueryTimeout(queryTimeout); properties = connection.getServerProperties(); timestampPrecision = properties.getTimestampPrecision(); @@ -220,15 +221,15 @@ private static void executeSql(CliContext ctx) throws TException { private static void receiveCommands(CliContext ctx) throws TException { try (IoTDBConnection connection = - (IoTDBConnection) - DriverManager.getConnection(Config.IOTDB_URL_PREFIX + host + ":" + port + "/", info)) { + (IoTDBConnection) DriverManager.getConnection(buildJdbcUrl(host, port), info)) { connection.setQueryTimeout(queryTimeout); properties = connection.getServerProperties(); timestampPrecision = properties.getTimestampPrecision(); echoStarting(ctx); displayLogo(ctx, properties.getLogo(), properties.getVersion(), properties.getBuildInfo()); - ctx.getPrinter().println(String.format("Successfully login at %s:%s", host, port)); + ctx.getPrinter() + .println(String.format(CliMessages.SUCCESSFULLY_LOGIN_AT, formatEndpoint(host, port))); while (true) { boolean readLine = readerReadLine(ctx, connection); if (readLine) { @@ -241,6 +242,14 @@ private static void receiveCommands(CliContext ctx) throws TException { } } + private static String formatEndpoint(String host, String port) { + return UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)); + } + + private static String buildJdbcUrl(String host, String port) { + return Config.IOTDB_URL_PREFIX + formatEndpoint(host, port) + "/"; + } + private static boolean readerReadLine(CliContext ctx, IoTDBConnection connection) { String s; try { From a938b97bf256b4788887238e427c4eda4177473d Mon Sep 17 00:00:00 2001 From: HTHou Date: Thu, 23 Jul 2026 17:43:08 +0800 Subject: [PATCH 2/5] Fix IPv6 handling in client and ops tools --- ...sTableModelSubscriptionSessionExample.java | 3 +- .../TableModelSubscriptionSessionExample.java | 3 +- .../iotdb/tool/data/ExportDataTable.java | 5 ++- .../iotdb/tool/data/ImportDataTable.java | 5 ++- .../iotdb/tool/schema/ExportSchemaTable.java | 5 ++- .../iotdb/tool/schema/ImportSchemaTable.java | 5 ++- scripts/tools/ops/health_check.sh | 8 +++- scripts/tools/windows/ops/backup.bat | 14 +++++-- scripts/tools/windows/ops/health_check.bat | 41 ++++++++++++------- 9 files changed, 63 insertions(+), 26 deletions(-) diff --git a/example/subscription/src/main/java/org/apache/iotdb/ConsensusTableModelSubscriptionSessionExample.java b/example/subscription/src/main/java/org/apache/iotdb/ConsensusTableModelSubscriptionSessionExample.java index a877a4a861eda..0428701ed9055 100644 --- a/example/subscription/src/main/java/org/apache/iotdb/ConsensusTableModelSubscriptionSessionExample.java +++ b/example/subscription/src/main/java/org/apache/iotdb/ConsensusTableModelSubscriptionSessionExample.java @@ -20,6 +20,7 @@ package org.apache.iotdb; import org.apache.iotdb.isession.ITableSession; +import org.apache.iotdb.rpc.UrlUtils; import org.apache.iotdb.rpc.subscription.config.TopicConstant; import org.apache.iotdb.session.TableSessionBuilder; import org.apache.iotdb.session.subscription.ISubscriptionTableSession; @@ -193,7 +194,7 @@ private static void dropTopic(final String topicName) throws Exception { private static ITableSession openTableSession() throws Exception { return new TableSessionBuilder() - .nodeUrls(Collections.singletonList(HOST + ":" + PORT)) + .nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(HOST, PORT))) .username(USER) .password(PASSWORD) .build(); diff --git a/example/subscription/src/main/java/org/apache/iotdb/TableModelSubscriptionSessionExample.java b/example/subscription/src/main/java/org/apache/iotdb/TableModelSubscriptionSessionExample.java index 176530dcb8f69..39031ab4d4ca4 100644 --- a/example/subscription/src/main/java/org/apache/iotdb/TableModelSubscriptionSessionExample.java +++ b/example/subscription/src/main/java/org/apache/iotdb/TableModelSubscriptionSessionExample.java @@ -22,6 +22,7 @@ import org.apache.iotdb.isession.ITableSession; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.rpc.UrlUtils; import org.apache.iotdb.rpc.subscription.config.TopicConstant; import org.apache.iotdb.session.TableSessionBuilder; import org.apache.iotdb.session.subscription.ISubscriptionTableSession; @@ -168,7 +169,7 @@ private static void dataSubscription() throws Exception { public static void main(final String[] args) throws Exception { try (final ITableSession session = new TableSessionBuilder() - .nodeUrls(Collections.singletonList(HOST + ":" + PORT)) + .nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(HOST, PORT))) .username("root") .password("root") .build()) { diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java index 458c447ba4f5b..3966fd97c8bb4 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java @@ -24,6 +24,7 @@ import org.apache.iotdb.isession.SessionDataSet; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.rpc.UrlUtils; import org.apache.iotdb.session.TableSessionBuilder; import org.apache.iotdb.tool.common.Constants; @@ -65,7 +66,9 @@ public class ExportDataTable extends AbstractExportData { public void init() throws IoTDBConnectionException, StatementExecutionException { TableSessionBuilder tableSessionBuilder = new TableSessionBuilder() - .nodeUrls(Collections.singletonList(host + ":" + port)) + .nodeUrls( + Collections.singletonList( + UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)))) .username(username) .password(password) .database(database) diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java index d103c63555b67..dffc2badf8145 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java @@ -25,6 +25,7 @@ import org.apache.iotdb.isession.pool.ITableSessionPool; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.rpc.UrlUtils; import org.apache.iotdb.session.pool.TableSessionPoolBuilder; import org.apache.iotdb.tool.common.Constants; import org.apache.iotdb.tool.tsfile.ImportTsFileScanTool; @@ -79,7 +80,9 @@ public class ImportDataTable extends AbstractImportData { public void init() throws InterruptedException { TableSessionPoolBuilder tableSessionPoolBuilder = new TableSessionPoolBuilder() - .nodeUrls(Collections.singletonList(host + ":" + port)) + .nodeUrls( + Collections.singletonList( + UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)))) .user(username) .password(password) .maxSize(threadNum + 1) diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java index c9b15870d2175..5053bee812fe2 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java @@ -26,6 +26,7 @@ import org.apache.iotdb.isession.pool.ITableSessionPool; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.rpc.UrlUtils; import org.apache.iotdb.session.pool.TableSessionPoolBuilder; import org.apache.iotdb.tool.common.Constants; @@ -55,7 +56,9 @@ public class ExportSchemaTable extends AbstractExportSchema { public void init() throws InterruptedException { TableSessionPoolBuilder tableSessionPoolBuilder = new TableSessionPoolBuilder() - .nodeUrls(Collections.singletonList(host + ":" + port)) + .nodeUrls( + Collections.singletonList( + UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)))) .user(username) .password(password) .maxSize(threadNum + 1) diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java index 004ec8b4152bb..098fb43683f19 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java @@ -26,6 +26,7 @@ import org.apache.iotdb.isession.pool.ITableSessionPool; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; +import org.apache.iotdb.rpc.UrlUtils; import org.apache.iotdb.session.pool.TableSessionPoolBuilder; import org.apache.iotdb.tool.common.Constants; import org.apache.iotdb.tool.data.ImportDataScanTool; @@ -51,7 +52,9 @@ public class ImportSchemaTable extends AbstractImportSchema { public void init() throws InterruptedException { TableSessionPoolBuilder tableSessionPoolBuilder = new TableSessionPoolBuilder() - .nodeUrls(Collections.singletonList(host + ":" + port)) + .nodeUrls( + Collections.singletonList( + UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)))) .user(username) .password(password) .maxSize(threadNum + 1) diff --git a/scripts/tools/ops/health_check.sh b/scripts/tools/ops/health_check.sh index b538305f32c39..1a12ab27a7e9c 100644 --- a/scripts/tools/ops/health_check.sh +++ b/scripts/tools/ops/health_check.sh @@ -146,10 +146,14 @@ remote_ports_check() { if [ -n "$unreachable_ports" ]; then unreachable_combinations+=("IP: $host, Ports: $unreachable_ports") fi + display_host="$host" + if [[ "$display_host" == *:* ]] && [[ "${display_host:0:1}" != "[" ]]; then + display_host="[$display_host]" + fi if [ -n "$ip_port_list" ]; then - ip_port_list="$ip_port_list,$host:$all_ports" + ip_port_list="$ip_port_list,$display_host:$all_ports" else - ip_port_list="$host:$all_ports" + ip_port_list="$display_host:$all_ports" fi done echo "" diff --git a/scripts/tools/windows/ops/backup.bat b/scripts/tools/windows/ops/backup.bat index f06c674895f68..02cd16b5bb77e 100644 --- a/scripts/tools/windows/ops/backup.bat +++ b/scripts/tools/windows/ops/backup.bat @@ -71,9 +71,15 @@ set "operation_dirs=" set dn_rpc_port_occupied=0 set cn_internal_port_occupied=0 -for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( +for /f "tokens=1,2,5" %%i in ('netstat /ano') do ( + set "local_endpoint=%%j" + if "!local_endpoint:~0,1!"=="[" ( + set "local_port=!local_endpoint:*]:=!" + ) else ( + set "local_port=!local_endpoint:*:=!" + ) if %%i==TCP ( - if %%j==%dn_rpc_port% ( + if !local_port!==%dn_rpc_port% ( if !dn_rpc_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -82,7 +88,7 @@ for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( ) ) - ) else if %%j==%cn_internal_port% ( + ) else if !local_port!==%cn_internal_port% ( if !cn_internal_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -135,4 +141,4 @@ exit /b :checkFail echo Please stop IoTDB -exit /b \ No newline at end of file +exit /b diff --git a/scripts/tools/windows/ops/health_check.bat b/scripts/tools/windows/ops/health_check.bat index f8e87709efc07..7fc57f2bd5ad7 100644 --- a/scripts/tools/windows/ops/health_check.bat +++ b/scripts/tools/windows/ops/health_check.bat @@ -50,7 +50,7 @@ for %%a in (%*) do ( ) :: Append IP and port to the ips string if !isPort! equ 1 ( - set "ips=!ips!,!ip!:%%a" + set "ips=!ips!,!ip!;%%a" ) ) ) @@ -72,7 +72,7 @@ for %%a in (%*) do ( ) :: Append IP and port to the ips string if !isPort! equ 1 ( - set "ips=!ips!,!ip!:%%a" + set "ips=!ips!,!ip!;%%a" ) ) ) @@ -430,9 +430,15 @@ set dn_data_region_consensus_port_occupied=0 set cn_internal_port_occupied=0 set cn_consensus_port_occupied=0 set local_ports=%dn_rpc_port% %dn_internal_port% %dn_mpp_data_exchange_port% %dn_schema_region_consensus_port% %dn_data_region_consensus_port% %cn_consensus_port% %cn_internal_port% -for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( +for /f "tokens=1,2,5" %%i in ('netstat /ano') do ( + set "local_endpoint=%%j" + if "!local_endpoint:~0,1!"=="[" ( + set "local_port=!local_endpoint:*]:=!" + ) else ( + set "local_port=!local_endpoint:*:=!" + ) if %%i==TCP ( - if %%j==%dn_rpc_port% ( + if !local_port!==%dn_rpc_port% ( if !dn_rpc_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -443,7 +449,7 @@ for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( ) set dn_rpc_port_occupied=1 ) - ) else if %%j==%dn_internal_port% ( + ) else if !local_port!==%dn_internal_port% ( if !dn_internal_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -454,7 +460,7 @@ for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( ) set dn_internal_port_occupied=1 ) - ) else if %%j==%dn_mpp_data_exchange_port% ( + ) else if !local_port!==%dn_mpp_data_exchange_port% ( if !dn_mpp_data_exchange_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -465,7 +471,7 @@ for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( ) set dn_mpp_data_exchange_port_occupied=1 ) - ) else if %%j==%dn_schema_region_consensus_port% ( + ) else if !local_port!==%dn_schema_region_consensus_port% ( if !dn_schema_region_consensus_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -476,7 +482,7 @@ for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( ) set dn_schema_region_consensus_port_occupied=1 ) - ) else if %%j==%dn_data_region_consensus_port% ( + ) else if !local_port!==%dn_data_region_consensus_port% ( if !dn_data_region_consensus_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -488,7 +494,7 @@ for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( ) set dn_data_region_consensus_port_occupied=1 ) - ) else if %%j==%cn_internal_port% ( + ) else if !local_port!==%cn_internal_port% ( if !cn_internal_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -499,7 +505,7 @@ for /f "tokens=1,3,7 delims=: " %%i in ('netstat /ano') do ( ) set cn_internal_port_occupied=1 ) - ) else if %%j==%cn_consensus_port% ( + ) else if !local_port!==%cn_consensus_port% ( if !cn_consensus_port_occupied!==0 ( set spid=%%k call :checkIfIOTDBProcess !spid! is_iotdb @@ -556,9 +562,16 @@ exit /b :remote_ports_check for %%e in ("%endpoints:,=" "%") do ( set counter=0 - for /f "tokens=1,2 delims=:" %%i in ("%%~e") do ( + for /f "tokens=1,2 delims=;" %%i in ("%%~e") do ( set "ip=%%i" set "port=%%j" + if "!ip:~0,1!"=="[" if "!ip:~-1!"=="]" set "ip=!ip:~1,-1!" + set "display_ip=!ip!" + if not "!display_ip::=!"=="!display_ip!" ( + if not "!display_ip:~0,1!"=="[" ( + set "display_ip=[!display_ip!]" + ) + ) if "!allpreip!" == "!ip!" ( set "iplist=!iplist! !port!" ) else ( @@ -566,12 +579,12 @@ for %%e in ("%endpoints:,=" "%") do ( if !counter! EQU 0 ( set /a counter+=1 if defined iplist ( - set "iplist=!iplist!,!ip!:!port!" + set "iplist=!iplist!,!display_ip!:!port!" ) else ( - set "iplist=!ip!:!port!" + set "iplist=!display_ip!:!port!" ) ) else ( - set "iplist=!iplist!,!ip!:!port!" + set "iplist=!iplist!,!display_ip!:!port!" ) ) From 098dcd3c4d68252946c7fa13b490b84a289ee109 Mon Sep 17 00:00:00 2001 From: HTHou Date: Thu, 23 Jul 2026 17:45:25 +0800 Subject: [PATCH 3/5] Exclude subscription examples from IPv6 tool fix --- .../iotdb/ConsensusTableModelSubscriptionSessionExample.java | 3 +-- .../org/apache/iotdb/TableModelSubscriptionSessionExample.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/example/subscription/src/main/java/org/apache/iotdb/ConsensusTableModelSubscriptionSessionExample.java b/example/subscription/src/main/java/org/apache/iotdb/ConsensusTableModelSubscriptionSessionExample.java index 0428701ed9055..a877a4a861eda 100644 --- a/example/subscription/src/main/java/org/apache/iotdb/ConsensusTableModelSubscriptionSessionExample.java +++ b/example/subscription/src/main/java/org/apache/iotdb/ConsensusTableModelSubscriptionSessionExample.java @@ -20,7 +20,6 @@ package org.apache.iotdb; import org.apache.iotdb.isession.ITableSession; -import org.apache.iotdb.rpc.UrlUtils; import org.apache.iotdb.rpc.subscription.config.TopicConstant; import org.apache.iotdb.session.TableSessionBuilder; import org.apache.iotdb.session.subscription.ISubscriptionTableSession; @@ -194,7 +193,7 @@ private static void dropTopic(final String topicName) throws Exception { private static ITableSession openTableSession() throws Exception { return new TableSessionBuilder() - .nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(HOST, PORT))) + .nodeUrls(Collections.singletonList(HOST + ":" + PORT)) .username(USER) .password(PASSWORD) .build(); diff --git a/example/subscription/src/main/java/org/apache/iotdb/TableModelSubscriptionSessionExample.java b/example/subscription/src/main/java/org/apache/iotdb/TableModelSubscriptionSessionExample.java index 39031ab4d4ca4..176530dcb8f69 100644 --- a/example/subscription/src/main/java/org/apache/iotdb/TableModelSubscriptionSessionExample.java +++ b/example/subscription/src/main/java/org/apache/iotdb/TableModelSubscriptionSessionExample.java @@ -22,7 +22,6 @@ import org.apache.iotdb.isession.ITableSession; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; -import org.apache.iotdb.rpc.UrlUtils; import org.apache.iotdb.rpc.subscription.config.TopicConstant; import org.apache.iotdb.session.TableSessionBuilder; import org.apache.iotdb.session.subscription.ISubscriptionTableSession; @@ -169,7 +168,7 @@ private static void dataSubscription() throws Exception { public static void main(final String[] args) throws Exception { try (final ITableSession session = new TableSessionBuilder() - .nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(HOST, PORT))) + .nodeUrls(Collections.singletonList(HOST + ":" + PORT)) .username("root") .password("root") .build()) { From ebdbb4aff317b405aca699d67e593cb7295dcdde Mon Sep 17 00:00:00 2001 From: HTHou Date: Thu, 23 Jul 2026 17:59:54 +0800 Subject: [PATCH 4/5] Fix Windows backup port detection guards --- scripts/tools/windows/ops/backup.bat | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/tools/windows/ops/backup.bat b/scripts/tools/windows/ops/backup.bat index 02cd16b5bb77e..dc41df160da43 100644 --- a/scripts/tools/windows/ops/backup.bat +++ b/scripts/tools/windows/ops/backup.bat @@ -86,6 +86,7 @@ for /f "tokens=1,2,5" %%i in ('netstat /ano') do ( if !is_iotdb!==1 ( set local_iotdb_occupied_ports=%dn_rpc_port% !local_iotdb_occupied_ports! ) + set dn_rpc_port_occupied=1 ) ) else if !local_port!==%cn_internal_port% ( @@ -95,6 +96,7 @@ for /f "tokens=1,2,5" %%i in ('netstat /ano') do ( if !is_iotdb!==1 ( set local_iotdb_occupied_ports=%cn_internal_port% !local_iotdb_occupied_ports! ) + set cn_internal_port_occupied=1 ) ) ) From b0ab4ab40c8864dd037a865f62a66a8c483dfeb4 Mon Sep 17 00:00:00 2001 From: HTHou Date: Thu, 23 Jul 2026 18:24:37 +0800 Subject: [PATCH 5/5] Preserve endpoint port validation behavior --- .../cli/src/main/java/org/apache/iotdb/cli/Cli.java | 2 +- .../java/org/apache/iotdb/tool/data/ExportDataTable.java | 4 +--- .../java/org/apache/iotdb/tool/data/ImportDataTable.java | 4 +--- .../org/apache/iotdb/tool/schema/ExportSchemaTable.java | 4 +--- .../org/apache/iotdb/tool/schema/ImportSchemaTable.java | 4 +--- .../src/main/java/org/apache/iotdb/rpc/UrlUtils.java | 8 ++++++++ .../src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java | 3 +++ 7 files changed, 16 insertions(+), 13 deletions(-) diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java index 5a20e61d76163..a2ab742c881bb 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/cli/Cli.java @@ -243,7 +243,7 @@ private static void receiveCommands(CliContext ctx) throws TException { } private static String formatEndpoint(String host, String port) { - return UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)); + return UrlUtils.formatTEndPointIpv4AndIpv6Url(host, port); } private static String buildJdbcUrl(String host, String port) { diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java index 3966fd97c8bb4..1694e86c9f09e 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ExportDataTable.java @@ -66,9 +66,7 @@ public class ExportDataTable extends AbstractExportData { public void init() throws IoTDBConnectionException, StatementExecutionException { TableSessionBuilder tableSessionBuilder = new TableSessionBuilder() - .nodeUrls( - Collections.singletonList( - UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)))) + .nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(host, port))) .username(username) .password(password) .database(database) diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java index dffc2badf8145..d7dc94c4d2a64 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/data/ImportDataTable.java @@ -80,9 +80,7 @@ public class ImportDataTable extends AbstractImportData { public void init() throws InterruptedException { TableSessionPoolBuilder tableSessionPoolBuilder = new TableSessionPoolBuilder() - .nodeUrls( - Collections.singletonList( - UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)))) + .nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(host, port))) .user(username) .password(password) .maxSize(threadNum + 1) diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java index 5053bee812fe2..6d5c6a8fca866 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ExportSchemaTable.java @@ -56,9 +56,7 @@ public class ExportSchemaTable extends AbstractExportSchema { public void init() throws InterruptedException { TableSessionPoolBuilder tableSessionPoolBuilder = new TableSessionPoolBuilder() - .nodeUrls( - Collections.singletonList( - UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)))) + .nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(host, port))) .user(username) .password(password) .maxSize(threadNum + 1) diff --git a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java index 098fb43683f19..e42fd8135deef 100644 --- a/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java +++ b/iotdb-client/cli/src/main/java/org/apache/iotdb/tool/schema/ImportSchemaTable.java @@ -52,9 +52,7 @@ public class ImportSchemaTable extends AbstractImportSchema { public void init() throws InterruptedException { TableSessionPoolBuilder tableSessionPoolBuilder = new TableSessionPoolBuilder() - .nodeUrls( - Collections.singletonList( - UrlUtils.formatTEndPointIpv4AndIpv6Url(host, Integer.parseInt(port)))) + .nodeUrls(Collections.singletonList(UrlUtils.formatTEndPointIpv4AndIpv6Url(host, port))) .user(username) .password(password) .maxSize(threadNum + 1) diff --git a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/UrlUtils.java b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/UrlUtils.java index 2a02a365d2a14..838de7c535042 100644 --- a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/UrlUtils.java +++ b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/UrlUtils.java @@ -76,6 +76,14 @@ public static String convertTEndPointIpv4AndIpv6Url(TEndPoint endPoint) { /** Format host and port as host:port or [ipv6]:port. This method expects host without a port. */ public static String formatTEndPointIpv4AndIpv6Url(String host, int port) { + return formatTEndPointIpv4AndIpv6Url(host, String.valueOf(port)); + } + + /** + * Format host and port as host:port or [ipv6]:port. This method expects host without a port and + * leaves port validation to the endpoint consumer. + */ + public static String formatTEndPointIpv4AndIpv6Url(String host, String port) { String formattedHost = host; if (isIpv6Literal(host) && !isBracketedIpv6Literal(host)) { formattedHost = IPV6_BEGIN_MARK + host + IPV6_END_MARK; diff --git a/iotdb-client/service-rpc/src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java b/iotdb-client/service-rpc/src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java index fb1b5b1359b40..02dbd9ef68ddf 100644 --- a/iotdb-client/service-rpc/src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java +++ b/iotdb-client/service-rpc/src/test/java/org/apache/iotdb/rpc/UrlUtilsTest.java @@ -101,6 +101,7 @@ public void testConvertIPV4URL() { @Test public void testConvertHostNameURL() { assertEquals("localhost:22227", UrlUtils.formatTEndPointIpv4AndIpv6Url("localhost", 22227)); + assertEquals("localhost:22227", UrlUtils.formatTEndPointIpv4AndIpv6Url("localhost", "22227")); } @Test @@ -122,6 +123,8 @@ public void testConvertIPV6AbbURL() { public void testConvertBracketedIPV6URL() { assertEquals( "[D80::ABAA:0]:22227", UrlUtils.formatTEndPointIpv4AndIpv6Url("[D80::ABAA:0]", 22227)); + assertEquals( + "[D80::ABAA:0]:invalid", UrlUtils.formatTEndPointIpv4AndIpv6Url("D80::ABAA:0", "invalid")); } @Test