Belated cleanup of MetadataHandler#discardMetadata. Since we have per-action metadata handlers, we can just unconditionally discard all output metadata with this call.

--
MOS_MIGRATED_REVID=91008004
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
index 004f2c3..40eabeb 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
@@ -138,8 +138,8 @@
    * {@link Token} if the action needs to be executed, and null otherwise.
    *
    * <p>If this method returns non-null, indicating that the action will be executed, the
-   * metadataHandler's {@link MetadataHandler#discardMetadata} method must be called, so that it
-   * does not serve stale metadata for the action's outputs after the action is executed.
+   * metadataHandler's {@link MetadataHandler#discardOutputMetadata} method must be called, so that
+   * it does not serve stale metadata for the action's outputs after the action is executed.
    */
   // Note: the handler should only be used for DEPCHECKER events; there's no
   // guarantee it will be available for other events.
diff --git a/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataHandler.java b/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataHandler.java
index 049fd61..eda535d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataHandler.java
@@ -19,7 +19,6 @@
 import com.google.devtools.build.lib.vfs.FileStatus;
 
 import java.io.IOException;
-import java.util.Collection;
 
 /** Retrieves {@link Metadata} of {@link Artifact}s, and inserts virtual metadata as well. */
 public interface MetadataHandler {
@@ -85,7 +84,11 @@
    */
   boolean isInjected(Artifact artifact) throws IOException;
 
-  /** Discards all metadata for the given artifacts, presumably because they will be modified. */
-  void discardMetadata(Collection<Artifact> artifactList);
+  /**
+   * Discards all known output artifact metadata, presumably because outputs will be modified.
+   * May only be called before any metadata is injected using {@link #injectDigest} or
+   * {@link #markOmitted};
+   */
+  void discardOutputMetadata();
 
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
index 3230af8..7275222 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
@@ -35,7 +35,6 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -282,11 +281,13 @@
   }
 
   @Override
-  public void discardMetadata(Collection<Artifact> artifactList) {
+  public void discardOutputMetadata() {
     Preconditions.checkState(injectedArtifacts.isEmpty(),
         "Artifacts cannot be injected before action execution: %s", injectedArtifacts);
-    outputArtifactData.keySet().removeAll(artifactList);
-    additionalOutputData.keySet().removeAll(artifactList);
+    Preconditions.checkState(omittedOutputs.isEmpty(),
+        "Artifacts cannot be marked omitted before action execution: %s", omittedOutputs);
+    outputArtifactData.clear();
+    additionalOutputData.clear();
   }
 
   @Override
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 ba32dd8..d4361ae 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
@@ -673,7 +673,7 @@
       ActionExecutionContext context, long actionStartTime)
       throws ActionExecutionException, InterruptedException {
     // Delete the metadataHandler's cache of the action's outputs, since they are being deleted.
-    context.getMetadataHandler().discardMetadata(action.getOutputs());
+    context.getMetadataHandler().discardOutputMetadata();
     // Delete the outputs before executing the action, just to ensure that
     // the action really does produce the outputs.
     try {