diff options
author | philwo <philwo@google.com> | 2017-04-11 12:00:13 +0000 |
---|---|---|
committer | Jakob Buchgraber <buchgr@google.com> | 2017-04-12 11:48:49 +0200 |
commit | c83c570ccf619a0afb9919851067a825eb1ac9ff (patch) | |
tree | b71105ab3261a9349f8ddf2774b468a1374dd561 /src/main/java/com/google/devtools/build | |
parent | 481133fdbcbd4160ea78963a6f8f0db0f5b322f8 (diff) |
Fix #2769: Worker processes should be killed on 'bazel clean'.
PiperOrigin-RevId: 152799488
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/runtime/commands/CleanCommand.java | 17 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java | 11 |
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); |