Pull FrontierNodeVersion out of SkyValueRetriever into its own library.
PiperOrigin-RevId: 803929424
Change-Id: I5f4d5dbe06b51e774d2541aaea206a499ab99b25
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index 8281c78..c244c9b 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -500,6 +500,7 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/config",
"//src/main/java/com/google/devtools/build/lib/skyframe/rewinding:action_rewound_event",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:analysis_cache_invalidator",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:client_id",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:dependencies_provider",
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
index ec5c0eb..7d22b1e 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
@@ -119,10 +119,10 @@
import com.google.devtools.build.lib.skyframe.actiongraph.v2.InvalidAqueryOutputFormatException;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueService;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueStore;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecRegistry;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.RetrievalResult;
import com.google.devtools.build.lib.skyframe.serialization.SkycacheMetadataParams;
import com.google.devtools.build.lib.skyframe.serialization.analysis.AnalysisCacheInvalidator;
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 b18c91c..deaffbd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -349,6 +349,8 @@
"//src/main/java/com/google/devtools/build/lib/skyframe/config:sky_functions",
"//src/main/java/com/google/devtools/build/lib/skyframe/rewinding",
"//src/main/java/com/google/devtools/build/lib/skyframe/rewinding:rewindable_graph_inconsistency_receiver",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:client_id",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:dependencies_provider",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:options",
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 f02f735..8f16737 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
@@ -231,7 +231,7 @@
import com.google.devtools.build.lib.skyframe.config.PlatformMappingKey;
import com.google.devtools.build.lib.skyframe.config.PlatformMappingValue;
import com.google.devtools.build.lib.skyframe.rewinding.ActionRewindStrategy;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.analysis.ClientId;
import com.google.devtools.build.lib.skyframe.serialization.analysis.RemoteAnalysisCachingDependenciesProvider;
import com.google.devtools.build.lib.skyframe.serialization.analysis.RemoteAnalysisCachingDependenciesProvider.DisabledDependenciesProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
index 6ac10d9..f3ff2ad 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
@@ -78,14 +78,25 @@
)
java_library(
+ name = "frontier_node_version",
+ srcs = ["FrontierNodeVersion.java"],
+ deps = [
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:client_id",
+ "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
+ "//third_party:guava",
+ ],
+)
+
+java_library(
name = "serialization",
srcs = glob(
["**/*.java"],
exclude = [
"AbstractExportedStarlarkSymbolCodec.java",
- "ModuleCodec.java",
"CodecScanningConstants.java",
"DependOnFutureShim.java",
+ "FrontierNodeVersion.java",
+ "ModuleCodec.java",
"SerializationRegistrySetupHelpers.java",
"SerializationConstants.java",
"SerializationModule.java",
@@ -99,9 +110,9 @@
":codec-scanning-constants",
":constants",
":depend_on_future_shim",
+ ":frontier_node_version",
"//src/main/java/com/google/devtools/build/lib/bugreport",
"//src/main/java/com/google/devtools/build/lib/concurrent",
- "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:client_id",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:remote_analysis_cache_client",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
"//src/main/java/com/google/devtools/build/lib/unsafe:string",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/FrontierNodeVersion.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/FrontierNodeVersion.java
new file mode 100644
index 0000000..d82dfc8
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/FrontierNodeVersion.java
@@ -0,0 +1,150 @@
+// Copyright 2025 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 static java.nio.charset.StandardCharsets.UTF_8;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.hash.HashCode;
+import com.google.common.primitives.Bytes;
+import com.google.common.primitives.Longs;
+import com.google.devtools.build.lib.skyframe.serialization.analysis.ClientId;
+import com.google.devtools.build.lib.skyframe.serialization.analysis.ClientId.SnapshotClientId;
+import com.google.devtools.build.skyframe.IntVersion;
+import java.util.Arrays;
+import java.util.Optional;
+
+/** A tuple representing the version of a cached SkyValue in the frontier. */
+public final class FrontierNodeVersion {
+ public static final FrontierNodeVersion CONSTANT_FOR_TESTING =
+ new FrontierNodeVersion(
+ "123",
+ HashCode.fromInt(42),
+ IntVersion.of(9000),
+ "distinguisher",
+ /* useFakeStampData= */ true,
+ Optional.of(new SnapshotClientId("for_testing", 123)));
+
+ // Fingerprints of version components.
+ private final String topLevelConfigChecksum;
+ private final byte[] topLevelConfigFingerprint;
+ private final HashCode blazeInstallMD5;
+ private final byte[] blazeInstallMD5Fingerprint;
+ private final long evaluatingVersion;
+ private final byte[] evaluatingVersionFingerprint;
+
+ // Fingerprint of the distinguisher for allowing test cases to share a
+ // static cache.
+ private final byte[] distinguisherBytesForTesting;
+
+ private final boolean useFakeStampData;
+
+ // Fingerprint of the full version.
+ private final byte[] precomputedFingerprint;
+
+ private final Optional<ClientId> clientId;
+
+ public FrontierNodeVersion(
+ String topLevelConfigChecksum,
+ HashCode blazeInstallMD5,
+ IntVersion evaluatingVersion,
+ String distinguisherBytesForTesting,
+ boolean useFakeStampData,
+ Optional<ClientId> clientId) {
+ this.topLevelConfigChecksum = topLevelConfigChecksum;
+ this.topLevelConfigFingerprint = topLevelConfigChecksum.getBytes(UTF_8);
+ this.blazeInstallMD5 = blazeInstallMD5;
+ this.blazeInstallMD5Fingerprint = blazeInstallMD5.asBytes();
+ this.evaluatingVersion = evaluatingVersion.getVal();
+ this.evaluatingVersionFingerprint = Longs.toByteArray(evaluatingVersion.getVal());
+ this.distinguisherBytesForTesting = distinguisherBytesForTesting.getBytes(UTF_8);
+ this.useFakeStampData = useFakeStampData;
+ this.precomputedFingerprint =
+ Bytes.concat(
+ this.topLevelConfigFingerprint,
+ this.blazeInstallMD5Fingerprint,
+ this.evaluatingVersionFingerprint,
+ this.distinguisherBytesForTesting,
+ this.useFakeStampData ? new byte[] {1} : new byte[] {0});
+
+ // This is undigested.
+ this.clientId = clientId;
+ }
+
+ /**
+ * Returns the snapshot of the workspace.
+ *
+ * <p>Can be empty if snapshots are not supported by the workspace.
+ */
+ @SuppressWarnings("unused") // to be integrated
+ public Optional<ClientId> getClientId() {
+ return clientId;
+ }
+
+ public byte[] getTopLevelConfigFingerprint() {
+ return topLevelConfigFingerprint;
+ }
+
+ public byte[] getPrecomputedFingerprint() {
+ return precomputedFingerprint;
+ }
+
+ public byte[] concat(byte[] input) {
+ return Bytes.concat(precomputedFingerprint, input);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("topLevelConfig", Arrays.hashCode(topLevelConfigFingerprint))
+ .add("blazeInstall", Arrays.hashCode(blazeInstallMD5Fingerprint))
+ .add("evaluatingVersion", Arrays.hashCode(evaluatingVersionFingerprint))
+ .add("distinguisherBytesForTesting", Arrays.hashCode(distinguisherBytesForTesting))
+ .add("useFakeStampData", useFakeStampData)
+ .add("precomputed", hashCode())
+ .toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Arrays.hashCode(precomputedFingerprint);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof FrontierNodeVersion that)) {
+ return false;
+ }
+ return Arrays.equals(precomputedFingerprint, that.precomputedFingerprint);
+ }
+
+ public HashCode getBlazeInstallMD5() {
+ return blazeInstallMD5;
+ }
+
+ public long getEvaluatingVersion() {
+ return evaluatingVersion;
+ }
+
+ public boolean getUseFakeStampData() {
+ return useFakeStampData;
+ }
+
+ public String getTopLevelConfigChecksum() {
+ return topLevelConfigChecksum;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyKeySerializationHelper.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyKeySerializationHelper.java
index 38f735e..48b5289 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyKeySerializationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyKeySerializationHelper.java
@@ -19,7 +19,6 @@
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.protobuf.ByteString;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetriever.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetriever.java
index 1d6dbda..5a44fb3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetriever.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetriever.java
@@ -15,21 +15,13 @@
import static com.google.common.base.Throwables.getRootCause;
import static com.google.common.util.concurrent.Futures.getDone;
-import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.MoreObjects;
-import com.google.common.hash.HashCode;
-import com.google.common.primitives.Bytes;
-import com.google.common.primitives.Longs;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueStore.MissingFingerprintValueException;
import com.google.devtools.build.lib.skyframe.serialization.SharedValueDeserializationContext.StateEvictedException;
-import com.google.devtools.build.lib.skyframe.serialization.analysis.ClientId;
-import com.google.devtools.build.lib.skyframe.serialization.analysis.ClientId.SnapshotClientId;
import com.google.devtools.build.lib.skyframe.serialization.analysis.RemoteAnalysisCacheClient;
import com.google.devtools.build.lib.skyframe.serialization.proto.DataType;
-import com.google.devtools.build.skyframe.IntVersion;
import com.google.devtools.build.skyframe.SkyFunction.Environment.SkyKeyComputeState;
import com.google.devtools.build.skyframe.SkyFunction.LookupEnvironment;
import com.google.devtools.build.skyframe.SkyKey;
@@ -37,9 +29,7 @@
import com.google.protobuf.ByteString;
import com.google.protobuf.CodedInputStream;
import java.io.IOException;
-import java.util.Arrays;
import java.util.HexFormat;
-import java.util.Optional;
import java.util.concurrent.ExecutionException;
import javax.annotation.Nullable;
@@ -399,128 +389,4 @@
record WaitingForFutureResult(ListenableFuture<?> futureResult) implements SerializationState {}
private SkyValueRetriever() {}
-
- /** A tuple representing the version of a cached SkyValue in the frontier. */
- public static final class FrontierNodeVersion {
- public static final FrontierNodeVersion CONSTANT_FOR_TESTING =
- new FrontierNodeVersion(
- "123",
- HashCode.fromInt(42),
- IntVersion.of(9000),
- "distinguisher",
- /* useFakeStampData= */ true,
- Optional.of(new SnapshotClientId("for_testing", 123)));
-
- // Fingerprints of version components.
- private final String topLevelConfigChecksum;
- private final byte[] topLevelConfigFingerprint;
- private final HashCode blazeInstallMD5;
- private final byte[] blazeInstallMD5Fingerprint;
- private final long evaluatingVersion;
- private final byte[] evaluatingVersionFingerprint;
-
- // Fingerprint of the distinguisher for allowing test cases to share a
- // static cache.
- private final byte[] distinguisherBytesForTesting;
-
- private final boolean useFakeStampData;
-
- // Fingerprint of the full version.
- private final byte[] precomputedFingerprint;
-
- private final Optional<ClientId> clientId;
-
- public FrontierNodeVersion(
- String topLevelConfigChecksum,
- HashCode blazeInstallMD5,
- IntVersion evaluatingVersion,
- String distinguisherBytesForTesting,
- boolean useFakeStampData,
- Optional<ClientId> clientId) {
- this.topLevelConfigChecksum = topLevelConfigChecksum;
- this.topLevelConfigFingerprint = topLevelConfigChecksum.getBytes(UTF_8);
- this.blazeInstallMD5 = blazeInstallMD5;
- this.blazeInstallMD5Fingerprint = blazeInstallMD5.asBytes();
- this.evaluatingVersion = evaluatingVersion.getVal();
- this.evaluatingVersionFingerprint = Longs.toByteArray(evaluatingVersion.getVal());
- this.distinguisherBytesForTesting = distinguisherBytesForTesting.getBytes(UTF_8);
- this.useFakeStampData = useFakeStampData;
- this.precomputedFingerprint =
- Bytes.concat(
- this.topLevelConfigFingerprint,
- this.blazeInstallMD5Fingerprint,
- this.evaluatingVersionFingerprint,
- this.distinguisherBytesForTesting,
- this.useFakeStampData ? new byte[] {1} : new byte[] {0});
-
- // This is undigested.
- this.clientId = clientId;
- }
-
- /**
- * Returns the snapshot of the workspace.
- *
- * <p>Can be empty if snapshots are not supported by the workspace.
- */
- @SuppressWarnings("unused") // to be integrated
- public Optional<ClientId> getClientId() {
- return clientId;
- }
-
- public byte[] getTopLevelConfigFingerprint() {
- return topLevelConfigFingerprint;
- }
-
- public byte[] getPrecomputedFingerprint() {
- return precomputedFingerprint;
- }
-
- public byte[] concat(byte[] input) {
- return Bytes.concat(precomputedFingerprint, input);
- }
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(this)
- .add("topLevelConfig", Arrays.hashCode(topLevelConfigFingerprint))
- .add("blazeInstall", Arrays.hashCode(blazeInstallMD5Fingerprint))
- .add("evaluatingVersion", Arrays.hashCode(evaluatingVersionFingerprint))
- .add("distinguisherBytesForTesting", Arrays.hashCode(distinguisherBytesForTesting))
- .add("useFakeStampData", useFakeStampData)
- .add("precomputed", hashCode())
- .toString();
- }
-
- @Override
- public int hashCode() {
- return Arrays.hashCode(precomputedFingerprint);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (!(obj instanceof FrontierNodeVersion that)) {
- return false;
- }
- return Arrays.equals(precomputedFingerprint, that.precomputedFingerprint);
- }
-
- public HashCode getBlazeInstallMD5() {
- return blazeInstallMD5;
- }
-
- public long getEvaluatingVersion() {
- return evaluatingVersion;
- }
-
- public boolean getUseFakeStampData() {
- return useFakeStampData;
- }
-
- public String getTopLevelConfigChecksum() {
- return topLevelConfigChecksum;
- }
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/AnalysisCacheInvalidator.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/AnalysisCacheInvalidator.java
index 5427832..3a923b0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/AnalysisCacheInvalidator.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/AnalysisCacheInvalidator.java
@@ -31,11 +31,11 @@
import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.SilentCloseable;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueService;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
import com.google.devtools.build.lib.skyframe.serialization.PackedFingerprint;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
import com.google.devtools.build.lib.skyframe.serialization.SkyKeySerializationHelper;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.protobuf.ByteString;
import java.util.Objects;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD
index 0e88695..c5e6e01 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD
@@ -20,6 +20,7 @@
":remote_analysis_cache_client",
"//src/main/java/com/google/devtools/build/lib/concurrent:thread_safety",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//third_party:guava",
"//third_party:jsr305",
@@ -47,6 +48,7 @@
"//src/main/java/com/google/devtools/build/lib/analysis/config:build_options",
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//third_party:guava",
"//third_party:jsr305",
@@ -77,8 +79,8 @@
"//src/main/java/com/google/devtools/build/lib/profiler",
"//src/main/java/com/google/devtools/build/lib/skyframe:action_execution_value",
"//src/main/java/com/google/devtools/build/lib/skyframe:filesystem_keys",
- "//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/lib/skyframe/toolchains:registered_execution_platforms_value",
"//src/main/java/com/google/devtools/build/lib/skyframe/toolchains:registered_toolchains_value",
"//src/main/java/com/google/devtools/build/lib/skyframe/toolchains:toolchain_context_key",
@@ -303,6 +305,7 @@
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/profiler",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//third_party:flogger",
"//third_party:guava",
@@ -324,7 +327,7 @@
deps = [
":client_id",
":deserialized_keys_sink",
- "//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/FrontierSerializer.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/FrontierSerializer.java
index 4862428..ebff27b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/FrontierSerializer.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/FrontierSerializer.java
@@ -46,10 +46,10 @@
import com.google.devtools.build.lib.server.FailureDetails.RemoteAnalysisCaching.Code;
import com.google.devtools.build.lib.skyframe.ActionExecutionValue.WithRichData;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueStore;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
import com.google.devtools.build.lib.skyframe.serialization.ProfileCollector;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.analysis.RemoteAnalysisCachingOptions.RemoteAnalysisCacheMode;
import com.google.devtools.build.lib.skyframe.toolchains.RegisteredExecutionPlatformsValue;
import com.google.devtools.build.lib.skyframe.toolchains.RegisteredToolchainsValue;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingDependenciesProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingDependenciesProvider.java
index d5280fe..b48d843 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingDependenciesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingDependenciesProvider.java
@@ -17,9 +17,9 @@
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueService;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.RetrievalResult;
import com.google.devtools.build.lib.skyframe.serialization.analysis.RemoteAnalysisCachingOptions.RemoteAnalysisCacheMode;
import com.google.devtools.build.skyframe.SkyKey;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingEventListener.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingEventListener.java
index b8337b2..478fa43 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingEventListener.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingEventListener.java
@@ -24,8 +24,8 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueStore;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.NoCachedData;
import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.Restart;
import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.RetrievalResult;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingServerState.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingServerState.java
index 910e0ed..36d8ccc 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingServerState.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/RemoteAnalysisCachingServerState.java
@@ -16,7 +16,7 @@
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.skyframe.SkyKey;
import java.util.Objects;
import java.util.Set;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SelectedEntrySerializer.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SelectedEntrySerializer.java
index cb2607c..8413785 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SelectedEntrySerializer.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis/SelectedEntrySerializer.java
@@ -40,11 +40,11 @@
import com.google.devtools.build.lib.skyframe.FileOpNodeOrFuture.FileOpNodeOrEmpty;
import com.google.devtools.build.lib.skyframe.FileOpNodeOrFuture.FutureFileOpNode;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueService;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
import com.google.devtools.build.lib.skyframe.serialization.PackedFingerprint;
import com.google.devtools.build.lib.skyframe.serialization.ProfileCollector;
import com.google.devtools.build.lib.skyframe.serialization.SerializationResult;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.analysis.InvalidationDataInfoOrFuture.FileInvalidationDataInfo;
import com.google.devtools.build.lib.skyframe.serialization.analysis.InvalidationDataInfoOrFuture.FutureFileDataInfo;
import com.google.devtools.build.lib.skyframe.serialization.analysis.InvalidationDataInfoOrFuture.FutureListingDataInfo;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
index 0c3694b..ac968e9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD
@@ -429,6 +429,7 @@
"//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization:depend_on_future_shim",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:client_id",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:remote_analysis_cache_client",
@@ -444,7 +445,6 @@
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/protobuf:build_java_proto",
"//src/test/java/com/google/devtools/build/lib/testutil:TestUtils",
- "//third_party:auto_value",
"//third_party:error_prone_annotations",
"//third_party:guava",
"//third_party:jsr305",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetrieverTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetrieverTest.java
index 8d13095..7b54fb6 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetrieverTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/SkyValueRetrieverTest.java
@@ -18,7 +18,7 @@
import static com.google.devtools.build.lib.skyframe.serialization.DependOnFutureShim.ObservedFutureStatus.DONE;
import static com.google.devtools.build.lib.skyframe.serialization.DependOnFutureShim.ObservedFutureStatus.NOT_DONE;
import static com.google.devtools.build.lib.skyframe.serialization.ExampleValue.exampleValueCodec;
-import static com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion.CONSTANT_FOR_TESTING;
+import static com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion.CONSTANT_FOR_TESTING;
import static com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.NoCachedData.NO_CACHED_DATA;
import static com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.Restart.RESTART;
import static com.google.devtools.build.lib.skyframe.serialization.testutils.FakeInvalidationDataHelper.prependFakeInvalidationData;
@@ -33,7 +33,6 @@
import com.google.common.util.concurrent.SettableFuture;
import com.google.devtools.build.lib.skyframe.serialization.DependOnFutureShim.ObservedFutureStatus;
import com.google.devtools.build.lib.skyframe.serialization.SharedValueDeserializationContext.PeerFailedException;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.RetrievalResult;
import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.RetrievedValue;
import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.SerializationState;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/AnalysisCacheInvalidatorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/AnalysisCacheInvalidatorTest.java
index 56b9cac..0d083cc 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/AnalysisCacheInvalidatorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/AnalysisCacheInvalidatorTest.java
@@ -24,10 +24,10 @@
import com.google.common.hash.HashCode;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.skyframe.serialization.FingerprintValueService;
+import com.google.devtools.build.lib.skyframe.serialization.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs;
import com.google.devtools.build.lib.skyframe.serialization.PackedFingerprint;
import com.google.devtools.build.lib.skyframe.serialization.SkyKeySerializationHelper;
-import com.google.devtools.build.lib.skyframe.serialization.SkyValueRetriever.FrontierNodeVersion;
import com.google.devtools.build.lib.skyframe.serialization.VisibleForSerialization;
import com.google.devtools.build.lib.skyframe.serialization.analysis.ClientId.LongVersionClientId;
import com.google.devtools.build.lib.skyframe.serialization.analysis.ClientId.SnapshotClientId;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD
index 73c8be2..f327bd3 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/analysis/BUILD
@@ -28,6 +28,7 @@
deps = [
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization",
+ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization:frontier_node_version",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization:visible-for-serialization",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:analysis_cache_invalidator",
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/analysis:client_id",