diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java | 225 |
1 files changed, 225 insertions, 0 deletions
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 new file mode 100644 index 0000000000..1f9bcea008 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeServerStartupOptions.java @@ -0,0 +1,225 @@ +// 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.runtime; + +import com.google.common.collect.ImmutableMap; +import com.google.devtools.build.lib.util.OptionsUtils; +import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.devtools.common.options.Converter; +import com.google.devtools.common.options.Option; +import com.google.devtools.common.options.OptionsBase; + +import java.util.Map; + +/** + * Options that will be evaluated by the blaze client startup code and passed + * to the blaze server upon startup. + * + * <h4>IMPORTANT</h4> These options and their defaults must be kept in sync with those in the + * source of the launcher. The latter define the actual default values; this class exists only to + * provide the help message, which displays the default values. + * + * The same relationship holds between {@link HostJvmStartupOptions} and the launcher. + */ +public class BlazeServerStartupOptions extends OptionsBase { + /** + * Converter for the <code>option_sources</code> option. Takes a string in the form of + * "option_name1:source1:option_name2:source2:.." and converts it into an option name to + * source map. + */ + public static class OptionSourcesConverter implements Converter<Map<String, String>> { + private String unescape(String input) { + return input.replace("_C", ":").replace("_U", "_"); + } + + @Override + public Map<String, String> convert(String input) { + ImmutableMap.Builder<String, String> builder = ImmutableMap.builder(); + if (input.isEmpty()) { + return builder.build(); + } + + String[] elements = input.split(":"); + for (int i = 0; i < (elements.length + 1) / 2; i++) { + String name = elements[i * 2]; + String value = ""; + if (elements.length > i * 2 + 1) { + value = elements[i * 2 + 1]; + } + builder.put(unescape(name), unescape(value)); + } + return builder.build(); + } + + @Override + public String getTypeDescription() { + return "a list of option-source pairs"; + } + } + + /* Passed from the client to the server, specifies the installation + * location. The location should be of the form: + * $OUTPUT_BASE/_blaze_${USER}/install/${MD5_OF_INSTALL_MANIFEST}. + * The server code will only accept a non-empty path; it's the + * responsibility of the client to compute a proper default if + * necessary. + */ + @Option(name = "install_base", + defaultValue = "", // NOTE: purely decorative! See class docstring. + category = "hidden", + converter = OptionsUtils.PathFragmentConverter.class, + help = "This launcher option is intended for use only by tests.") + public PathFragment installBase; + + /* Note: The help string in this option applies to the client code; not + * the server code. The server code will only accept a non-empty path; it's + * the responsibility of the client to compute a proper default if + * necessary. + */ + @Option(name = "output_base", + defaultValue = "null", // NOTE: purely decorative! See class docstring. + category = "server startup", + converter = OptionsUtils.PathFragmentConverter.class, + help = "If set, specifies the output location to which all build output will be written. " + + "Otherwise, the location will be " + + "${OUTPUT_ROOT}/_blaze_${USER}/${MD5_OF_WORKSPACE_ROOT}. Note: If you specify a " + + "different option from one to the next Blaze invocation for this value, you'll likely " + + "start up a new, additional Blaze server. Blaze starts exactly one server per " + + "specified output base. Typically there is one output base per workspace--however, " + + "with this option you may have multiple output bases per workspace and thereby run " + + "multiple builds for the same client on the same machine concurrently. See " + + "'blaze help shutdown' on how to shutdown a Blaze server.") + 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. + category = "server startup", + converter = OptionsUtils.PathFragmentConverter.class, + help = "The user-specific directory beneath which all build outputs are written; " + + "by default, this is a function of $USER, but by specifying a constant, build outputs " + + "can be shared between collaborating users.") + public PathFragment outputUserRoot; + + @Option(name = "workspace_directory", + defaultValue = "", + category = "hidden", + converter = OptionsUtils.PathFragmentConverter.class, + help = "The root of the workspace, that is, the directory that Blaze uses as the root of the " + + "build. This flag is only to be set by the blaze client.") + public PathFragment workspaceDirectory; + + @Option(name = "max_idle_secs", + defaultValue = "" + (3 * 3600), // NOTE: purely decorative! See class docstring. + category = "server startup", + help = "The number of seconds the build server will wait idling " + + "before shutting down. Note: Blaze will ignore this option " + + "unless you are starting a new instance. See also 'blaze help " + + "shutdown'.") + public int maxIdleSeconds; + + @Option(name = "batch", + defaultValue = "false", // NOTE: purely decorative! See class docstring. + category = "server startup", + help = "If set, Blaze will be run in batch mode, instead of " + + "the standard client/server. Doing so may provide " + + "more predictable semantics with respect to signal handling and job control, " + + "Batch mode retains proper queueing semantics within the same output_base. " + + "That is, simultaneous invocations will be processed in order, without overlap. " + + "If a batch mode Blaze is run on a client with a running server, it first kills " + + "the server before processing the command." + + "Blaze will run slower in batch mode, compared to client/server mode. " + + "Among other things, the build file cache is memory-resident, so it is not " + + "preserved between sequential batch invocations. Therefore, using batch mode " + + "often makes more sense in cases where performance is less critical, " + + "such as continuous builds.") + public boolean batch; + + @Option(name = "block_for_lock", + defaultValue = "true", // NOTE: purely decorative! See class docstring. + category = "server startup", + help = "If set, Blaze will exit immediately instead of waiting for other " + + "Blaze commands holding the server lock to complete.") + public boolean noblock_for_lock; + + @Option(name = "io_nice_level", + defaultValue = "-1", // NOTE: purely decorative! + category = "server startup", + help = "Set a level from 0-7 for best-effort IO scheduling. 0 is highest priority, " + + "7 is lowest. The anticipatory scheduler may only honor up to priority 4. " + + "Negative values are ignored.") + public int ioNiceLevel; + + @Option(name = "batch_cpu_scheduling", + defaultValue = "false", // NOTE: purely decorative! + category = "server startup", + help = "Use 'batch' CPU scheduling for Blaze. This policy is useful for workloads that " + + "are non-interactive, but do not want to lower their nice value. " + + "See 'man 2 sched_setscheduler'.") + public boolean batchCpuScheduling; + + @Option(name = "blazerc", + // NOTE: purely decorative! + defaultValue = "In the current directory, then in the user's home directory, the file named " + + ".$(basename $0)rc (i.e. .bazelrc for Bazel or .blazerc for Blaze)", + category = "misc", + help = "The location of the .bazelrc/.blazerc file containing default values of " + + "Blaze command options. Use /dev/null to disable the search for a " + + "blazerc file, e.g. in release builds.") + public String blazerc; + + @Option(name = "master_blazerc", + defaultValue = "true", // NOTE: purely decorative! + category = "misc", + help = "If this option is false, the master blazerc/bazelrc next to the binary " + + "is not read.") + public boolean masterBlazerc; + + @Option(name = "skyframe", + defaultValue = "full", + category = "undocumented", + help = "Unused.") + public String unusedSkyframe; + + @Option(name = "fatal_event_bus_exceptions", + defaultValue = "false", // NOTE: purely decorative! + category = "undocumented", + help = "Whether or not to allow EventBus exceptions to be fatal. Experimental.") + public boolean fatalEventBusExceptions; + + @Option(name = "option_sources", + converter = OptionSourcesConverter.class, + defaultValue = "", + category = "hidden", + help = "") + public Map<String, String> optionSources; + + // TODO(bazel-team): In order to make it easier to have local watchers in open source Bazel, + // turn this into a non-startup option. + @Option(name = "watchfs", + defaultValue = "false", + category = "undocumented", + help = "If true, Blaze tries to use the operating system's file watch service for local " + + "changes instead of scanning every file for a change.") + public boolean watchFS; + + @Option(name = "use_webstatusserver", + defaultValue = "0", + category = "server startup", + help = "Specifies port to run web status server on (0 to disable, which is default).") + public int useWebStatusServer; +} |