aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar philwo <philwo@google.com>2017-04-11 12:00:13 +0000
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-04-12 11:48:49 +0200
commitc83c570ccf619a0afb9919851067a825eb1ac9ff (patch)
treeb71105ab3261a9349f8ddf2774b468a1374dd561 /src/main/java
parent481133fdbcbd4160ea78963a6f8f0db0f5b322f8 (diff)
Fix #2769: Worker processes should be killed on 'bazel clean'.
PiperOrigin-RevId: 152799488
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java11
2 files changed, 28 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java
index 368529e804..466c3f94d6 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java
@@ -102,6 +102,21 @@ public final class CleanCommand implements BlazeCommand {
public boolean async;
}
+ /**
+ * Posted on the public event stream to announce that a clean is happening.
+ */
+ public static class CleanStartingEvent {
+ private final OptionsProvider optionsProvider;
+
+ public CleanStartingEvent(OptionsProvider optionsProvider) {
+ this.optionsProvider = optionsProvider;
+ }
+
+ public OptionsProvider getOptionsProvider() {
+ return optionsProvider;
+ }
+ }
+
private static Logger LOG = Logger.getLogger(CleanCommand.class.getName());
@Override
@@ -152,7 +167,9 @@ public final class CleanCommand implements BlazeCommand {
+ asyncName
+ " if the clean takes more than several minutes.";
+ env.getEventBus().post(new CleanStartingEvent(options));
env.getReporter().handle(Event.info(null/*location*/, cleanBanner));
+
try {
String symlinkPrefix = options.getOptions(BuildRequest.BuildRequestOptions.class)
.getSymlinkPrefix(env.getRuntime().getProductName());
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
index e575d8204b..ddd07ad36c 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
@@ -24,6 +24,7 @@ import com.google.devtools.build.lib.exec.ExecutorBuilder;
import com.google.devtools.build.lib.runtime.BlazeModule;
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
+import com.google.devtools.build.lib.runtime.commands.CleanCommand.CleanStartingEvent;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.common.options.OptionsBase;
@@ -54,6 +55,16 @@ public class WorkerModule extends BlazeModule {
}
@Subscribe
+ public void cleanStarting(CleanStartingEvent event) {
+ if (workerPool != null) {
+ this.options = event.getOptionsProvider().getOptions(WorkerOptions.class);
+ workerFactory.setReporter(env.getReporter());
+ workerFactory.setOptions(options);
+ shutdownPool("Clean command is running, shutting down worker pool...");
+ }
+ }
+
+ @Subscribe
public void buildStarting(BuildStartingEvent event) {
options = event.getRequest().getOptions(WorkerOptions.class);