Delete top-down action caching prototype

PiperOrigin-RevId: 417499871
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index e596d5c..8b7d2ec 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -325,7 +325,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:sky_value_dirtiness_checker",
         "//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
         "//src/main/java/com/google/devtools/build/lib/skyframe:target_pattern_phase_value",
-        "//src/main/java/com/google/devtools/build/lib/skyframe:top_down_action_cache",
         "//src/main/java/com/google/devtools/build/lib/skyframe:workspace_info",
         "//src/main/java/com/google/devtools/build/lib/unix",
         "//src/main/java/com/google/devtools/build/lib/util",
diff --git a/src/main/java/com/google/devtools/build/lib/actionsketch/ActionSketch.java b/src/main/java/com/google/devtools/build/lib/actionsketch/ActionSketch.java
index 8e6cf49..4831aeb 100644
--- a/src/main/java/com/google/devtools/build/lib/actionsketch/ActionSketch.java
+++ b/src/main/java/com/google/devtools/build/lib/actionsketch/ActionSketch.java
@@ -15,7 +15,6 @@
 package com.google.devtools.build.lib.actionsketch;
 
 import com.google.auto.value.AutoValue;
-import com.google.devtools.build.skyframe.SkyValue;
 import com.google.protobuf.ByteString;
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
@@ -24,25 +23,21 @@
 /**
  * An {@link ActionSketch} encodes a transitive hash of an action sufficient to associate with it
  * the result of executing the action. Therefore, this must include a hash on some upper bound of
- * all transitively consumed input files, as well as a transitive hash of all action keys.
+ * all transitively consumed input files.
  */
 @AutoValue
-public abstract class ActionSketch implements SkyValue {
+public abstract class ActionSketch {
   public static final int BIGINTEGER_ENCODED_LENGTH = /*length=*/ 1 + /*payload=*/ 39;
   public static final int MAX_BYTES = /*hashes=*/ 2 * BIGINTEGER_ENCODED_LENGTH;
 
   private static final ActionSketch NULL_SKETCH =
       ActionSketch.builder()
           .setTransitiveSourceHash(null)
-          .setTransitiveActionLookupHash(null)
           .autoBuild();
 
   @Nullable
   public abstract HashAndVersion transitiveSourceHash();
 
-  @Nullable
-  public abstract BigInteger transitiveActionLookupHash();
-
   public static Builder builder() {
     return new AutoValue_ActionSketch.Builder();
   }
@@ -54,20 +49,13 @@
   public abstract static class Builder {
     public abstract Builder setTransitiveSourceHash(HashAndVersion transitiveSourceHash);
 
-    public abstract Builder setTransitiveActionLookupHash(BigInteger transitiveActionLookupHash);
-
     @Nullable
     abstract HashAndVersion transitiveSourceHash();
 
-    @Nullable
-    abstract BigInteger transitiveActionLookupHash();
-
     abstract ActionSketch autoBuild();
 
     public final ActionSketch build() {
-      return transitiveSourceHash() == null && transitiveActionLookupHash() == null
-          ? NULL_SKETCH
-          : autoBuild();
+      return transitiveSourceHash() == null ? NULL_SKETCH : autoBuild();
     }
   }
 
@@ -79,7 +67,6 @@
 
   public final void writeTo(ByteBuffer buffer) {
     writeNextValue(transitiveSourceHash(), buffer);
-    writeNextValue(transitiveActionLookupHash(), buffer);
   }
 
   private static void writeNextValue(HashAndVersion value, ByteBuffer buffer) {
@@ -91,36 +78,12 @@
     }
   }
 
-  private static void writeNextValue(BigInteger value, ByteBuffer buffer) {
-    if (value == null) {
-      buffer.put((byte) -1);
-    } else {
-      byte[] bytes = value.toByteArray();
-      buffer.put((byte) bytes.length).put(bytes);
-    }
-  }
-
   public static ActionSketch fromBytes(ByteString inputBytes) {
     return fromByteBuffer(inputBytes.asReadOnlyByteBuffer());
   }
 
   public static ActionSketch fromByteBuffer(ByteBuffer buffer) {
-    Builder builder =
-        builder()
-            .setTransitiveSourceHash(readNextHashAndVersion(buffer))
-            .setTransitiveActionLookupHash(readNextBigInteger(buffer));
-    return builder.build();
-  }
-
-  @Nullable
-  private static BigInteger readNextBigInteger(ByteBuffer buffer) {
-    byte length = buffer.get();
-    if (length < 0) {
-      return null;
-    }
-    byte[] val = new byte[length];
-    buffer.get(val);
-    return new BigInteger(1, val);
+    return builder().setTransitiveSourceHash(readNextHashAndVersion(buffer)).build();
   }
 
   @Nullable
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index a1927de..0875b92 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -300,11 +300,7 @@
     try (SilentCloseable c =
         Profiler.instance().profile("prepareSkyframeActionExecutorForExecution")) {
       skyframeExecutor.prepareSkyframeActionExecutorForExecution(
-          env.getReporter(),
-          executor,
-          request,
-          skyframeBuilder.getActionCacheChecker(),
-          skyframeBuilder.getTopDownActionCache());
+          env.getReporter(), executor, request, skyframeBuilder.getActionCacheChecker());
     }
 
     // Note that executionProgressReceiver accesses builtTargets concurrently (after wrapping in a
@@ -886,7 +882,6 @@
                 .setVerboseExplanations(options.verboseExplanations)
                 .setStoreOutputMetadata(options.actionCacheStoreOutputMetadata)
                 .build()),
