From d08b27fa9701fecfdb69e1b0d1ac2459efc2129b Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Wed, 25 Feb 2015 16:45:20 +0100 Subject: Update from Google. -- MOE_MIGRATED_REVID=85702957 --- .../build/lib/pkgcache/PackageCacheOptions.java | 142 +++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java (limited to 'src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java') 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 new file mode 100644 index 0000000000..f9d3efcb73 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java @@ -0,0 +1,142 @@ +// Copyright 2014 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.pkgcache; + +import com.google.devtools.build.lib.Constants; +import com.google.devtools.build.lib.packages.ConstantRuleVisibility; +import com.google.devtools.build.lib.packages.RuleVisibility; +import com.google.devtools.build.lib.syntax.CommaSeparatedPackageNameListConverter; +import com.google.devtools.common.options.Converter; +import com.google.devtools.common.options.Converters; +import com.google.devtools.common.options.Option; +import com.google.devtools.common.options.OptionsBase; +import com.google.devtools.common.options.OptionsParsingException; + +import java.util.List; + +/** + * Options for configuring the PackageCache. + */ +public class PackageCacheOptions extends OptionsBase { + /** + * A converter for package path that defaults to {@code Constants.DEFAULT_PACKAGE_PATH} if the + * option is not given. + * + *

Required because you cannot specify a non-constant value in annotation attributes. + */ + public static class PackagePathConverter implements Converter> { + @Override + public List convert(String input) throws OptionsParsingException { + return input.isEmpty() + ? Constants.DEFAULT_PACKAGE_PATH + : new Converters.ColonSeparatedOptionListConverter().convert(input); + } + + @Override + public String getTypeDescription() { + return "a string"; + } + } + + /** + * Converter for the {@code --default_visibility} option. + */ + public static class DefaultVisibilityConverter implements Converter { + @Override + public RuleVisibility convert(String input) throws OptionsParsingException { + if (input.equals("public")) { + return ConstantRuleVisibility.PUBLIC; + } else if (input.equals("private")) { + return ConstantRuleVisibility.PRIVATE; + } else { + throw new OptionsParsingException("Not a valid default visibility: '" + input + + "' (should be 'public' or 'private'"); + } + } + + @Override + public String getTypeDescription() { + return "default visibility"; + } + } + + @Option(name = "package_path", + defaultValue = "", + category = "package loading", + converter = PackagePathConverter.class, + help = "A colon-separated list of where to look for packages. " + + "Elements beginning with '%workspace%' are relative to the enclosing " + + "workspace. If omitted or empty, the default is the output of " + + "'blaze info default-package-path'.") + public List packagePath; + + @Option(name = "show_package_location", + defaultValue = "false", + category = "verbosity", + deprecationWarning = "This flag is no longer supported and will go away soon.", + help = "If enabled, causes Blaze to print the location on the --package_path " + + "from which each package was loaded.") + public boolean showPackageLocation; + + @Option(name = "show_loading_progress", + defaultValue = "true", + category = "verbosity", + help = "If enabled, causes Blaze to print \"Loading package:\" messages.") + public boolean showLoadingProgress; + + @Option(name = "deleted_packages", + defaultValue = "", + category = "package loading", + converter = CommaSeparatedPackageNameListConverter.class, + help = "A comma-separated list of names of packages which the " + + "build system will consider non-existent, even if they are " + + "visible somewhere on the package path." + + "\n" + + "Use this option when deleting a subpackage 'x/y' of an " + + "existing package 'x'. For example, after deleting x/y/BUILD " + + "in your client, the build system may complain if it " + + "encounters a label '//x:y/z' if that is still provided by another " + + "package_path entry. Specifying --deleted_packages x/y avoids this " + + "problem.") + public List deletedPackages; + + @Option(name = "default_visibility", + defaultValue = "private", + category = "undocumented", + converter = DefaultVisibilityConverter.class, + help = "Default visibility for packages that don't set it explicitly ('public' or " + + "'private').") + public RuleVisibility defaultVisibility; + + @Option(name = "min_pkg_count_for_ct_node_eviction", + defaultValue = "3700", + // Why is the default value 3700? As of December 2013, a medium target loads about this many + // packages, uses ~310MB RAM to only load [1] or ~990MB to load and analyze [2,3]. So we + // can likely load and analyze this many packages without worrying about Blaze OOM'ing. + // + // If the total number of unique packages so far [4] is higher than the value of this flag, + // then we evict CT nodes [5] from the Skyframe graph. + // + // [1] blaze -x build --nobuild --noanalyze //medium:target + // [2] blaze -x build --nobuild //medium:target + // [3] according to "blaze info used-heap-size" + // [4] this means the number of unique packages loaded by builds, including the current one, + // since the last CT node eviction [5] + // [5] "CT node eviction" means clearing those nodes from the Skyframe graph that correspond + // to ConfiguredTargets; this is done using SkyframeExecutor.resetConfiguredTargets + category = "undocumented", + help = "Threshold for number of loaded packages before skyframe-m1 cache eviction kicks in") + public int minLoadedPkgCountForCtNodeEviction; +} -- cgit v1.2.3