Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions iotdb-client/client-py/iotdb/Session.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,22 @@ def init_from_node_urls(
session.__hosts = []
session.__ports = []
for node_url in node_urls:
split = node_url.split(":")
session.__hosts.append(split[0])
session.__ports.append(int(split[1]))
# Handle IPv6 address format [ipv6]:port
if node_url.startswith("["):
bracket_end = node_url.find("]")
if bracket_end > 0:
host = node_url[1:bracket_end]
# Port comes after "]:"
port_str = node_url[bracket_end + 2:]
session.__hosts.append(host)
session.__ports.append(int(port_str))
else:
raise RuntimeError(f"Invalid IPv6 address format: {node_url}")
else:
# IPv4 format: host:port
split = node_url.split(":")
session.__hosts.append(split[0])
session.__ports.append(int(split[1]))
session.__host = session.__hosts[0]
session.__port = session.__ports[0]
session.__default_endpoint = TEndPoint(session.__host, session.__port)
Expand Down
24 changes: 19 additions & 5 deletions iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ public class Utils {
static final String RPC_COMPRESS = "rpc_compress";

/**
* Parse JDBC connection URL The only supported format of the URL is:
* jdbc:iotdb://localhost:6667/.
* Parse JDBC connection URL The only supported format of the URL is: jdbc:iotdb://localhost:6667/
* or jdbc:iotdb://[::1]:6667/ for IPv6.
*/
static IoTDBConnectionParams parseUrl(String url, Properties info) throws IoTDBURLException {
IoTDBConnectionParams params = new IoTDBConnectionParams(url);
Expand All @@ -57,10 +57,24 @@ static IoTDBConnectionParams parseUrl(String url, Properties info) throws IoTDBU
String suffixURL = null;
if (url.startsWith(Config.IOTDB_URL_PREFIX)) {
String subURL = url.substring(Config.IOTDB_URL_PREFIX.length());
int i = subURL.lastIndexOf(COLON);
host = subURL.substring(0, i);
int i;
// Handle IPv6 address format [ipv6]:port
if (subURL.startsWith("[")) {
int bracketEnd = subURL.indexOf(']');
if (bracketEnd > 0) {
host = subURL.substring(1, bracketEnd);
// Find port after "]:"
i = bracketEnd + 2;
} else {
throw new IoTDBURLException("Invalid IPv6 address format in URL: " + url);
}
} else {
// IPv4 format: use lastIndexOf to find port separator
i = subURL.lastIndexOf(COLON);
host = subURL.substring(0, i);
i++;
}
params.setHost(host);
i++;
// parse port
int port = 0;
for (; i < subURL.length() && Character.isDigit(subURL.charAt(i)); i++) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,12 @@ public class Utils {
private Utils() {}

public static String hostAddress(TEndPoint endpoint) {
return String.format("%s:%d", endpoint.getIp(), endpoint.getPort());
String ip = endpoint.getIp();
// IPv6 addresses need to be wrapped in brackets
if (ip.contains(":")) {
return String.format("[%s]:%d", ip, endpoint.getPort());
}
return String.format("%s:%d", ip, endpoint.getPort());
}

public static String fromTEndPointToString(TEndPoint endpoint) {
Expand All @@ -106,6 +111,14 @@ public static RaftPeerId fromNodeIdToRaftPeerId(int nodeId) {
}

public static TEndPoint fromRaftPeerAddressToTEndPoint(String address) {
// Handle IPv6 address format [ipv6]:port
if (address.startsWith("[")) {
int bracketEnd = address.indexOf(']');
String ip = address.substring(1, bracketEnd);
int port = Integer.parseInt(address.substring(bracketEnd + 2));
return new TEndPoint(ip, port);
}
// IPv4 format: ip:port
String[] items = address.split(":");
return new TEndPoint(items[0], Integer.parseInt(items[1]));
}
Expand All @@ -115,7 +128,16 @@ public static int fromRaftPeerIdToNodeId(RaftPeerId id) {
}

public static TEndPoint fromRaftPeerProtoToTEndPoint(RaftPeerProto proto) {
String[] items = proto.getAddress().split(":");
String address = proto.getAddress();
// Handle IPv6 address format [ipv6]:port
if (address.startsWith("[")) {
int bracketEnd = address.indexOf(']');
String ip = address.substring(1, bracketEnd);
int port = Integer.parseInt(address.substring(bracketEnd + 2));
return new TEndPoint(ip, port);
}
// IPv4 format: ip:port
String[] items = address.split(":");
return new TEndPoint(items[0], Integer.parseInt(items[1]));
}

Expand Down
Loading