Skip to content

Commit 2c306b6

Browse files
authored
fix: support tcp with TLS (port 9440) for otelcol migrator (#1783)
## Summary - Add support for TLS-enabled ClickHouse endpoints in otelcol migrator (`tcps://`, `tls://`, `clickhouse://` schemes) - Support `?secure=true` query parameter to override TLS setting on any scheme - Default TLS port to `9440` for `tcps`/`tls` schemes - Improve error message for unsupported schemes to list valid options ## Test plan - Added tests for `clickhouse://`, `tcps://`, `tls://` schemes with default and custom ports - Added tests for `?secure=true` query param on `tcp` and `http` schemes - Added test verifying `?secure=false` is a no-op Docs: https://clickhouse.com/docs/guides/sre/network-ports Ref: HDX-3490
1 parent 575779d commit 2c306b6

3 files changed

Lines changed: 66 additions & 2 deletions

File tree

‎.changeset/cuddly-points-sneeze.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@hyperdx/otel-collector": patch
3+
---
4+
5+
fix: support tcp with TLS (tcps/tls schemes) and ?secure=true query param in otelcol migrator

‎packages/otel-collector/cmd/migrate/main.go‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,13 @@ func parseEndpoint(endpoint string) (protocol string, host string, port string,
144144
}
145145

146146
switch u.Scheme {
147-
case "tcp":
147+
case "tcp", "clickhouse":
148148
protocol = "native"
149149
port = getOrDefault(u.Port(), "9000")
150+
case "tcps", "tls":
151+
protocol = "native"
152+
port = getOrDefault(u.Port(), "9440")
153+
secure = true
150154
case "http":
151155
protocol = "http"
152156
port = getOrDefault(u.Port(), "8123")
@@ -155,7 +159,12 @@ func parseEndpoint(endpoint string) (protocol string, host string, port string,
155159
port = getOrDefault(u.Port(), "8443")
156160
secure = true
157161
default:
158-
return "", "", "", false, fmt.Errorf("unsupported protocol: %s", u.Scheme)
162+
return "", "", "", false, fmt.Errorf("unsupported protocol scheme: %s (supported: tcp, clickhouse, tcps, tls, http, https)", u.Scheme)
163+
}
164+
165+
// Allow ?secure=true query parameter to override TLS setting
166+
if strings.EqualFold(u.Query().Get("secure"), "true") {
167+
secure = true
159168
}
160169

161170
return protocol, host, port, secure, nil

‎packages/otel-collector/cmd/migrate/main_test.go‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,56 @@ func TestParseEndpoint(t *testing.T) {
190190
input: "https://clickhouse.example.com",
191191
protocol: "http", host: "clickhouse.example.com", port: "8443", secure: true,
192192
},
193+
{
194+
name: "clickhouse scheme with port",
195+
input: "clickhouse://ch.example.com:9000",
196+
protocol: "native", host: "ch.example.com", port: "9000", secure: false,
197+
},
198+
{
199+
name: "clickhouse scheme default port",
200+
input: "clickhouse://ch.example.com",
201+
protocol: "native", host: "ch.example.com", port: "9000", secure: false,
202+
},
203+
{
204+
name: "tcps scheme with port",
205+
input: "tcps://ch.example.com:9440",
206+
protocol: "native", host: "ch.example.com", port: "9440", secure: true,
207+
},
208+
{
209+
name: "tcps scheme default port",
210+
input: "tcps://ch.example.com",
211+
protocol: "native", host: "ch.example.com", port: "9440", secure: true,
212+
},
213+
{
214+
name: "tcps scheme custom port",
215+
input: "tcps://ch.example.com:19440",
216+
protocol: "native", host: "ch.example.com", port: "19440", secure: true,
217+
},
218+
{
219+
name: "tls scheme with port",
220+
input: "tls://ch.example.com:9440",
221+
protocol: "native", host: "ch.example.com", port: "9440", secure: true,
222+
},
223+
{
224+
name: "tls scheme default port",
225+
input: "tls://ch.example.com",
226+
protocol: "native", host: "ch.example.com", port: "9440", secure: true,
227+
},
228+
{
229+
name: "tcp with secure query param",
230+
input: "tcp://hostname:9440?secure=true",
231+
protocol: "native", host: "hostname", port: "9440", secure: true,
232+
},
233+
{
234+
name: "http with secure query param",
235+
input: "http://hostname:8443?secure=true",
236+
protocol: "http", host: "hostname", port: "8443", secure: true,
237+
},
238+
{
239+
name: "secure query param false is no-op",
240+
input: "tcp://hostname:9000?secure=false",
241+
protocol: "native", host: "hostname", port: "9000", secure: false,
242+
},
193243
{
194244
name: "no scheme defaults to tcp",
195245
input: "clickhouse:9000",

0 commit comments

Comments
 (0)