-        env.getTopDownActionCache(),
         request.getPackageOptions().checkOutputFiles
                 // Do not skip invalidation in case the output tree is empty -- this can happen
                 // after it's cleaned or corrupted.
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
index fb135ca..0baaa5d 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
@@ -53,7 +53,6 @@
 import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
 import com.google.devtools.build.lib.skyframe.DetailedException;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.skyframe.TopDownActionCache;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.DetailedExitCode.DetailedExitCodeComparator;
@@ -87,7 +86,6 @@
   private final MetadataProvider fileCache;
   private final ActionInputPrefetcher actionInputPrefetcher;
   private final ActionCacheChecker actionCacheChecker;
-  private final TopDownActionCache topDownActionCache;
   private final BugReporter bugReporter;
 
   @VisibleForTesting
@@ -95,7 +93,6 @@
       SkyframeExecutor skyframeExecutor,
       ResourceManager resourceManager,
       ActionCacheChecker actionCacheChecker,
-      TopDownActionCache topDownActionCache,
       ModifiedFileSet modifiedOutputFiles,
       MetadataProvider fileCache,
       ActionInputPrefetcher actionInputPrefetcher,
@@ -103,7 +100,6 @@
     this.resourceManager = resourceManager;
     this.skyframeExecutor = skyframeExecutor;
     this.actionCacheChecker = actionCacheChecker;
-    this.topDownActionCache = topDownActionCache;
     this.modifiedOutputFiles = modifiedOutputFiles;
     this.fileCache = fileCache;
     this.actionInputPrefetcher = actionInputPrefetcher;
@@ -182,7 +178,6 @@
               exclusiveTests,
               options,
               actionCacheChecker,
-              topDownActionCache,
               executionProgressReceiver,
               topLevelArtifactContext);
       // progressReceiver is finished, so unsynchronized access to builtTargets is now safe.
@@ -212,7 +207,6 @@
                 exclusiveTest,
                 options,
                 actionCacheChecker,
-                topDownActionCache,
                 topLevelArtifactContext);
         detailedExitCode =
             processResult(
@@ -399,10 +393,6 @@
     return actionCacheChecker;
   }
 
-  TopDownActionCache getTopDownActionCache() {
-    return topDownActionCache;
-  }
-
   MetadataProvider getFileCache() {
     return fileCache;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
index c53ce5d..19f1d25 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
@@ -35,7 +35,6 @@
 import com.google.devtools.build.lib.packages.PackageOverheadEstimator;
 import com.google.devtools.build.lib.packages.PackageValidator;
 import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.skyframe.TopDownActionCache;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.DetailedExitCode;
 import com.google.devtools.build.lib.util.io.OutErr;
@@ -99,17 +98,6 @@
     return null;
   }
 
-  /**
-   * Returns the {@link TopDownActionCache} used by Bazel. It is an error if more than one module
-   * returns a top-down action cache. If all modules return null, there will be no top-down caching.
-   *
-   * <p>This method will be called at the beginning of Bazel startup (in-between {@link #globalInit}
-   * and {@link #blazeStartup}).
-   */
-  public TopDownActionCache getTopDownActionCache() {
-    return null;
-  }
-
   /** Tuple returned by {@link #getFileSystem}. */
   @AutoValue
   public abstract static class ModuleFileSystem {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
index 7cf7386..80020ca 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
@@ -42,7 +42,6 @@
 import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
 import com.google.devtools.build.lib.skyframe.SkyframeBuildView;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
-import com.google.devtools.build.lib.skyframe.TopDownActionCache;
 import com.google.devtools.build.lib.skyframe.WorkspaceInfoFromDiff;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.util.DetailedExitCode;
@@ -106,7 +105,6 @@
   private final Consumer<String> shutdownReasonConsumer;
 
   private OutputService outputService;
-  private TopDownActionCache topDownActionCache;
   private String workspaceName;
   private boolean hasSyncedPackageLoading = false;
   @Nullable private WorkspaceInfoFromDiff workspaceInfoFromDiff;
@@ -601,11 +599,6 @@
     return workspaceInfoFromDiff;
   }
 
-  /** Returns the top-down action cache to use, or null. */
-  public TopDownActionCache getTopDownActionCache() {
-    return topDownActionCache;
-  }
-
   public ResourceManager getLocalResourceManager() {
     return ResourceManager.instance();
   }
@@ -732,8 +725,6 @@
 
     outputService = null;
     BlazeModule outputModule = null;
-    topDownActionCache = null;
-    BlazeModule topDownCachingModule = null;
     if (command.builds()) {
       for (BlazeModule module : runtime.getBlazeModules()) {
         OutputService moduleService = module.getOutputService();
@@ -747,18 +738,6 @@
           outputService = moduleService;
           outputModule = module;
         }
-
-        TopDownActionCache moduleCache = module.getTopDownActionCache();
-        if (moduleCache != null) {
-          if (topDownActionCache != null) {
-            throw new IllegalStateException(
-                String.format(
-                    "More than one module (%s and %s) returns a top down action cache",
-                    module.getClass(), topDownCachingModule.getClass()));
-          }
-          topDownActionCache = moduleCache;
-          topDownCachingModule = module;
-        }
       }
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index 60d1d48..597601c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -58,7 +58,6 @@
 import com.google.devtools.build.lib.actions.MissingInputFileException;
 import com.google.devtools.build.lib.actions.PackageRootResolver;
 import com.google.devtools.build.lib.actions.SpawnMetrics;
