From b8d5fc816bf4f70d6d2622df4a152d7a6b4e383c Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Thu, 28 Oct 2021 16:31:09 -0400 Subject: [PATCH 1/3] fix: align ip version preference for the wrapped emulator When the emulator wrapper is started with -Djava.net.preferIPv6Addresses=true on a machine that defaults to ipv4, the golang emulator and the java client will pick different ip stacks and not be able to connect. This change will use java to resolve the localhost's ip address and push it down to the golang emulator --- .../cloud/bigtable/emulator/v2/Emulator.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java b/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java index 3cfbc981a..8899d595d 100644 --- a/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java +++ b/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java @@ -25,10 +25,13 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; +import java.net.UnknownHostException; import java.nio.file.Path; import java.util.Locale; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.logging.Level; @@ -98,10 +101,24 @@ public synchronized void start() throws IOException, TimeoutException, Interrupt } this.port = getAvailablePort(); + // Try to align the localhost address across java & golang emulator + // This should fix issues on systems that default to ipv4 but the jvm is started with + // -Djava.net.preferIPv6Addresses=true + Optional localhostAddress = Optional.empty(); + try { + localhostAddress = Optional.of(InetAddress.getByName(null).getHostAddress()); + } catch (UnknownHostException e) { + } + // Workaround https://bugs.openjdk.java.net/browse/JDK-8068370 for (int attemptsLeft = 3; process == null; attemptsLeft--) { try { - process = Runtime.getRuntime().exec(String.format("%s -port %d", executable, port)); + String cmd = executable.toString(); + if (localhostAddress.isPresent()) { + cmd += String.format(" -host [%s]", localhostAddress.get()); + } + cmd += String.format(" -port %d", port); + process = Runtime.getRuntime().exec(cmd); } catch (IOException e) { if (attemptsLeft > 0) { Thread.sleep(1000); @@ -242,6 +259,13 @@ private static String getBundledResourcePath() { /** Gets a random open port number. */ private static int getAvailablePort() { + try { + InetAddress moo = InetAddress.getByName(null); + System.out.println(moo); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + try (ServerSocket serverSocket = new ServerSocket(0)) { return serverSocket.getLocalPort(); } catch (IOException e) { From d12eab6d6fad898e9bf548359ab6ab30e6e7fd4d Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Thu, 28 Oct 2021 17:20:27 -0400 Subject: [PATCH 2/3] remove debug --- .../com/google/cloud/bigtable/emulator/v2/Emulator.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java b/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java index 8899d595d..6a1198d85 100644 --- a/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java +++ b/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java @@ -259,13 +259,6 @@ private static String getBundledResourcePath() { /** Gets a random open port number. */ private static int getAvailablePort() { - try { - InetAddress moo = InetAddress.getByName(null); - System.out.println(moo); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - try (ServerSocket serverSocket = new ServerSocket(0)) { return serverSocket.getLocalPort(); } catch (IOException e) { From 31c0d7d21eb59adb44b0ba3c62c330e45c4cfbcd Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Tue, 4 Jan 2022 14:17:29 -0500 Subject: [PATCH 3/3] whitespace --- .../java/com/google/cloud/bigtable/emulator/v2/Emulator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java b/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java index c7b96e496..b43322831 100644 --- a/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java +++ b/google-cloud-bigtable-emulator/src/main/java/com/google/cloud/bigtable/emulator/v2/Emulator.java @@ -101,8 +101,8 @@ public synchronized void start() throws IOException, TimeoutException, Interrupt } this.port = getAvailablePort(); - // Try to align the localhost address across java & golang emulator - // This should fix issues on systems that default to ipv4 but the jvm is started with + // Try to align the localhost address across java & golang emulator + // This should fix issues on systems that default to ipv4 but the jvm is started with // -Djava.net.preferIPv6Addresses=true Optional localhostAddress = Optional.empty(); try {