diff options
author | 2016-08-16 20:48:20 +0000 | |
---|---|---|
committer | 2016-08-17 11:26:43 +0000 | |
commit | 525b6d8d4627e20efc9bd8e152dcfec1c3eee7d5 (patch) | |
tree | bf24c3d4916acc59db9d31c04253dbfe231caaf5 /src/main/java/com/google/devtools/build | |
parent | d1910c35673123654b251af478320cf05a96d9e0 (diff) |
Fix slow hostname lookup
InetAddress.getLocalHost().getHostName() can take seconds to complete as it
performs reverse DNS lookup. Prior to this cl hostname lookup was performed on
every build, noticeably slowing down null builds especially. This cl caches
computed hostname so null builds are faster for the lifetime of the server.
--
Reviewed-on: https://bazel-review.googlesource.com/#/c/5432/
MOS_MIGRATED_REVID=130441617
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java | 27 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/util/NetUtil.java | 4 |
2 files changed, 25 insertions, 6 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 894a27c1d4..e4972e00b4 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 @@ -52,7 +52,6 @@ import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.common.options.OptionsBase; - import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Map; @@ -80,7 +79,8 @@ public class BazelWorkspaceStatusModule extends BlazeModule { Map<String, String> clientEnv, Path workspace, Artifact stableStatus, - Artifact volatileStatus) { + Artifact volatileStatus, + String hostname) { super( ActionOwner.SYSTEM_ACTION_OWNER, Artifact.NO_ARTIFACTS, @@ -89,7 +89,7 @@ public class BazelWorkspaceStatusModule extends BlazeModule { this.stableStatus = stableStatus; this.volatileStatus = volatileStatus; this.username = USER_NAME.value(); - this.hostname = NetUtil.findShortHostName(); + this.hostname = hostname; this.getWorkspaceStatusCommand = options.workspaceStatusCommand.equals(PathFragment.EMPTY_FRAGMENT) ? null @@ -210,6 +210,9 @@ public class BazelWorkspaceStatusModule extends BlazeModule { } private class BazelStatusActionFactory implements WorkspaceStatusAction.Factory { + + private String hostname; + @Override public Map<String, String> createDummyWorkspaceStatus() { return ImmutableMap.of(); @@ -226,12 +229,28 @@ public class BazelWorkspaceStatusModule extends BlazeModule { new PathFragment("volatile-status.txt"), root, artifactOwner); return new BazelWorkspaceStatusAction(options, env.getClientEnv(), - env.getDirectories().getWorkspace(), stableArtifact, volatileArtifact); + env.getDirectories().getWorkspace(), stableArtifact, volatileArtifact, getHostname()); + } + + /** + * Returns cached short hostname. + * + * <p>Hostname lookup performs reverse DNS lookup which in bad cases can take seconds. To + * speedup builds we only lookup hostname once and cache the result. Therefore if hostname + * changes during bazel server lifetime, bazel will not see the change. + */ + private String getHostname() { + if (hostname == null) { + hostname = NetUtil.findShortHostName(); + } + + return hostname; } } @ExecutionStrategy(contextType = WorkspaceStatusAction.Context.class) private class BazelWorkspaceStatusActionContext implements WorkspaceStatusAction.Context { + @Override public ImmutableMap<String, Key> getStableKeys() { return ImmutableMap.of( 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 564ff6d1fa..f22146a71d 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 @@ -25,8 +25,8 @@ public final class NetUtil { } /** - * Returns the short hostname or <code>unknown</code> if the host name could - * not be determined. + * 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! */ public static String findShortHostName() { try { |