-import com.google.devtools.build.lib.actionsketch.ActionSketch;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.bugreport.BugReport;
 import com.google.devtools.build.lib.bugreport.BugReporter;
@@ -208,19 +207,6 @@
       clientEnv = ImmutableMap.of();
     }
 
-    ActionSketch sketch = null;
-    TopDownActionCache topDownActionCache = skyframeActionExecutor.getTopDownActionCache();
-    if (topDownActionCache != null) {
-      sketch = (ActionSketch) env.getValue(ActionSketchFunction.key(actionLookupData));
-      if (sketch == null) {
-        return null;
-      }
-      ActionExecutionValue actionExecutionValue = topDownActionCache.get(sketch, actionLookupData);
-      if (actionExecutionValue != null) {
-        return actionExecutionValue.transformForSharedAction(action);
-      }
-    }
-
     // For restarts of this ActionExecutionFunction we use a ContinuationState variable, below, to
     // avoid redoing work.
     //
@@ -382,9 +368,6 @@
 
     // Remove action from state map in case it's there (won't be unless it discovers inputs).
     stateMap.remove(action);
-    if (sketch != null && actionLookupData.valueIsShareable()) {
-      topDownActionCache.put(sketch, result);
-    }
     return result;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionSketchFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionSketchFunction.java
