From 856e8e65597b0e447e4bb7efa3730a5b490d38e6 Mon Sep 17 00:00:00 2001 From: Ivan Dashchinskiy Date: Thu, 5 Nov 2026 23:24:49 +0300 Subject: [PATCH] fix: bracket bare IPv6 literals for the gRPC channel target ManagedChannelBuilder.forAddress("fd00::1", port) builds the channel target dns:///fd00::1:6334, which gRPC cannot parse. Bracket bare IPv6 literals before creating the channel, mirroring what the Go client does with net.JoinHostPort. Already-bracketed and hostname inputs are unaffected. --- src/main/java/io/qdrant/client/QdrantGrpcClient.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/io/qdrant/client/QdrantGrpcClient.java b/src/main/java/io/qdrant/client/QdrantGrpcClient.java index 5db3425..fc4139e 100644 --- a/src/main/java/io/qdrant/client/QdrantGrpcClient.java +++ b/src/main/java/io/qdrant/client/QdrantGrpcClient.java @@ -288,6 +288,11 @@ public QdrantGrpcClient build() { private static ManagedChannel createChannel( String host, int port, boolean useTransportLayerSecurity, String userAgent) { + if (host.indexOf(':') >= 0 && !host.startsWith("[")) { + // Bare IPv6 literal: gRPC parses the channel target as a URI, so the host + // must be bracketed (e.g. "[fd00::1]"). + host = "[" + host + "]"; + } ManagedChannelBuilder channelBuilder = ManagedChannelBuilder.forAddress(host, port); if (useTransportLayerSecurity) {