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 78cf28ee..530ee0bd 100644 --- a/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java +++ b/transact/src/main/java/dev/dbos/transact/conductor/Conductor.java @@ -63,6 +63,20 @@ public class Conductor implements AutoCloseable { private static final Logger logger = LoggerFactory.getLogger(Conductor.class); + private static final String hostname = resolveHostname(); + + private static String resolveHostname() { + try { + return InetAddress.getLocalHost().getHostName(); + } catch (Exception e) { + return fallbackHostname(System.getenv("HOSTNAME")); + } + } + + static String fallbackHostname(String envHostname) { + return envHostname != null ? envHostname : ""; + } + private final String url; private final SystemDatabase systemDatabase; private final DBOSExecutor dbosExecutor; @@ -741,7 +755,6 @@ static CompletableFuture handleExecutorInfo( return CompletableFuture.supplyAsync( () -> { try { - String hostname = InetAddress.getLocalHost().getHostName(); return new ExecutorInfoResponse( message, conductor.dbosExecutor.executorId(), 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 7ad0cabf..a99629fb 100644 --- a/transact/src/test/java/dev/dbos/transact/conductor/ConductorTest.java +++ b/transact/src/test/java/dev/dbos/transact/conductor/ConductorTest.java @@ -72,6 +72,7 @@ import org.java_websocket.handshake.ClientHandshake; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.junitpioneer.jupiter.RetryingTest; import org.mockito.ArgumentCaptor; import org.mockito.Captor; @@ -526,6 +527,16 @@ public void canExecutorInfo() throws Exception { } } + @Test + public void fallbackHostnameUsesEnvWhenSet() { + assertEquals("env-host", Conductor.fallbackHostname("env-host")); + } + + @Test + public void fallbackHostnameUsesUnknownWhenNull() { + assertEquals("", Conductor.fallbackHostname(null)); + } + @RetryingTest(3) public void canExecutorInfoWithMetadata() throws Exception { MessageListener listener = new MessageListener();