deleted file mode 100644
index 8ed0d68..0000000
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionSketchFunction.java
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright 2019 The Bazel Authors. 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.skyframe;
-
-import com.github.benmanes.caffeine.cache.Caffeine;
-import com.github.benmanes.caffeine.cache.LoadingCache;
-import com.google.devtools.build.lib.actions.Action;
-import com.google.devtools.build.lib.actions.ActionKeyContext;
-import com.google.devtools.build.lib.actions.ActionLookupData;
-import com.google.devtools.build.lib.actions.ActionLookupValue;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.actions.Artifact.DerivedArtifact;
-import com.google.devtools.build.lib.actions.FileArtifactValue;
-import com.google.devtools.build.lib.actionsketch.ActionSketch;
-import com.google.devtools.build.lib.actionsketch.HashAndVersion;
-import com.google.devtools.build.lib.actionsketch.Sketches;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.util.BigIntegerFingerprintUtils;
-import com.google.devtools.build.skyframe.AbstractSkyKey;
-import com.google.devtools.build.skyframe.SkyFunction;
-import com.google.devtools.build.skyframe.SkyFunctionName;
-import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyValue;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.Nullable;
-
-/**
- * {@link ActionSketchFunction} computes an {@link ActionSketch} for the given Action. This is a
- * transitive hash of the dependent action keys and source file content hashes.
- */
-public final class ActionSketchFunction implements SkyFunction {
-  private final ActionKeyContext actionKeyContext;
-
-  public ActionSketchFunction(ActionKeyContext actionKeyContext) {
-    this.actionKeyContext = actionKeyContext;
-  }
-
-  public static SketchKey key(ActionLookupData key) {
-    return SketchKey.create(key);
-  }
-
-  @AutoCodec.VisibleForSerialization
-  @AutoCodec
-  static class SketchKey extends AbstractSkyKey<ActionLookupData> {
-    private static final LoadingCache<ActionLookupData, SketchKey> keyCache =
-        Caffeine.newBuilder()
-            .weakKeys()
-            .initialCapacity(BlazeInterners.concurrencyLevel())
-            .build(SketchKey::new);
-
-    private SketchKey(ActionLookupData arg) {
-      super(arg);
-    }
-
-    @AutoCodec.VisibleForSerialization
-    @AutoCodec.Instantiator
-    static SketchKey create(ActionLookupData arg) {
-      return keyCache.get(arg);
-    }
-
-    @Override
-    public SkyFunctionName functionName() {
-      return SkyFunctions.ACTION_SKETCH;
-    }
-  }
-
-  @Nullable
-  @Override
-  public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException {
-    ActionLookupData actionLookupData = (ActionLookupData) skyKey.argument();
-    ActionLookupValue actionLookupValue =
-        ArtifactFunction.getActionLookupValue(actionLookupData.getActionLookupKey(), env);
-    if (actionLookupValue == null) {
-      return null;
-    }
-
-    Action action = actionLookupValue.getAction(actionLookupData.getActionIndex());
-    List<Artifact> srcArtifacts = new ArrayList<>();
-    List<SketchKey> depActions = new ArrayList<>();
-    for (Artifact artifact : action.getInputs().toList()) {
-      if (artifact.isSourceArtifact()) {
-        srcArtifacts.add(artifact);
-      } else {
-        depActions.add(SketchKey.create(((DerivedArtifact) artifact).getGeneratingActionKey()));
-      }
-    }
-
-    Map<SkyKey, SkyValue> srcArtifactValues = env.getValues(srcArtifacts);
-    Map<SkyKey, SkyValue> depSketchValues = env.getValues(depActions);
-    if (env.valuesMissing()) {
-      return null;
-    }
-
-    BigInteger transitiveActionKeyHash = Sketches.computeActionKey(action, actionKeyContext);
-    BigInteger transitiveSourceHash = BigInteger.ZERO;
-
-    // Incorporate the direct source values.
-    for (SkyValue val : srcArtifactValues.values()) {
-      FileArtifactValue fileArtifactValue = (FileArtifactValue) val;
-      byte[] sourceFingerprint = fileArtifactValue.getValueFingerprint();
-      if (sourceFingerprint != null) {
-        transitiveSourceHash =
-            BigIntegerFingerprintUtils.compose(
-                transitiveSourceHash, new BigInteger(1, sourceFingerprint));
-      } else {
-        transitiveSourceHash = null;
-        break;
-      }
-    }
-
-    // Incorporate the transitive action key and source values.
-    for (SkyValue sketchVal : depSketchValues.values()) {
-      ActionSketch depSketch = (ActionSketch) sketchVal;
-      transitiveActionKeyHash =
-          BigIntegerFingerprintUtils.compose(
-              transitiveActionKeyHash, depSketch.transitiveActionLookupHash());
-      HashAndVersion hashAndVersion = depSketch.transitiveSourceHash();
-      if (hashAndVersion != null) {
-        transitiveSourceHash =
-            BigIntegerFingerprintUtils.composeNullable(transitiveSourceHash, hashAndVersion.hash());
-      } else {
-        transitiveSourceHash = null;
-      }
-    }
-
-    return ActionSketch.builder()
-        .setTransitiveActionLookupHash(transitiveActionKeyHash)
-        .setTransitiveSourceHash(HashAndVersion.createNoVersion(transitiveSourceHash))
-        .build();
-  }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
index 86ea462..dd2b6cf 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -94,7 +94,6 @@
         ":action_lookup_conflict_finding_value",
         ":action_metadata_handler",
         ":action_rewind_strategy",
-        ":action_sketch_function",
         ":action_template_expansion_function",
         ":action_utils",
         ":actiongraph/v2/aquery_output_handler",
@@ -200,7 +199,6 @@
         ":tests_for_target_pattern_value",
         ":toolchain_context_key",
         ":toolchain_exception",
-        ":top_down_action_cache",
         ":transitive_base_traversal_function",
         ":transitive_target_key",
         ":transitive_target_value",
@@ -227,7 +225,6 @@
         "//src/main/java/com/google/devtools/build/lib/actions:fileset_output_symlink",
         "//src/main/java/com/google/devtools/build/lib/actions:package_roots",
         "//src/main/java/com/google/devtools/build/lib/actions:thread_state_receiver",
-        "//src/main/java/com/google/devtools/build/lib/actionsketch:action_sketch",
         "//src/main/java/com/google/devtools/build/lib/analysis:actions/parameter_file_write_action",
         "//src/main/java/com/google/devtools/build/lib/analysis:actions/substitution",
         "//src/main/java/com/google/devtools/build/lib/analysis:actions/template_expansion_action",
@@ -517,28 +514,6 @@
 )
 
 java_library(
-    name = "action_sketch_function",
-    srcs = ["ActionSketchFunction.java"],
-    deps = [
-        ":artifact_function",
-        ":sky_functions",
-        "//src/main/java/com/google/devtools/build/lib/actions",
-        "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_data",
-        "//src/main/java/com/google/devtools/build/lib/actions:artifacts",
-        "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
-        "//src/main/java/com/google/devtools/build/lib/actionsketch:action_sketch",
-        "//src/main/java/com/google/devtools/build/lib/actionsketch:hash_and_version",
-        "//src/main/java/com/google/devtools/build/lib/concurrent",
-        "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
-        "//src/main/java/com/google/devtools/build/lib/util",
-        "//src/main/java/com/google/devtools/build/skyframe",
-        "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
-        "//third_party:caffeine",
-        "//third_party:jsr305",
-    ],
-)
-
-java_library(
     name = "action_template_expansion_function",
     srcs = ["ActionTemplateExpansionFunction.java"],
     deps = [
@@ -2551,17 +2526,6 @@
 )
 
 java_library(
-    name = "top_down_action_cache",
-    srcs = ["TopDownActionCache.java"],
-    deps = [
-        ":action_execution_value",
-        "//src/main/java/com/google/devtools/build/lib/actions:action_lookup_data",
-        "//src/main/java/com/google/devtools/build/lib/actionsketch:action_sketch",
-        "//third_party:jsr305",
-    ],
-)
-
-java_library(
     name = "track_source_directories_flag",
     srcs = ["TrackSourceDirectoriesFlag.java"],
 )
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 3c90c17..a1edb6e 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
@@ -154,7 +154,6 @@
   private ExtendedEventHandler progressSuppressingEventHandler;
   private ActionLogBufferPathGenerator actionLogBufferPathGenerator;
   private ActionCacheChecker actionCacheChecker;
-  @Nullable private TopDownActionCache topDownActionCache;
   private final Profiler profiler = Profiler.instance();
 
   // We keep track of actions already executed this build in order to avoid executing a shared
@@ -257,7 +256,6 @@
       Executor executor,
       OptionsProvider options,
       ActionCacheChecker actionCacheChecker,
-      TopDownActionCache topDownActionCache,
       OutputService outputService,
       boolean incrementalAnalysis) {
     this.reporter = Preconditions.checkNotNull(reporter);
@@ -270,7 +268,6 @@
     this.lostDiscoveredInputsMap = Maps.newConcurrentMap();
     this.hadExecutionError = false;
     this.actionCacheChecker = Preconditions.checkNotNull(actionCacheChecker);
-    this.topDownActionCache = topDownActionCache;
     // Don't cache possibly stale data from the last build.
     this.options = options;
     // Cache some option values for performance, since we consult them on every action.
@@ -356,7 +353,6 @@
     this.completedAndResetActions = null;
     this.lostDiscoveredInputsMap = null;
     this.actionCacheChecker = null;
-    this.topDownActionCache = null;
     this.outputDirectoryHelper = null;
   }
 
@@ -506,10 +502,6 @@
     return emitProgressEvents ? reporter : progressSuppressingEventHandler;
   }
 
