diff options
author | 2018-03-02 08:11:43 -0800 | |
---|---|---|
committer | 2018-03-02 08:13:31 -0800 | |
commit | d1201c8e61ee77feabeb83da88e0eae049087a09 (patch) | |
tree | 1ca4e22c9f6d6bccf92b742856ba1f6aa629f423 /src/main/java/com/google/devtools | |
parent | 52ec7fb1c22afea1a172a5720ddca44d88bbdee8 (diff) |
Add execution platform information to the action key.
Needed so that actions are properly invalidated and re-run when the platform's remote execution properties change.
Fixes #4756.
Closes #4728.
Change-Id: Ia227d110c10c9aad2164cefa8a90361cc4359332
PiperOrigin-RevId: 187621349
Diffstat (limited to 'src/main/java/com/google/devtools')
4 files changed, 31 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java index 86fa2410b7..7e264670b8 100644 --- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java +++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java @@ -314,6 +314,15 @@ public abstract class AbstractAction implements Action, SkylarkValue { try { Fingerprint fp = new Fingerprint(); computeKey(actionKeyContext, fp); + + // Add a bool indicating whether the execution platform was set. + fp.addBoolean(getExecutionPlatform() != null); + if (getExecutionPlatform() != null) { + // Add the execution platform information. + getExecutionPlatform().addTo(fp); + } + + // Compute the actual key and store it. cachedKey = fp.hexDigestAndReset(); } catch (CommandLineExpansionException e) { cachedKey = KEY_ERROR; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java index 16fa28af09..907a1b977c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; +import com.google.devtools.build.lib.util.Fingerprint; /** Provider for a platform constraint setting that is available to be fulfilled. */ @SkylarkModule( @@ -93,4 +94,9 @@ public class ConstraintSettingInfo extends NativeInfo { public static ConstraintSettingInfo create(Label constraintSetting, Location location) { return new ConstraintSettingInfo(constraintSetting, location); } + + /** Add this constraint setting to the given fingerprint. */ + public void addTo(Fingerprint fp) { + fp.addString(label.getCanonicalForm()); + } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java index febe3e7e84..7603f0820f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkType; +import com.google.devtools.build.lib.util.Fingerprint; /** Provider for a platform constraint value that fulfills a {@link ConstraintSettingInfo}. */ @SkylarkModule( @@ -111,4 +112,10 @@ public class ConstraintValueInfo extends NativeInfo { ConstraintSettingInfo constraint, Label value, Location location) { return new ConstraintValueInfo(constraint, value, location); } + + /** Add this constraint value to the given fingerprint. */ + public void addTo(Fingerprint fp) { + this.constraint.addTo(fp); + fp.addString(label.getCanonicalForm()); + } } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java index c70690b7e2..6b57ddf786 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java @@ -38,6 +38,7 @@ import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.FunctionSignature; import com.google.devtools.build.lib.syntax.SkylarkList; import com.google.devtools.build.lib.syntax.SkylarkType; +import com.google.devtools.build.lib.util.Fingerprint; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -173,6 +174,14 @@ public class PlatformInfo extends NativeInfo { return new Builder(); } + /** Add this platform to the given fingerprint. */ + public void addTo(Fingerprint fp) { + fp.addString(label.toString()); + fp.addNullableString(remoteExecutionProperties); + fp.addInt(constraints.size()); + constraints.values().forEach(constraintValue -> constraintValue.addTo(fp)); + } + /** Builder class to facilitate creating valid {@link PlatformInfo} instances. */ public static class Builder { private Label label; |