diff options
Diffstat (limited to 'src/main/java/com/google')
13 files changed, 244 insertions, 28 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelMain.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelMain.java index 318e6ac7b6..958c7ea3c3 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelMain.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelMain.java @@ -36,6 +36,7 @@ public final class BazelMain { com.google.devtools.build.lib.bazel.BazelDiffAwarenessModule.class, com.google.devtools.build.lib.bazel.BazelRepositoryModule.class, com.google.devtools.build.lib.bazel.rules.BazelRulesModule.class, + com.google.devtools.build.lib.sandbox.SandboxModule.class, com.google.devtools.build.lib.standalone.StandaloneModule.class, com.google.devtools.build.lib.runtime.BuildSummaryStatsModule.class, com.google.devtools.build.lib.webstatusserver.WebStatusServerModule.class, diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/BUILD b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD new file mode 100644 index 0000000000..9b549e949c --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/sandbox/BUILD @@ -0,0 +1,27 @@ +package( + default_visibility = [ + "//src:__subpackages__", + ], +) + +java_library( + name = "sandbox", + srcs = glob(["*.java"]), + deps = [ + "//src/main/java:actions", + "//src/main/java:analysis-exec-rules-skyframe", + "//src/main/java:buildtool-runtime", + "//src/main/java:common", + "//src/main/java:packages", + "//src/main/java:shell", + "//src/main/java:unix", + "//src/main/java:vfs", + "//third_party:guava", + ], +) + +filegroup( + name = "srcs", + srcs = glob(["**"]), + visibility = ["//src/main/java:__pkg__"], +) diff --git a/src/main/java/com/google/devtools/build/lib/standalone/LinuxSandboxedStrategy.java b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java index 81c56929e8..4f7557cb7e 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/LinuxSandboxedStrategy.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/LinuxSandboxedStrategy.java @@ -11,7 +11,7 @@ // 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.standalone; +package com.google.devtools.build.lib.sandbox; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.ActionExecutionContext; diff --git a/src/main/java/com/google/devtools/build/lib/standalone/NamespaceSandboxRunner.java b/src/main/java/com/google/devtools/build/lib/sandbox/NamespaceSandboxRunner.java index 523fb7e947..7720b787c6 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/NamespaceSandboxRunner.java +++ b/src/main/java/com/google/devtools/build/lib/sandbox/NamespaceSandboxRunner.java @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.devtools.build.lib.standalone; +package com.google.devtools.build.lib.sandbox; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextConsumer.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextConsumer.java new file mode 100644 index 0000000000..657fb8f73d --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextConsumer.java @@ -0,0 +1,47 @@ +// Copyright 2015 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.sandbox; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import com.google.devtools.build.lib.actions.ActionContextConsumer; +import com.google.devtools.build.lib.actions.Executor.ActionContext; +import com.google.devtools.build.lib.actions.SpawnActionContext; +import com.google.devtools.build.lib.util.OS; + +import java.util.Map; + +/** + * {@link ActionContextConsumer} that requests the action contexts necessary for sandboxed + * execution. + */ +public class SandboxActionContextConsumer implements ActionContextConsumer { + + @Override + public Map<String, String> getSpawnActionContexts() { + return ImmutableMap.of(); + } + + @Override + public Map<Class<? extends ActionContext>, String> getActionContexts() { + Builder<Class<? extends ActionContext>, String> contexts = ImmutableMap.builder(); + + if (OS.getCurrent() == OS.LINUX) { + contexts.put(SpawnActionContext.class, "sandboxed"); + } + + return contexts.build(); + } + +} diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java new file mode 100644 index 0000000000..69b13af624 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxActionContextProvider.java @@ -0,0 +1,49 @@ +// Copyright 2015 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.sandbox; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; +import com.google.devtools.build.lib.actions.ActionContextProvider; +import com.google.devtools.build.lib.actions.Executor.ActionContext; +import com.google.devtools.build.lib.buildtool.BuildRequest; +import com.google.devtools.build.lib.exec.ExecutionOptions; +import com.google.devtools.build.lib.runtime.BlazeRuntime; +import com.google.devtools.build.lib.util.OS; + +/** + * Provides the sandboxed spawn strategy. + */ +public class SandboxActionContextProvider extends ActionContextProvider { + + @SuppressWarnings("unchecked") + private final ImmutableList<ActionContext> strategies; + + public SandboxActionContextProvider(BlazeRuntime runtime, BuildRequest buildRequest) { + boolean verboseFailures = buildRequest.getOptions(ExecutionOptions.class).verboseFailures; + Builder<ActionContext> strategies = ImmutableList.builder(); + + if (OS.getCurrent() == OS.LINUX) { + strategies.add(new LinuxSandboxedStrategy(runtime.getDirectories(), verboseFailures)); + } + + this.strategies = strategies.build(); + } + + @Override + public Iterable<ActionContext> getActionContexts() { + return strategies; + } + +} diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java new file mode 100644 index 0000000000..65d0c15379 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java @@ -0,0 +1,54 @@ +// Copyright 2015 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.sandbox; + +import com.google.common.collect.ImmutableList; +import com.google.common.eventbus.Subscribe; +import com.google.devtools.build.lib.actions.ActionContextConsumer; +import com.google.devtools.build.lib.actions.ActionContextProvider; +import com.google.devtools.build.lib.buildtool.BuildRequest; +import com.google.devtools.build.lib.buildtool.buildevent.BuildStartingEvent; +import com.google.devtools.build.lib.runtime.BlazeModule; +import com.google.devtools.build.lib.runtime.BlazeRuntime; +import com.google.devtools.build.lib.runtime.Command; + +/** + * This module provides the Sandbox spawn strategy. + */ +public class SandboxModule extends BlazeModule { + private BuildRequest buildRequest; + private BlazeRuntime runtime; + + @Override + public Iterable<ActionContextProvider> getActionContextProviders() { + return ImmutableList.<ActionContextProvider>of( + new SandboxActionContextProvider(runtime, buildRequest)); + } + + @Override + public Iterable<ActionContextConsumer> getActionContextConsumers() { + return ImmutableList.<ActionContextConsumer>of(new SandboxActionContextConsumer()); + } + + @Override + public void beforeCommand(BlazeRuntime runtime, Command command) { + this.runtime = runtime; + runtime.getEventBus().register(this); + } + + @Subscribe + public void buildStarting(BuildStartingEvent event) { + buildRequest = event.getRequest(); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/standalone/BUILD b/src/main/java/com/google/devtools/build/lib/standalone/BUILD new file mode 100644 index 0000000000..3653e06958 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/standalone/BUILD @@ -0,0 +1,26 @@ +package( + default_visibility = [ + "//src:__subpackages__", + ], +) + +java_library( + name = "standalone", + srcs = glob(["*.java"]), + deps = [ + "//src/main/java:actions", + "//src/main/java:analysis-exec-rules-skyframe", + "//src/main/java:buildtool-runtime", + "//src/main/java:common", + "//src/main/java:packages", + "//src/main/java:shell", + "//src/main/java:vfs", + "//third_party:guava", + ], +) + +filegroup( + name = "srcs", + srcs = glob(["**"]), + visibility = ["//src/main/java:__pkg__"], +) diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextConsumer.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextConsumer.java index b975a5e0ce..4d87f12539 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextConsumer.java +++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextConsumer.java @@ -24,7 +24,7 @@ import java.util.Map; * {@link ActionContextConsumer} that requests the action contexts necessary for standalone * execution. */ -public class StandaloneContextConsumer implements ActionContextConsumer { +public class StandaloneActionContextConsumer implements ActionContextConsumer { @Override public Map<String, String> getSpawnActionContexts() { diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java index 76c2655f06..7fe35f69c7 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java +++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneActionContextProvider.java @@ -32,7 +32,6 @@ import com.google.devtools.build.lib.rules.test.ExclusiveTestStrategy; import com.google.devtools.build.lib.rules.test.StandaloneTestStrategy; import com.google.devtools.build.lib.rules.test.TestActionContext; import com.google.devtools.build.lib.runtime.BlazeRuntime; -import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.vfs.FileSystemUtils; import java.io.IOException; @@ -40,7 +39,7 @@ import java.io.IOException; /** * Provide a standalone, local execution context. */ -public class StandaloneContextProvider extends ActionContextProvider { +public class StandaloneActionContextProvider extends ActionContextProvider { /** * a IncludeScanningContext that does nothing. Since local execution does not need to @@ -61,15 +60,12 @@ public class StandaloneContextProvider extends ActionContextProvider { } } - @SuppressWarnings("unchecked") - private final ActionContext standaloneSpawnStrategy; private final ImmutableList<ActionContext> strategies; private final BlazeRuntime runtime; - public StandaloneContextProvider(BlazeRuntime runtime, BuildRequest buildRequest) { + public StandaloneActionContextProvider(BlazeRuntime runtime, BuildRequest buildRequest) { boolean verboseFailures = buildRequest.getOptions(ExecutionOptions.class).verboseFailures; - standaloneSpawnStrategy = new StandaloneSpawnStrategy(runtime.getExecRoot(), verboseFailures); this.runtime = runtime; TestActionContext testStrategy = new StandaloneTestStrategy(buildRequest, @@ -77,19 +73,12 @@ public class StandaloneContextProvider extends ActionContextProvider { runtime.getWorkspace()); Builder<ActionContext> strategiesBuilder = ImmutableList.builder(); - // order of strategies passed to builder is significant - when there are many strategies that + + // Order of strategies passed to builder is significant - when there are many strategies that // could potentially be used and a spawnActionContext doesn't specify which one it wants, the // last one from strategies list will be used - - // put sandboxed strategy first, as we don't want it by default - if (OS.getCurrent() == OS.LINUX) { - LinuxSandboxedStrategy sandboxedLinuxStrategy = - new LinuxSandboxedStrategy(runtime.getDirectories(), verboseFailures); - strategiesBuilder.add(sandboxedLinuxStrategy); - } - strategiesBuilder.add( - standaloneSpawnStrategy, + new StandaloneSpawnStrategy(runtime.getExecRoot(), verboseFailures), new DummyIncludeScanningContext(), new LocalLinkStrategy(), testStrategy, @@ -104,4 +93,5 @@ public class StandaloneContextProvider extends ActionContextProvider { public Iterable<ActionContext> getActionContexts() { return strategies; } + } diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java index 02d6a3a39f..32d4f42bcd 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java +++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java @@ -27,25 +27,18 @@ import com.google.devtools.build.lib.runtime.Command; * StandaloneModule provides pluggable functionality for blaze. */ public class StandaloneModule extends BlazeModule { - private final ActionContextConsumer actionContextConsumer = new StandaloneContextConsumer(); private BuildRequest buildRequest; private BlazeRuntime runtime; - /** - * Returns the action context provider the module contributes to Blaze, if any. - */ @Override public Iterable<ActionContextProvider> getActionContextProviders() { return ImmutableList.<ActionContextProvider>of( - new StandaloneContextProvider(runtime, buildRequest)); + new StandaloneActionContextProvider(runtime, buildRequest)); } - /** - * Returns the action context consumer the module contributes to Blaze, if any. - */ @Override public Iterable<ActionContextConsumer> getActionContextConsumers() { - return ImmutableList.of(actionContextConsumer); + return ImmutableList.<ActionContextConsumer>of(new StandaloneActionContextConsumer()); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/worker/BUILD b/src/main/java/com/google/devtools/build/lib/worker/BUILD new file mode 100644 index 0000000000..aee455cc65 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/worker/BUILD @@ -0,0 +1,28 @@ +package( + default_visibility = [ + "//src:__subpackages__", + ], +) + +java_library( + name = "worker", + srcs = glob(["*.java"]), + deps = [ + "//src/main/java:actions", + "//src/main/java:buildtool-runtime", + "//src/main/java:common", + "//src/main/java:concurrent", + "//src/main/java:options", + "//src/main/java:vfs", + "//src/main/protobuf:proto_worker_protocol", + "//third_party:apache_commons_pool2", + "//third_party:guava", + "//third_party:jsr305", + ], +) + +filegroup( + name = "srcs", + srcs = glob(["**"]), + visibility = ["//src/main/java:__pkg__"], +) diff --git a/src/main/java/com/google/devtools/build/workspace/BUILD b/src/main/java/com/google/devtools/build/workspace/BUILD index 57d7171433..d1021b5aae 100644 --- a/src/main/java/com/google/devtools/build/workspace/BUILD +++ b/src/main/java/com/google/devtools/build/workspace/BUILD @@ -13,6 +13,7 @@ java_library( deps = [ "//src/main/java:analysis-exec-rules-skyframe", "//src/main/java:bazel-core", + "//src/main/java:buildtool-runtime", "//src/main/java:events", "//src/main/java:options", "//src/main/java:packages", |