-  TopDownActionCache getTopDownActionCache() {
-    return topDownActionCache;
-  }
-
   private ActionExecutionContext getContext(
       Environment env,
       Action action,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 8638d96..dd0c55d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -618,7 +618,6 @@
         new ActionExecutionFunction(skyframeActionExecutor, directories, tsgm, bugReporter);
     map.put(SkyFunctions.ACTION_EXECUTION, actionExecutionFunction);
     this.actionExecutionFunction = actionExecutionFunction;
-    map.put(SkyFunctions.ACTION_SKETCH, new ActionSketchFunction(actionKeyContext));
     map.put(
         SkyFunctions.RECURSIVE_FILESYSTEM_TRAVERSAL, new RecursiveFilesystemTraversalFunction());
     map.put(SkyFunctions.FILESET_ENTRY, new FilesetEntryFunction(directories::getExecRoot));
@@ -1599,7 +1598,6 @@
       Set<ConfiguredTarget> exclusiveTests,
       OptionsProvider options,
       ActionCacheChecker actionCacheChecker,
-      TopDownActionCache topDownActionCache,
       @Nullable EvaluationProgressReceiver executionProgressReceiver,
       TopLevelArtifactContext topLevelArtifactContext)
       throws InterruptedException, AbruptExitException {
@@ -1609,8 +1607,7 @@
     deleteActionsIfRemoteOptionsChanged(options);
     try (SilentCloseable c =
         Profiler.instance().profile("skyframeActionExecutor.prepareForExecution")) {
-      prepareSkyframeActionExecutorForExecution(
-          reporter, executor, options, actionCacheChecker, topDownActionCache);
+      prepareSkyframeActionExecutorForExecution(reporter, executor, options, actionCacheChecker);
     }
 
     resourceManager.resetResourceUsage();
@@ -1652,14 +1649,12 @@
       Reporter reporter,
       Executor executor,
       OptionsProvider options,
-      ActionCacheChecker actionCacheChecker,
-      TopDownActionCache topDownActionCache) {
+      ActionCacheChecker actionCacheChecker) {
     skyframeActionExecutor.prepareForExecution(
         reporter,
         executor,
         options,
         actionCacheChecker,
-        topDownActionCache,
         outputService,
         isAnalysisIncremental());
   }
@@ -1672,7 +1667,6 @@
       ConfiguredTarget exclusiveTest,
       OptionsProvider options,
       ActionCacheChecker actionCacheChecker,
-      TopDownActionCache topDownActionCache,
       TopLevelArtifactContext topLevelArtifactContext)
       throws InterruptedException {
     checkActive();
@@ -1680,8 +1674,7 @@
 
     try (SilentCloseable c =
         Profiler.instance().profile("skyframeActionExecutor.prepareForExecution")) {
-      prepareSkyframeActionExecutorForExecution(
-          reporter, executor, options, actionCacheChecker, topDownActionCache);
+      prepareSkyframeActionExecutorForExecution(reporter, executor, options, actionCacheChecker);
     }
 
     resourceManager.resetResourceUsage();
@@ -1705,13 +1698,8 @@
 
   @VisibleForTesting
   public void prepareBuildingForTestingOnly(
-      Reporter reporter,
-      Executor executor,
-      OptionsProvider options,
-      ActionCacheChecker checker,
-      TopDownActionCache topDownActionCache) {
-    prepareSkyframeActionExecutorForExecution(
-        reporter, executor, options, checker, topDownActionCache);
+      Reporter reporter, Executor executor, OptionsProvider options, ActionCacheChecker checker) {
+    prepareSkyframeActionExecutorForExecution(reporter, executor, options, checker);
   }
 
   private void deleteActionsIfRemoteOptionsChanged(OptionsProvider options)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TopDownActionCache.java b/src/main/java/com/google/devtools/build/lib/skyframe/TopDownActionCache.java
deleted file mode 100644
index 60fd2a7..0000000
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TopDownActionCache.java
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2019 The Bazel Authors. 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.skyframe;
-
-import com.google.devtools.build.lib.actions.ActionLookupData;
-import com.google.devtools.build.lib.actionsketch.ActionSketch;
-import javax.annotation.Nullable;
-
-/**
- * A top-down action cache is a cache of {@link ActionSketch} to {@link ActionExecutionValue}.
- *
- * <p>Unlike {@link com.google.devtools.build.lib.actions.ActionCacheChecker}, a top-down cache can
- * cull large subgraphs by computing the transitive cache key (known as the {@link ActionSketch}).
- */
-public interface TopDownActionCache {
-
-  /**
-   * Retrieves the cached value for the given action sketch, or null.
-   *
-   * <p>The sketch alone is expected to suffice as the cache key, but the {@link ActionLookupData}
-   * is also provided for context.
-   */
-  @Nullable
-  ActionExecutionValue get(ActionSketch sketch, ActionLookupData action);
-
-  /** Puts the sketch into the top-down cache. May complete asynchronously. */
-  void put(ActionSketch sketch, ActionExecutionValue value);
-}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BigIntegerCodec.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BigIntegerCodec.java
deleted file mode 100644
index ab70756..0000000
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BigIntegerCodec.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2019 The Bazel Authors. 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.skyframe.serialization;
-
-import com.google.protobuf.CodedInputStream;
-import com.google.protobuf.CodedOutputStream;
-import java.io.IOException;
-import java.math.BigInteger;
-
-/** Codec for {@link BigInteger}. */
-public final class BigIntegerCodec implements ObjectCodec<BigInteger> {
-
-  @Override
-  public Class<? extends BigInteger> getEncodedClass() {
-    return BigInteger.class;
-  }
-
-  @Override
-  public void serialize(SerializationContext context, BigInteger obj, CodedOutputStream codedOut)
-      throws IOException {
-    codedOut.writeByteArrayNoTag(obj.toByteArray());
-  }
-
-  @Override
-  public BigInteger deserialize(DeserializationContext context, CodedInputStream codedIn)
-      throws SerializationException, IOException {
-    return new BigInteger(codedIn.readByteArray());
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
index 23a6fbc..58444b9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -181,7 +181,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:action_execution_inactivity_watchdog",
         "//src/main/java/com/google/devtools/build/lib/skyframe:action_execution_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:action_metadata_handler",
-        "//src/main/java/com/google/devtools/build/lib/skyframe:action_sketch_function",
         "//src/main/java/com/google/devtools/build/lib/skyframe:action_template_expansion_function",
         "//src/main/java/com/google/devtools/build/lib/skyframe:action_template_expansion_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:artifact_function",
@@ -245,7 +244,6 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:target_pattern_phase_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:tests_for_target_pattern_value",
         "//src/main/java/com/google/devtools/build/lib/skyframe:toolchain_exception",
-        "//src/main/java/com/google/devtools/build/lib/skyframe:top_down_action_cache",
         "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_base_traversal_function",
         "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_target_key",
         "//src/main/java/com/google/devtools/build/lib/skyframe:transitive_traversal_function",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
index e9c3b4d..44a2f36 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
@@ -769,12 +769,11 @@
         options,
         NULL_CHECKER,
         null,
-        null,
         null);
 
     reporter.removeHandler(failFastHandler); // Expect errors.
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
     EvaluationResult<FileArtifactValue> result = evaluate(ImmutableList.of(output1, output2));
     assertWithMessage(result.toString()).that(result.keyNames()).isEmpty();
     assertThat(result.hasError()).isTrue();
@@ -867,11 +866,10 @@
         options,
         NULL_CHECKER,
         null,
-        null,
         null);
 
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
     EvaluationResult<FileArtifactValue> result =
         evaluate(Artifact.keys(ImmutableList.of(output1, output2)));
     assertThat(result.hasError()).isFalse();
@@ -1011,11 +1009,10 @@
         options,
         NULL_CHECKER,
         null,
-        null,
         null);
 
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
     reporter.removeHandler(failFastHandler);
     try {
       evaluate(Artifact.keys(ImmutableList.of(outputA, outputB, outputC)));
@@ -1096,11 +1093,10 @@
         options,
         NULL_CHECKER,
         null,
-        null,
         null);
 
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
 
     EvaluationResult<TreeArtifactValue> result = evaluate(ImmutableList.of(output1, output2));
 
