// Copyright 2014 The Bazel Authors. 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.exec; import com.google.common.base.Preconditions; import com.google.common.eventbus.EventBus; import com.google.devtools.build.lib.actions.ActionContext; import com.google.devtools.build.lib.actions.ActionExecutionContext.ShowSubcommands; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.actions.ExecutorInitException; import com.google.devtools.build.lib.clock.Clock; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.events.Reporter; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.common.options.OptionsClassProvider; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; /** * The Executor class provides a dynamic abstraction of the various actual primitive system * operations that might be performed during a build step. * *
Constructions of this class might perform distributed execution, "virtual" execution for
* testing purposes, or just print out the sequence of commands that would be executed, like Make's
* "-n" option.
*/
@ThreadSafe
public final class BlazeExecutor implements Executor {
private final boolean verboseFailures;
private final ShowSubcommands showSubcommands;
private final FileSystem fileSystem;
private final Path execRoot;
private final Reporter reporter;
private final EventBus eventBus;
private final Clock clock;
private final OptionsClassProvider options;
private AtomicBoolean inExecutionPhase;
private final Map Don't forget to call startBuildRequest() and stopBuildRequest() for each request, and
* shutdown() when you're done with this executor.
*/
public BlazeExecutor(
FileSystem fileSystem,
Path execRoot,
Reporter reporter,
EventBus eventBus,
Clock clock,
OptionsClassProvider options,
SpawnActionContextMaps spawnActionContextMaps,
Iterable