Skip to content

[ISSUE-xxxx] Fix IPv6 address parsing across server and client components#17567

Open
xiaoyekanren wants to merge 1 commit intoapache:masterfrom
xiaoyekanren:fix-ipv6-address-parsing
Open

[ISSUE-xxxx] Fix IPv6 address parsing across server and client components#17567
xiaoyekanren wants to merge 1 commit intoapache:masterfrom
xiaoyekanren:fix-ipv6-address-parsing

Conversation

@xiaoyekanren
Copy link
Copy Markdown
Contributor

@xiaoyekanren xiaoyekanren commented Apr 28, 2026

Problem

Multiple components in IoTDB cannot correctly handle IPv6 addresses when configured with IPv6 endpoints like [::1]:10710. Using split(":") to parse IPv6 addresses causes:

  • NumberFormatException when parsing empty string as port
  • ConfigNode/DataNode startup failure
  • JDBC URL parsing failure
  • Python client init_from_node_urls failure

For IPv6 address [::1]:10710, split(":") produces:

  • items[0] = [
  • items[1] = "" (empty string) ← Integer.parseInt throws exception
  • items[2] = 1]
  • items[3] = 10710

Solution

This PR fixes IPv6 address parsing in 3 components:

1. Ratis Consensus Utils (Server-side)

  • File: iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/utils/Utils.java
  • Methods:
    • hostAddress() - Wrap IPv6 addresses in brackets [ip]:port format
    • fromRaftPeerAddressToTEndPoint() - Parse IPv6 format [ipv6]:port correctly
    • fromRaftPeerProtoToTEndPoint() - Parse IPv6 format correctly

2. JDBC Client

  • File: iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java
  • Method: parseUrl() - Handle JDBC URLs like jdbc:iotdb://[::1]:6667/ by detecting [ipv6] format

3. Python Client

  • File: iotdb-client/client-py/iotdb/Session.py
  • Method: init_from_node_urls() - Parse IPv6 node URLs like [::1]:6667 correctly

Affected Components

Component IPv6 Support Before IPv6 Support After
ConfigNode/DataNode ❌ Startup fails ✅ Works
JDBC URL ❌ Parse fails jdbc:iotdb://[::1]:6667/
Python Session init_from_node_urls fails [::1]:6667
Java Session ✅ Already works ✅ No change needed
C++ Client ✅ Already works ✅ No change needed

Test Plan

  • Manual testing with IPv6 configuration:
    • cn_internal_address=::1
    • dn_rpc_address=::1
    • JDBC URL: jdbc:iotdb://[::1]:6667/
    • Python: Session.init_from_node_urls(["[::1]:6667"])
  • Verify ConfigNode and DataNode can start successfully with IPv6 addresses
  • Verify JDBC and Python clients can connect to IPv6 endpoints

The address parsing methods in Utils.java used split(":") which cannot
correctly handle IPv6 addresses like [::1]:10710. This caused:
- NumberFormatException when parsing empty string as port
- ConfigNode/DataNode startup failure when configured with IPv6 addresses

Changes:
- hostAddress(): Wrap IPv6 addresses in brackets [ip]:port format
- fromRaftPeerAddressToTEndPoint(): Parse IPv6 format correctly
- fromRaftPeerProtoToTEndPoint(): Parse IPv6 format correctly
@xiaoyekanren xiaoyekanren force-pushed the fix-ipv6-address-parsing branch from 5ca65b2 to ed12608 Compare April 28, 2026 06:58
@xiaoyekanren xiaoyekanren changed the title Fix IPv6 address parsing in Ratis consensus Utils [ISSUE-xxxx] Fix IPv6 address parsing across server and client components Apr 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant