aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2017-09-14 17:27:52 +0200
committerGravatar Philipp Wollermann <philwo@google.com>2017-09-14 18:48:51 +0200
commit8bdd409f4900d4574667fed83d86b494debef467 (patch)
treec2bf68fc3d986f191d79ccdbac01f5653f2626ec /src/main/java
parentfdc1e2f9fdd3de395ce8655acb26a91b8ab6824e (diff)
Only compute hostname once per server lifetime
NetUtil.getShortHostName can take seconds on mac and on windows (like, 20!), since it performs reverse dns lookup. We already cached hostname for the BazelWorkspaceStatusModule, let's cache it for entire bazel server. Also make sure that users of the method understand it's cached. Fixes #3586. RELNOTES: None. PiperOrigin-RevId: 168691615
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/util/NetUtil.java21
3 files changed, 21 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
index bb77abc020..16f882fd11 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
@@ -282,7 +282,6 @@ public class BazelWorkspaceStatusModule extends BlazeModule {
}
private class BazelStatusActionFactory implements WorkspaceStatusAction.Factory {
- private String hostname;
@Override
public Map<String, String> createDummyWorkspaceStatus() {
@@ -312,11 +311,7 @@ public class BazelWorkspaceStatusModule extends BlazeModule {
* changes during bazel server lifetime, bazel will not see the change.
*/
private String getHostname() {
- if (hostname == null) {
- hostname = NetUtil.findShortHostName();
- }
-
- return hostname;
+ return NetUtil.getCachedShortHostName();
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
index 57d757691d..9aed79b08d 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
@@ -90,7 +90,7 @@ public final class LocalSpawnRunner implements SpawnRunner {
this.execRoot = execRoot;
this.processWrapper = getProcessWrapper(execRoot, localOs).getPathString();
this.localExecutionOptions = Preconditions.checkNotNull(localExecutionOptions);
- this.hostName = NetUtil.findShortHostName();
+ this.hostName = NetUtil.getCachedShortHostName();
this.resourceManager = resourceManager;
this.useProcessWrapper = useProcessWrapper;
this.productName = productName;
diff --git a/src/main/java/com/google/devtools/build/lib/util/NetUtil.java b/src/main/java/com/google/devtools/build/lib/util/NetUtil.java
index f22146a71d..dc2ce8867e 100644
--- a/src/main/java/com/google/devtools/build/lib/util/NetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/util/NetUtil.java
@@ -21,14 +21,31 @@ import java.net.UnknownHostException;
*/
public final class NetUtil {
+ private static String hostname;
+
private NetUtil() {
}
/**
+ * Returns the *cached* short hostname (computed at most once per the lifetime of a server). Can
+ * take seconds to complete when the cache is cold.
+ */
+ public static String getCachedShortHostName() {
+ if (hostname == null) {
+ synchronized (NetUtil.class) {
+ if (hostname == null) {
+ hostname = computeShortHostName();
+ }
+ }
+ }
+ return computeShortHostName();
+ }
+
+ /**
* Returns the short hostname or <code>unknown</code> if the host name could not be determined.
- * Performs reverse DNS lookup and can take seconds to complete!
+ * Performs reverse DNS lookup and can take seconds to complete.
*/
- public static String findShortHostName() {
+ private static String computeShortHostName() {
try {
return InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {