aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/NotifyOnActionCacheHit.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java26
4 files changed, 60 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/NotifyOnActionCacheHit.java b/src/main/java/com/google/devtools/build/lib/actions/NotifyOnActionCacheHit.java
index ac58b89f4a..89c9a20c2e 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/NotifyOnActionCacheHit.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/NotifyOnActionCacheHit.java
@@ -14,17 +14,47 @@
package com.google.devtools.build.lib.actions;
+import com.google.common.eventbus.EventBus;
+import com.google.devtools.build.lib.actions.Executor.ActionContext;
+import com.google.devtools.build.lib.events.EventHandler;
+import com.google.devtools.build.lib.vfs.Path;
+
/**
* An action which must know when it is skipped due to an action cache hit.
*
* Use should be rare, as the action graph is a functional model.
*/
public interface NotifyOnActionCacheHit extends Action {
+ /**
+ * A custom interface similar to {@link ActionExecutionContext}, but specific to cache hits.
+ */
+ public interface ActionCachedContext {
+ /**
+ * An event listener to report messages to. Errors that signal a action failure should
+ * use ActionExecutionException.
+ */
+ EventHandler getEventHandler();
+
+ /** The EventBus for the current build. */
+ EventBus getEventBus();
+
+ /**
+ * Returns the execution root. This is the directory underneath which Blaze builds its entire
+ * output working tree, including the source symlink forest. All build actions are executed
+ * relative to this directory.
+ */
+ Path getExecRoot();
+
+ /**
+ * Looks up and returns an action context implementation of the given interface type.
+ */
+ <T extends ActionContext> T getContext(Class<? extends T> type);
+ }
/**
* Called when action has "cache hit", and therefore need not be executed.
*
- * @param executor the executor
+ * @param context the action context for a cache hit
*/
- void actionCacheHit(Executor executor);
+ void actionCacheHit(ActionCachedContext context);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java
index 7f42c03889..a38cef2433 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/BaselineCoverageAction.java
@@ -32,7 +32,6 @@ import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.PathFragment;
-
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
@@ -95,8 +94,8 @@ public final class BaselineCoverageAction extends AbstractFileWriteAction
}
@Override
- public void actionCacheHit(Executor executor) {
- notifyAboutBaselineCoverage(executor.getEventBus());
+ public void actionCacheHit(ActionCachedContext context) {
+ notifyAboutBaselineCoverage(context.getEventBus());
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
index 6db48d097e..dec8790a47 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/TestRunnerAction.java
@@ -25,7 +25,6 @@ import com.google.devtools.build.lib.actions.ActionInputHelper;
import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ExecException;
-import com.google.devtools.build.lib.actions.Executor;
import com.google.devtools.build.lib.actions.NotifyOnActionCacheHit;
import com.google.devtools.build.lib.actions.UserExecException;
import com.google.devtools.build.lib.analysis.RunfilesSupplierImpl;
@@ -301,7 +300,7 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
}
@Override
- public void actionCacheHit(Executor executor) {
+ public void actionCacheHit(ActionCachedContext executor) {
unconditionalExecution = null;
try {
executor.getEventBus().post(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
index d93fd76669..f80bf85598 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
@@ -47,10 +47,12 @@ import com.google.devtools.build.lib.actions.ArtifactPrefixConflictException;
import com.google.devtools.build.lib.actions.CachedActionEvent;
import com.google.devtools.build.lib.actions.EnvironmentalExecException;
import com.google.devtools.build.lib.actions.Executor;
+import com.google.devtools.build.lib.actions.Executor.ActionContext;
import com.google.devtools.build.lib.actions.MapBasedActionGraph;
import com.google.devtools.build.lib.actions.MutableActionGraph;
import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
import com.google.devtools.build.lib.actions.NotifyOnActionCacheHit;
+import com.google.devtools.build.lib.actions.NotifyOnActionCacheHit.ActionCachedContext;
import com.google.devtools.build.lib.actions.PackageRootResolver;
import com.google.devtools.build.lib.actions.TargetOutOfDateException;
import com.google.devtools.build.lib.actions.cache.MetadataHandler;
@@ -59,6 +61,7 @@ import com.google.devtools.build.lib.concurrent.ExecutorUtil;
import com.google.devtools.build.lib.concurrent.Sharder;
import com.google.devtools.build.lib.concurrent.ThrowableRecordingRunnableWrapper;
import com.google.devtools.build.lib.events.Event;
+import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Reporter;
import com.google.devtools.build.lib.exec.OutputService;
import com.google.devtools.build.lib.profiler.Profiler;
@@ -486,7 +489,28 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
if (action instanceof NotifyOnActionCacheHit) {
NotifyOnActionCacheHit notify = (NotifyOnActionCacheHit) action;
- notify.actionCacheHit(executorEngine);
+ ActionCachedContext context = new ActionCachedContext() {
+ @Override
+ public EventHandler getEventHandler() {
+ return executorEngine.getEventHandler();
+ }
+
+ @Override
+ public EventBus getEventBus() {
+ return executorEngine.getEventBus();
+ }
+
+ @Override
+ public Path getExecRoot() {
+ return executorEngine.getExecRoot();
+ }
+
+ @Override
+ public <T extends ActionContext> T getContext(Class<? extends T> type) {
+ return executorEngine.getContext(type);
+ }
+ };
+ notify.actionCacheHit(context);
}
// We still need to check the outputs so that output file data is available to the value.