Inject digest hash function directly, instead of behind the back using global state, in BazelFileSystemModule.
PiperOrigin-RevId: 330773261
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BazelFileSystemModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BazelFileSystemModule.java
index 5c4eaff..bc44b50 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BazelFileSystemModule.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BazelFileSystemModule.java
@@ -13,7 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.runtime;
-import com.google.common.base.Preconditions;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import com.google.common.base.Strings;
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
import com.google.devtools.build.lib.server.FailureDetails.Filesystem;
@@ -24,8 +25,6 @@
import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.vfs.DigestHashFunction;
-import com.google.devtools.build.lib.vfs.DigestHashFunction.DefaultAlreadySetException;
-import com.google.devtools.build.lib.vfs.DigestHashFunction.DefaultHashFunctionNotSetException;
import com.google.devtools.build.lib.vfs.DigestHashFunction.DigestFunctionConverter;
import com.google.devtools.build.lib.vfs.JavaIoFileSystem;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -38,69 +37,46 @@
* {@code SHA256} as the default hash function, or else what's specified by {@code
* -Dbazel.DigestFunction}.
*
- * <p>For legacy reasons we can't make the {@link com.google.devtools.build.lib.vfs.FileSystem}
- * class use {@code SHA256} by default.
+ * <p>Because of Blaze/Bazel divergence we can't make the {@link
+ * com.google.devtools.build.lib.vfs.FileSystem} class use {@code SHA256} by default.
*/
public class BazelFileSystemModule extends BlazeModule {
-
- @Override
- public void globalInit(OptionsParsingResult startupOptionsProvider) throws AbruptExitException {
- BlazeServerStartupOptions startupOptions =
- Preconditions.checkNotNull(
- startupOptionsProvider.getOptions(BlazeServerStartupOptions.class));
- DigestHashFunction commandLineHashFunction = startupOptions.digestHashFunction;
- try {
- if (commandLineHashFunction != null) {
- DigestHashFunction.setDefault(commandLineHashFunction);
- } else {
- String value = System.getProperty("bazel.DigestFunction", "SHA256");
- DigestHashFunction jvmPropertyHash;
- try {
- jvmPropertyHash = new DigestFunctionConverter().convert(value);
- } catch (OptionsParsingException e) {
- throw new AbruptExitException(
- DetailedExitCode.of(
- ExitCode.COMMAND_LINE_ERROR,
- FailureDetail.newBuilder()
- .setMessage(Strings.nullToEmpty(e.getMessage()))
- .setFilesystem(
- Filesystem.newBuilder()
- .setCode(Code.DEFAULT_DIGEST_HASH_FUNCTION_INVALID_VALUE))
- .build()),
- e);
- }
- DigestHashFunction.setDefault(jvmPropertyHash);
- }
- } catch (DefaultAlreadySetException e) {
- throw new AbruptExitException(
- DetailedExitCode.of(
- ExitCode.BLAZE_INTERNAL_ERROR,
- FailureDetail.newBuilder()
- .setMessage(Strings.nullToEmpty(e.getMessage()))
- .setFilesystem(
- Filesystem.newBuilder().setCode(Code.DEFAULT_DIGEST_HASH_FUNCTION_CHANGED))
- .build()),
- e);
- }
- }
-
@Override
public ModuleFileSystem getFileSystem(
OptionsParsingResult startupOptions, PathFragment realExecRootBase)
- throws DefaultHashFunctionNotSetException {
- BlazeServerStartupOptions options = startupOptions.getOptions(BlazeServerStartupOptions.class);
- boolean enableSymLinks = options != null && options.enableWindowsSymlinks;
+ throws AbruptExitException {
+ BlazeServerStartupOptions options =
+ checkNotNull(startupOptions.getOptions(BlazeServerStartupOptions.class));
+ DigestHashFunction digestHashFunction = options.digestHashFunction;
+ if (digestHashFunction == null) {
+ String value = System.getProperty("bazel.DigestFunction", "SHA256");
+ try {
+ digestHashFunction = new DigestFunctionConverter().convert(value);
+ } catch (OptionsParsingException e) {
+ throw new AbruptExitException(
+ DetailedExitCode.of(
+ ExitCode.COMMAND_LINE_ERROR,
+ FailureDetail.newBuilder()
+ .setMessage(Strings.nullToEmpty(e.getMessage()))
+ .setFilesystem(
+ Filesystem.newBuilder()
+ .setCode(Code.DEFAULT_DIGEST_HASH_FUNCTION_INVALID_VALUE))
+ .build()),
+ e);
+ }
+ }
+ boolean enableSymLinks = options.enableWindowsSymlinks;
if ("0".equals(System.getProperty("io.bazel.EnableJni"))) {
// Ignore UnixFileSystem, to be used for bootstrapping.
return ModuleFileSystem.create(
OS.getCurrent() == OS.WINDOWS
- ? new WindowsFileSystem(enableSymLinks)
- : new JavaIoFileSystem());
+ ? new WindowsFileSystem(digestHashFunction, enableSymLinks)
+ : new JavaIoFileSystem(digestHashFunction));
}
// The JNI-based UnixFileSystem is faster, but on Windows it is not available.
return ModuleFileSystem.create(
OS.getCurrent() == OS.WINDOWS
- ? new WindowsFileSystem(enableSymLinks)
- : new UnixFileSystem());
+ ? new WindowsFileSystem(digestHashFunction, enableSymLinks)
+ : new UnixFileSystem(digestHashFunction));
}
}