From 4453f4287eae6dcef6235812d4747581d48d63ce Mon Sep 17 00:00:00 2001 From: Harry Pierson Date: Tue, 17 Feb 2026 12:27:47 -0800 Subject: [PATCH 1/2] update how conductor handles domains --- .../dbos/transact/conductor/Conductor.java | 20 ++++++++++++------- .../transact/conductor/ConductorTest.java | 5 +++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java b/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java index 32bb6af4..236ef72c 100644 --- a/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java +++ b/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java @@ -155,21 +155,27 @@ private Conductor(Builder builder) { String appName = dbosExecutor.appName(); Objects.requireNonNull(appName, "App Name must not be null to use Conductor"); - String domain = builder.domain; - if (domain == null) { + var hostname = builder.domain; + if (hostname == null) { String dbosDomain = System.getenv("DBOS_DOMAIN"); if (dbosDomain == null || dbosDomain.trim().isEmpty()) { - domain = "wss://cloud.dbos.dev"; + hostname = "cloud.dbos.dev"; } else { - domain = "wss://" + dbosDomain.trim(); + hostname = dbosDomain.trim(); } - domain += "/conductor/v1alpha1"; } else { // ensure there is no trailing slash - domain = domain.replaceAll("/$", ""); + hostname = hostname.replaceAll("/$", ""); } - this.url = domain + "/websocket/" + appName + "/" + builder.conductorKey; + // Determine protocol based on hostname (use ws for localhost, wss for others) + var protocol = + (hostname.startsWith("localhost:") || hostname.startsWith("127.0.0.1:")) ? "ws" : "wss"; + + this.url = + String.format( + "%s://%s/conductor/v1alpha1/websocket/%s/%s", + protocol, hostname, appName, builder.conductorKey); this.pingPeriodMs = builder.pingPeriodMs; this.pingTimeoutMs = builder.pingTimeoutMs; diff --git a/transact/src/test/java/dev/dbos/transact/conductor/ConductorTest.java b/transact/src/test/java/dev/dbos/transact/conductor/ConductorTest.java index c3273d51..ba374eef 100644 --- a/transact/src/test/java/dev/dbos/transact/conductor/ConductorTest.java +++ b/transact/src/test/java/dev/dbos/transact/conductor/ConductorTest.java @@ -91,7 +91,7 @@ void beforeEach() throws Exception { int port = testServer.getPort(); assertTrue(port != 0, "Invalid Web Socket Server port"); - String domain = String.format("ws://localhost:%d", port); + String domain = String.format("localhost:%d", port); mockDB = mock(SystemDatabase.class); mockExec = mock(DBOSExecutor.class); @@ -126,7 +126,8 @@ public void onOpen(WebSocket conn, ClientHandshake handshake) { try (Conductor conductor = builder.build()) { conductor.start(); assertTrue(listener.latch.await(10, TimeUnit.SECONDS), "latch timed out"); - assertEquals("/websocket/test-app-name/conductor-key", listener.resourceDescriptor); + assertEquals( + "/conductor/v1alpha1/websocket/test-app-name/conductor-key", listener.resourceDescriptor); } } From 8f9599adab18d4b01c357a86ec430de7a89e1a7b Mon Sep 17 00:00:00 2001 From: Harry Pierson Date: Tue, 17 Feb 2026 12:29:16 -0800 Subject: [PATCH 2/2] isLocalHost --- .../main/java/dev/dbos/transact/conductor/Conductor.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java b/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java index 236ef72c..a379bea1 100644 --- a/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java +++ b/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java @@ -169,8 +169,12 @@ private Conductor(Builder builder) { } // Determine protocol based on hostname (use ws for localhost, wss for others) - var protocol = - (hostname.startsWith("localhost:") || hostname.startsWith("127.0.0.1:")) ? "ws" : "wss"; + boolean isLocalHost = + "localhost".equals(hostname) + || hostname.startsWith("localhost:") + || "127.0.0.1".equals(hostname) + || hostname.startsWith("127.0.0.1:"); + var protocol = isLocalHost ? "ws" : "wss"; this.url = String.format(