Replace `EvaluationVersionBehavior` with a method `NodeEntry#getMaxTransitiveSourceVersion`.
Both the graph version and the max transitive source version (if present) are provided to node entries in `setValue`. Nodes can choose which to use.
PiperOrigin-RevId: 414266059
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
index 38dc272..7084da7 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -13,6 +13,8 @@
// limitations under the License.
package com.google.devtools.build.skyframe;
+import static com.google.common.base.MoreObjects.firstNonNull;
+
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@@ -276,9 +278,11 @@
* version and the value.
*/
@Override
- public synchronized Set<SkyKey> setValue(SkyValue value, Version version)
+ public synchronized Set<SkyKey> setValue(
+ SkyValue value, Version graphVersion, @Nullable Version maxTransitiveSourceVersion)
throws InterruptedException {
Preconditions.checkState(isReady(), "Not ready (this=%s, value=%s)", this, value);
+ Version version = firstNonNull(maxTransitiveSourceVersion, graphVersion);
Preconditions.checkState(
this.lastChangedVersion.atMost(version) && this.lastEvaluatedVersion.atMost(version),
"Bad version (this=%s, version=%s, value=%s)",
@@ -300,29 +304,6 @@
return setStateFinishedAndReturnReverseDepsToSignal();
}
- /** An exception indicating that the node's value changed but its version did not. */
- public static final class ChangedValueAtSameVersionException extends IllegalStateException {
- private final SkyValue newValue;
-
- private ChangedValueAtSameVersionException(
- Version lastChangedVersion,
- Version newVersion,
- SkyValue newValue,
- InMemoryNodeEntry nodeEntry) {
- super(
- String.format(
- "Changed value but with the same version? "
- + "lastChangedVersion: %s, newVersion: %s newValue: %s, nodeEntry: %s",
- lastChangedVersion, newVersion, newValue, nodeEntry));
- this.newValue = newValue;
- }
-
- /** Returns the value that this node changed to. */
- public SkyValue getNewValue() {
- return newValue;
- }
- }
-
@Override
public DependencyState addReverseDepAndCheckIfDone(SkyKey reverseDep) {
if ((reverseDep == null || !keepReverseDeps()) && isDone()) {