Use the ResourcesConverter for --legacy_globbing_threads.
This allows specifying this value relative to HOST_CPUS and also as an
"auto" value that uses the number of CPUs.
RELNOTES: None.
PiperOrigin-RevId: 303812017
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD b/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
index 19e1905..eefadb6 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/BUILD
@@ -17,6 +17,8 @@
srcs = glob(["*.java"]),
deps = [
"//src/main/java/com/google/devtools/build/lib:events",
+ "//src/main/java/com/google/devtools/build/lib:resource-converter",
+ "//src/main/java/com/google/devtools/build/lib/actions:localhost_capacity",
"//src/main/java/com/google/devtools/build/lib/buildeventstream",
"//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto",
"//src/main/java/com/google/devtools/build/lib/cmdline",
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
index a078933..2f86dc0 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
@@ -19,10 +19,12 @@
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.actions.LocalHostCapacity;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
import com.google.devtools.build.lib.packages.RuleVisibility;
+import com.google.devtools.build.lib.util.ResourceConverter;
import com.google.devtools.common.options.Converter;
import com.google.devtools.common.options.Converters;
import com.google.devtools.common.options.Option;
@@ -59,6 +61,17 @@
}
}
+ /** Converter for globbing threads. */
+ public static class ParallelismConverter extends ResourceConverter {
+ public ParallelismConverter() throws OptionsParsingException {
+ super(
+ /* autoSupplier= */ () ->
+ (int) Math.ceil(LocalHostCapacity.getLocalHostCapacity().getCpuUsage()),
+ /* minValue= */ 1,
+ /* maxValue= */ Integer.MAX_VALUE);
+ }
+ }
+
@Option(
name = "package_path",
defaultValue = "%workspace%",
@@ -111,12 +124,16 @@
public RuleVisibility defaultVisibility;
@Option(
- name = "legacy_globbing_threads",
- defaultValue = "100",
- documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
- effectTags = {OptionEffectTag.UNKNOWN},
- help = "Number of threads to use for glob evaluation."
- )
+ name = "legacy_globbing_threads",
+ defaultValue = "100",
+ converter = ParallelismConverter.class,
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ help =
+ "Number of threads to use for glob evaluation. Takes "
+ + ResourceConverter.FLAG_SYNTAX
+ + ". \"auto\" means to use a reasonable value derived from the machine's hardware"
+ + " profile (e.g. the number of processors).")
public int globbingThreads;
@Option(
diff --git a/src/test/shell/integration/execution_phase_tests.sh b/src/test/shell/integration/execution_phase_tests.sh
index 279d327..f787067 100755
--- a/src/test/shell/integration/execution_phase_tests.sh
+++ b/src/test/shell/integration/execution_phase_tests.sh
@@ -376,6 +376,7 @@
bazel build --nobuild \
--experimental_sandbox_async_tree_delete_idle_threads="${threads}" \
--jobs="${threads}" \
+ --legacy_globbing_threads="${threads}" \
--loading_phase_threads="${threads}" \
--local_cpu_resources="${threads}" \
--local_ram_resources="${ram}" \