@@ -1204,11 +1200,10 @@
         options,
         NULL_CHECKER,
         null,
-        null,
         null);
 
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
     evaluate(ImmutableList.of(sharedOutput1, sharedOutput2));
   }
 
@@ -1416,16 +1411,15 @@
         options,
         NULL_CHECKER,
         null,
-        null,
         null);
 
     // NULL_CHECKER here means action cache, which would be our savior, is not in play.
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
     EvaluationResult<FileArtifactValue> result = evaluate(Artifact.keys(ImmutableList.of(output1)));
     assertThat(result.hasError()).isFalse();
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
     EvaluationResult<FileArtifactValue> result2 =
         evaluate(Artifact.keys(ImmutableList.of(top, output2)));
     assertThat(result2.hasError()).isFalse();
@@ -1512,11 +1506,10 @@
         options,
         NULL_CHECKER,
         null,
-        null,
         null);
 
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
     reporter.removeHandler(failFastHandler); // Expect errors.
     evaluate(Artifact.keys(ImmutableList.of(output, output2)));
     assertContainsEvent(
@@ -1588,11 +1581,10 @@
         options,
         NULL_CHECKER,
         null,
-        null,
         null);
 
     skyframeExecutor.prepareBuildingForTestingOnly(
-        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER, null);
+        reporter, new DummyExecutor(fileSystem, rootDirectory), options, NULL_CHECKER);
     evaluate(ImmutableList.of(Artifact.key(output2)));
     assertContainsEvent("action 1");
     assertContainsEvent("action 2");
@@ -1747,7 +1739,6 @@
             skyframeExecutor,
             ResourceManager.instanceForTestingOnly(),
             NULL_CHECKER,
-            null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /* fileCache= */ null,
             ActionInputPrefetcher.NONE,
@@ -1884,7 +1875,6 @@
             skyframeExecutor,
             ResourceManager.instanceForTestingOnly(),
             NULL_CHECKER,
-            null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /*fileCache=*/ null,
             ActionInputPrefetcher.NONE,
@@ -2009,7 +1999,6 @@
             skyframeExecutor,
             ResourceManager.instanceForTestingOnly(),
             NULL_CHECKER,
-            null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /*fileCache=*/ null,
             ActionInputPrefetcher.NONE,
@@ -2128,7 +2117,6 @@
             skyframeExecutor,
             ResourceManager.instanceForTestingOnly(),
             NULL_CHECKER,
-            null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /* fileCache= */ null,
             ActionInputPrefetcher.NONE,
@@ -2236,7 +2224,6 @@
             skyframeExecutor,
             ResourceManager.instanceForTestingOnly(),
             NULL_CHECKER,
