aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2018-02-27 05:47:21 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-27 05:48:54 -0800
commitc2499c406d0727853ea0ddc5372a50be95de5515 (patch)
tree16a06cfd31ae66c6a32155071b8dfc3d8a8b090d /src/main
parent4c763e8ff61884952953b7bca8793796f282cdc0 (diff)
Expose --output_user_base to the Bazel server process
...so that it can use that path to compute other directories in the output user base, in particular the default location for caches. The first cache we will add is the hash-index cache for downloads of external archives, but a spawn cache might be added later in the output user base as well. Change-Id: I24b1c33235c8f76ec008ecb1789163de2b2a45be PiperOrigin-RevId: 187164275
Diffstat (limited to 'src/main')
-rw-r--r--src/main/cpp/blaze.cc2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java32
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java3
5 files changed, 35 insertions, 19 deletions
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index 7035472d94..0b6ec47b9e 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -494,6 +494,8 @@ static vector<string> GetArgumentArray(
result.push_back("--connect_timeout_secs=" +
ToString(globals->options->connect_timeout_secs));
+ result.push_back("--output_user_root=" +
+ blaze::ConvertPath(globals->options->output_user_root));
result.push_back("--install_base=" +
blaze::ConvertPath(globals->options->install_base));
result.push_back("--install_md5=" + globals->install_md5);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
index 0e34cf3067..9b25f7a997 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ServerDirectories.java
@@ -26,17 +26,16 @@ import java.util.Objects;
import javax.annotation.Nullable;
/**
- * Represents the server install directory, which contains the Bazel installation and embedded
- * binaries.
- *
- * <p>The <code>installBase</code> is the directory where the Blaze binary has been installed. The
- * <code>outputBase</code> is the directory below which Blaze puts all its state.
+ * Represents the relevant directories for the server: the location of the embedded binaries
+ * and the output directories.
*/
@AutoCodec
@Immutable
public final class ServerDirectories {
public static final ObjectCodec<ServerDirectories> CODEC = new ServerDirectories_AutoCodec();
+ /** Top-level user output directory; used, e.g., as default location for caches. */
+ private final Path outputUserRoot;
/** Where Blaze gets unpacked. */
private final Path installBase;
/** The content hash of everything in installBase. */
@@ -44,22 +43,25 @@ public final class ServerDirectories {
/** The root of the temp and output trees. */
private final Path outputBase;
- public ServerDirectories(Path installBase, Path outputBase, @Nullable String installMD5) {
+ public ServerDirectories(
+ Path installBase, Path outputBase, Path outputUserRoot, @Nullable String installMD5) {
this(
installBase,
outputBase,
+ outputUserRoot,
Strings.isNullOrEmpty(installMD5) ? null : checkMD5(HashCode.fromString(installMD5)));
}
@AutoCodec.Instantiator
- ServerDirectories(Path installBase, Path outputBase, HashCode installMD5) {
+ ServerDirectories(Path installBase, Path outputBase, Path outputUserRoot, HashCode installMD5) {
+ this.outputUserRoot = outputUserRoot;
this.installBase = installBase;
this.outputBase = outputBase;
this.installMD5 = installMD5;
}
- public ServerDirectories(Path installBase, Path outputBase) {
- this(installBase, outputBase, (HashCode) null);
+ public ServerDirectories(Path installBase, Path outputBase, Path outputUserRoot) {
+ this(installBase, outputBase, outputUserRoot, (HashCode) null);
}
private static HashCode checkMD5(HashCode hash) {
@@ -81,6 +83,13 @@ public final class ServerDirectories {
return outputBase;
}
+ /**
+ * Returns the root directory for user output. In particular default caches will be located here.
+ */
+ public Path getOutputUserRoot() {
+ return outputUserRoot;
+ }
+
/** Returns the installed embedded binaries directory, under the shared installBase location. */
public Path getEmbeddedBinariesRoot() {
return installBase.getChild("_embedded_binaries");
@@ -96,7 +105,7 @@ public final class ServerDirectories {
@Override
public int hashCode() {
- return Objects.hash(installBase, installMD5, outputBase);
+ return Objects.hash(installBase, installMD5, outputBase, outputUserRoot);
}
@Override
@@ -110,6 +119,7 @@ public final class ServerDirectories {
ServerDirectories that = (ServerDirectories) obj;
return this.installBase.equals(that.installBase)
&& Objects.equals(this.installMD5, that.installMD5)
- && this.outputBase.equals(that.outputBase);
+ && this.outputBase.equals(that.outputBase)
+ && this.outputUserRoot.equals(that.outputUserRoot);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
index a27b9b6078..df1692fdd5 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java
@@ -977,17 +977,22 @@ public final class BlazeRuntime {
String productName = startupOptions.productName.toLowerCase(Locale.US);
PathFragment workspaceDirectory = startupOptions.workspaceDirectory;
+ PathFragment outputUserRoot = startupOptions.outputUserRoot;
PathFragment installBase = startupOptions.installBase;
PathFragment outputBase = startupOptions.outputBase;
maybeForceJNIByGettingPid(installBase); // Must be before first use of JNI.
- // From the point of view of the Java program --install_base and --output_base
- // are mandatory options, despite the comment in their declarations.
+ // From the point of view of the Java program --install_base, --output_base, and
+ // --output_user_root are mandatory options, despite the comment in their declarations.
if (installBase == null || !installBase.isAbsolute()) { // (includes "" default case)
throw new IllegalArgumentException(
"Bad --install_base option specified: '" + installBase + "'");
}
+ if (outputUserRoot != null && !outputUserRoot.isAbsolute()) { // (includes "" default case)
+ throw new IllegalArgumentException(
+ "Bad --output_user_root option specified: '" + outputUserRoot + "'");
+ }
if (outputBase != null && !outputBase.isAbsolute()) { // (includes "" default case)
throw new IllegalArgumentException(
"Bad --output_base option specified: '" + outputBase + "'");
@@ -1009,6 +1014,7 @@ public final class BlazeRuntime {
Path.setFileSystemForSerialization(fs);
SubprocessBuilder.setSubprocessFactory(subprocessFactoryImplementation());
+ Path outputUserRootPath = fs.getPath(outputUserRoot);
Path installBasePath = fs.getPath(installBase);
Path outputBasePath = fs.getPath(outputBase);
Path workspaceDirectoryPath = null;
@@ -1017,7 +1023,8 @@ public final class BlazeRuntime {
}
ServerDirectories serverDirectories =
- new ServerDirectories(installBasePath, outputBasePath, startupOptions.installMD5);
+ new ServerDirectories(
+ installBasePath, outputBasePath, outputUserRootPath, startupOptions.installMD5);
Clock clock = BlazeClock.instance();
BlazeRuntime.Builder runtimeBuilder =
new BlazeRuntime.Builder()
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
index 8cccbacbfe..e8eafbc667 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java
@@ -128,10 +128,6 @@ public class BlazeServerStartupOptions extends OptionsBase {
)
public PathFragment outputBase;
- /* Note: This option is only used by the C++ client, never by the Java server.
- * It is included here to make sure that the option is documented in the help
- * output, which is auto-generated by Java code.
- */
@Option(
name = "output_user_root",
defaultValue = "null", // NOTE: purely decorative! See class docstring.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index 850687dcc1..5613c87ab1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -143,7 +143,8 @@ public abstract class AbstractPackageLoader implements PackageLoader {
// TODO(nharmata): Refactor WorkspaceFileFunction to make this a non-issue.
Path devNull = workspaceDir.getFileSystem().getPath("/dev/null");
directories =
- new BlazeDirectories(new ServerDirectories(devNull, devNull), workspaceDir, "blaze");
+ new BlazeDirectories(
+ new ServerDirectories(devNull, devNull, devNull), workspaceDir, "blaze");
}
public Builder setRuleClassProvider(RuleClassProvider ruleClassProvider) {