-            null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /* fileCache= */ null,
             ActionInputPrefetcher.NONE,
@@ -2334,7 +2321,6 @@
             skyframeExecutor,
             ResourceManager.instanceForTestingOnly(),
             NULL_CHECKER,
-            null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /* fileCache= */ null,
             ActionInputPrefetcher.NONE,
@@ -2418,7 +2404,6 @@
             skyframeExecutor,
             ResourceManager.instanceForTestingOnly(),
             NULL_CHECKER,
-            null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /*fileCache=*/ null,
             ActionInputPrefetcher.NONE,
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index 69cedd2..dcabd2d 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -151,7 +151,6 @@
   protected OptionsParser options;
 
   protected final ActionKeyContext actionKeyContext = new ActionKeyContext();
-  private TopDownActionCache topDownActionCache;
 
   @Before
   public final void initialize() throws Exception  {
@@ -164,11 +163,6 @@
     tsgm = new TimestampGranularityMonitor(clock);
     actions = new LinkedHashSet<>();
     actionTemplateExpansionFunction = new ActionTemplateExpansionFunction(actionKeyContext);
-    topDownActionCache = initTopDownActionCache();
-  }
-
-  protected TopDownActionCache initTopDownActionCache() {
-    return null;
   }
 
   protected void clearActions() {
@@ -314,7 +308,6 @@
                 .put(
                     SkyFunctions.ACTION_TEMPLATE_EXPANSION,
                     new DelegatingActionTemplateExpansionFunction())
-                .put(SkyFunctions.ACTION_SKETCH, new ActionSketchFunction(actionKeyContext))
                 .put(
                     SkyFunctions.ARTIFACT_NESTED_SET,
                     ArtifactNestedSetFunction.createInstance(
@@ -377,7 +370,6 @@
             options,
             new ActionCacheChecker(
                 actionCache, null, actionKeyContext, ALWAYS_EXECUTE_FILTER, null),
-            topDownActionCache,
             /*outputService=*/ null,
             /*incrementalAnalysis=*/ true);
         skyframeActionExecutor.setActionExecutionProgressReportingObjects(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TopDownActionCacheTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TopDownActionCacheTest.java
deleted file mode 100644
index f48780f..0000000
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TopDownActionCacheTest.java
+++ /dev/null
@@ -1,223 +0,0 @@
-// Copyright 2019 The Bazel Authors. 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.skyframe;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import com.github.benmanes.caffeine.cache.Cache;
-import com.github.benmanes.caffeine.cache.Caffeine;
-import com.google.common.collect.ImmutableSet;
-import com.google.devtools.build.lib.actions.ActionKeyContext;
-import com.google.devtools.build.lib.actions.ActionLookupData;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.actions.util.TestAction;
-import com.google.devtools.build.lib.actionsketch.ActionSketch;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.collect.nestedset.Order;
-import com.google.devtools.build.lib.util.Fingerprint;
-import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import javax.annotation.Nullable;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Tests for top-down, transitive action caching. */
-@RunWith(JUnit4.class)
-public final class TopDownActionCacheTest extends TimestampBuilderTestCase {
-
-  @Override
-  protected TopDownActionCache initTopDownActionCache() {
-    return new InMemoryTopDownActionCache();
-  }
-
-  private void buildArtifacts(Artifact... artifacts) throws Exception {
-    buildArtifacts(amnesiacBuilder(), artifacts);
-  }
-
-  private static NestedSet<Artifact> asNestedSet(Artifact... artifacts) {
-    return NestedSetBuilder.create(Order.STABLE_ORDER, artifacts);
-  }
-
-  @Test
-  public void testAmnesiacBuilderGetsTopDownHit() throws Exception {
-    Artifact hello = createDerivedArtifact("hello");
-    Button button = createActionButton(emptyNestedSet, ImmutableSet.of(hello));
-
-    button.pressed = false;
-    buildArtifacts(hello);
-    assertThat(button.pressed).isTrue();
-
-    button.pressed = false;
-    buildArtifacts(hello);
-    assertThat(button.pressed).isFalse();
-  }
-
-  @Test
-  public void testTransitiveTopDownCache() throws Exception {
-    Artifact hello = createDerivedArtifact("hello");
-    Artifact hello2 = createDerivedArtifact("hello2");
-    Button button = createActionButton(emptyNestedSet, ImmutableSet.of(hello));
-    Button button2 = createActionButton(asNestedSet(hello), ImmutableSet.of(hello2));
-
-    button.pressed = false;
-    button2.pressed = false;
-    buildArtifacts(hello2);
-    assertThat(button.pressed).isTrue();
-    assertThat(button2.pressed).isTrue();
-
-    button.pressed = false;
-    button2.pressed = false;
-    buildArtifacts(hello2);
-    assertThat(button.pressed).isFalse();
-    assertThat(button2.pressed).isFalse();
-  }
-
-  @Test
-  public void testActionKeyCaching() throws Exception {
-    Artifact hello = createDerivedArtifact("hello");
-    Artifact hello2 = createDerivedArtifact("hello2");
-
-    ActionKeyButton button = createActionKeyButton(emptyNestedSet, ImmutableSet.of(hello), "abc");
-    ActionKeyButton button2 =
-        createActionKeyButton(asNestedSet(hello), ImmutableSet.of(hello2), "xyz");
-
-    button.pressed = false;
-    button2.pressed = false;
-    buildArtifacts(hello2);
-    assertThat(button.pressed).isTrue();
-    assertThat(button2.pressed).isTrue();
-
-    button.pressed = false;
-    button2.pressed = false;
-    buildArtifacts(hello2);
-    assertThat(button.pressed).isFalse();
-    assertThat(button2.pressed).isFalse();
-
-    clearActions();
-    hello = createDerivedArtifact("hello");
-    hello2 = createDerivedArtifact("hello2");
-    button = createActionKeyButton(emptyNestedSet, ImmutableSet.of(hello), "abc");
-    button2 = createActionKeyButton(asNestedSet(hello), ImmutableSet.of(hello2), "123");
-    button.pressed = false;
-    button2.pressed = false;
-    buildArtifacts(hello2);
-    assertThat(button.pressed).isFalse();
-    assertThat(button2.pressed).isTrue();
-
-    button.pressed = false;
-    button2.pressed = false;
-    buildArtifacts(hello2);
-    assertThat(button.pressed).isFalse();
-    assertThat(button2.pressed).isFalse();
-
-    clearActions();
-    hello = createDerivedArtifact("hello");
-    hello2 = createDerivedArtifact("hello2");
-    button = createActionKeyButton(emptyNestedSet, ImmutableSet.of(hello), "456");
-    button2 = createActionKeyButton(asNestedSet(hello), ImmutableSet.of(hello2), "123");
-    button.pressed = false;
-    button2.pressed = false;
-    buildArtifacts(hello2);
-    assertThat(button.pressed).isTrue();
-    assertThat(button2.pressed).isTrue();
-
-    button.pressed = false;
-    button2.pressed = false;
-    buildArtifacts(hello2);
-    assertThat(button.pressed).isFalse();
-    assertThat(button2.pressed).isFalse();
-  }
-
-  @Test
-  public void testSingleSourceArtifactChanged() throws Exception {
-    Artifact hello = createSourceArtifact("hello");
-    hello.getPath().getParentDirectory().createDirectoryAndParents();
-    FileSystemUtils.writeContentAsLatin1(hello.getPath(), "content1");
-
-    Artifact goodbye = createDerivedArtifact("goodbye");
-    Button button = createActionButton(asNestedSet(hello), ImmutableSet.of(goodbye));
-
-    button.pressed = false;
-    buildArtifacts(goodbye);
-    assertThat(button.pressed).isTrue();
-
-    button.pressed = false;
-    buildArtifacts(goodbye);
-    assertThat(button.pressed).isFalse(); // top-down cached
-
-    FileSystemUtils.writeContentAsLatin1(hello.getPath(), "content1");
-    button.pressed = false;
-    buildArtifacts(goodbye);
-    assertThat(button.pressed).isFalse(); // top-down cached
-
-    FileSystemUtils.writeContentAsLatin1(hello.getPath(), "content2");
-    button.pressed = false;
-    buildArtifacts(goodbye);
-    assertThat(button.pressed).isTrue(); // built
-
-    button.pressed = false;
-    buildArtifacts(goodbye);
-    assertThat(button.pressed).isFalse(); // top-down cached
-  }
-
-  private static class InMemoryTopDownActionCache implements TopDownActionCache {
-    private final Cache<ActionSketch, ActionExecutionValue> cache = Caffeine.newBuilder().build();
-
-    @Nullable
-    @Override
-    public ActionExecutionValue get(ActionSketch sketch, ActionLookupData action) {
-      return cache.getIfPresent(sketch);
-    }
-
-    @Override
-    public void put(ActionSketch sketch, ActionExecutionValue value) {
-      cache.put(sketch, value);
-    }
-  }
-
-  private static final class MutableActionKeyAction extends TestAction {
-    private final ActionKeyButton button;
-
-    MutableActionKeyAction(
-        ActionKeyButton button, NestedSet<Artifact> inputs, ImmutableSet<Artifact> outputs) {
-      super(button, inputs, outputs);
-      this.button = button;
-    }
-
-    @Override
-    protected void computeKey(
-        ActionKeyContext actionKeyContext,
-        @Nullable Artifact.ArtifactExpander artifactExpander,
-        Fingerprint fp) {
-      super.computeKey(actionKeyContext, artifactExpander, fp);
-      fp.addString(button.key);
-    }
-  }
-
-  private static final class ActionKeyButton extends Button {
-    private final String key;
-
-    ActionKeyButton(String key) {
-      this.key = key;
-    }
-  }
-
-  private ActionKeyButton createActionKeyButton(
-      NestedSet<Artifact> inputs, ImmutableSet<Artifact> outputs, String key) {
-    ActionKeyButton button = new ActionKeyButton(key);
-    registerAction(new MutableActionKeyAction(button, inputs, outputs));
-    return button;
-  }
-}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BigIntegerCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BigIntegerCodecTest.java
deleted file mode 100644
index 560f102..0000000
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BigIntegerCodecTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2019 The Bazel Authors. 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.skyframe.serialization;
-
-import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester;
-import java.math.BigInteger;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/** Tests for {@link BigIntegerCodec}. */
-@RunWith(JUnit4.class)
-public class BigIntegerCodecTest {
-
-  @Test
-  public void smoke() throws Exception {
-    BigInteger bigBigInt =
-        new BigInteger("9999999999999999999999999999999999999999999999999999999999999");
-
-    new SerializationTester(
-            BigInteger.ZERO,
-            BigInteger.ONE,
-            BigInteger.valueOf(-1),
-            BigInteger.valueOf(Long.MAX_VALUE),
-            BigInteger.valueOf(Long.MIN_VALUE),
-            bigBigInt,
-            bigBigInt.pow(10_000))
-        .runTests();
-  }
-}