aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-03-28 09:58:15 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-28 09:59:32 -0700
commit56d785217deabcae751a2c9143cb85bec4568e3e (patch)
treed4abaabf2b7eb30c135a90db5fb3f02dde9d150a /src
parent235f301f365b2d4502702df9604609252c57d662 (diff)
Put configuration checksum into BuildOptions$OptionsDiffForReconstruction and make it available to ConfiguredTarget. Also give BuildConfigurationValue.Key the same toString() that BuildConfiguration had, so we recover how we used to print out ConfiguredTarget labels in debugging.
This may have a tiny bit of overhead in serialization, but we'll cross that bridge when we come to it. Could just make the string a constant. PiperOrigin-RevId: 190787145
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java6
5 files changed, 28 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
index 2a0f751dd2..29f1506fd4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTarget.java
@@ -56,7 +56,9 @@ public interface ConfiguredTarget extends TransitiveInfoCollection, ClassObject,
BuildConfiguration getConfiguration();
default String getConfigurationChecksum() {
- return getConfiguration() == null ? null : getConfiguration().checksum();
+ return getConfigurationKey() == null
+ ? null
+ : getConfigurationKey().getOptionsDiff().getChecksum();
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
index 26d6132b4f..51cbfbc261 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java
@@ -55,7 +55,6 @@ import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
-import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.OS;
import com.google.devtools.build.lib.util.RegexFilter;
import com.google.devtools.build.lib.vfs.Path;
@@ -1360,7 +1359,7 @@ public class BuildConfiguration {
globalMakeEnvBuilder.put("GENDIR", getGenfilesDirectory().getExecPath().getPathString());
globalMakeEnv = globalMakeEnvBuilder.build();
- checksum = computeChecksum(buildOptions);
+ checksum = buildOptions.computeChecksum();
hashCode = computeHashCode();
ImmutableSet.Builder<String> reservedActionMnemonics = ImmutableSet.builder();
@@ -1371,10 +1370,6 @@ public class BuildConfiguration {
this.buildEventSupplier = Suppliers.memoize(this::createBuildEvent);
}
- public static String computeChecksum(BuildOptions buildOptions) {
- return Fingerprint.md5Digest(buildOptions.computeCacheKey());
- }
-
/**
* Returns a copy of this configuration only including the given fragments (which the current
* configuration is assumed to have).
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
index d84db4ce32..8e7c7675ab 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildOptions.java
@@ -199,6 +199,10 @@ public final class BuildOptions implements Cloneable, Serializable {
return keyBuilder.toString();
}
+ public String computeChecksum() {
+ return Fingerprint.md5Digest(computeCacheKey());
+ }
+
/**
* String representation of build options.
*/
@@ -417,7 +421,7 @@ public final class BuildOptions implements Cloneable, Serializable {
BuildOptions first, BuildOptions second) {
OptionsDiff diff = diff(first, second);
if (diff.areSame()) {
- return OptionsDiffForReconstruction.getEmpty(first.fingerprint);
+ return OptionsDiffForReconstruction.getEmpty(first.fingerprint, second.computeChecksum());
}
HashMap<Class<? extends FragmentOptions>, Map<String, Object>> differingOptions =
new HashMap<>(diff.differingOptions.keySet().size());
@@ -445,7 +449,8 @@ public final class BuildOptions implements Cloneable, Serializable {
differingOptions,
ImmutableSet.copyOf(diff.extraFirstFragments),
ImmutableList.copyOf(diff.extraSecondFragments),
- first.fingerprint);
+ first.fingerprint,
+ second.computeChecksum());
}
/**
@@ -543,22 +548,25 @@ public final class BuildOptions implements Cloneable, Serializable {
private final ImmutableSet<Class<? extends FragmentOptions>> extraFirstFragmentClasses;
private final ImmutableList<FragmentOptions> extraSecondFragments;
private final byte[] baseFingerprint;
+ private final String checksum;
@AutoCodec.VisibleForSerialization
OptionsDiffForReconstruction(
Map<Class<? extends FragmentOptions>, Map<String, Object>> differingOptions,
ImmutableSet<Class<? extends FragmentOptions>> extraFirstFragmentClasses,
ImmutableList<FragmentOptions> extraSecondFragments,
- byte[] baseFingerprint) {
+ byte[] baseFingerprint,
+ String checksum) {
this.differingOptions = differingOptions;
this.extraFirstFragmentClasses = extraFirstFragmentClasses;
this.extraSecondFragments = extraSecondFragments;
this.baseFingerprint = baseFingerprint;
+ this.checksum = checksum;
}
- private static OptionsDiffForReconstruction getEmpty(byte[] baseFingerprint) {
+ private static OptionsDiffForReconstruction getEmpty(byte[] baseFingerprint, String checksum) {
return new OptionsDiffForReconstruction(
- ImmutableMap.of(), ImmutableSet.of(), ImmutableList.of(), baseFingerprint);
+ ImmutableMap.of(), ImmutableSet.of(), ImmutableList.of(), baseFingerprint, checksum);
}
@Nullable
@@ -583,6 +591,10 @@ public final class BuildOptions implements Cloneable, Serializable {
return newOptions;
}
+ public String getChecksum() {
+ return checksum;
+ }
+
private boolean isEmpty() {
return differingOptions.isEmpty()
&& extraFirstFragmentClasses.isEmpty()
diff --git a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
index a0a83e43cb..5d5e8e628f 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
@@ -170,10 +170,11 @@ public class TransitionsOutputFormatterCallback extends CqueryThreadsafeCallback
.concat(
toOptions
.stream()
- .map(options -> {
- String checksum = BuildConfiguration.computeChecksum(options);
- return checksum.equals(hostConfigurationChecksum) ? "HOST" : checksum;
- })
+ .map(
+ options -> {
+ String checksum = options.computeChecksum();
+ return checksum.equals(hostConfigurationChecksum) ? "HOST" : checksum;
+ })
.collect(Collectors.joining(", ")))
.concat(")"));
if (verbosity == CqueryOptions.Transitions.LITE) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
index 7bc792a62e..b648d100b8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
@@ -26,7 +26,6 @@ import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
import com.google.devtools.build.lib.skyframe.serialization.SerializationContext;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
-import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
@@ -78,7 +77,6 @@ public class BuildConfigurationValue implements SkyValue {
}
/** {@link SkyKey} for {@link BuildConfigurationValue}. */
- @VisibleForSerialization
public static final class Key implements SkyKey, Serializable {
private static final Interner<Key> keyInterner = BlazeInterners.newWeakInterner();
@@ -92,7 +90,7 @@ public class BuildConfigurationValue implements SkyValue {
return keyInterner.intern(new Key(fragments, optionsDiff));
}
- Key(FragmentClassSet fragments, BuildOptions.OptionsDiffForReconstruction optionsDiff) {
+ private Key(FragmentClassSet fragments, BuildOptions.OptionsDiffForReconstruction optionsDiff) {
this.fragments = fragments;
this.optionsDiff = optionsDiff;
}
@@ -102,7 +100,7 @@ public class BuildConfigurationValue implements SkyValue {
return fragments.fragmentClasses();
}
- BuildOptions.OptionsDiffForReconstruction getOptionsDiff() {
+ public BuildOptions.OptionsDiffForReconstruction getOptionsDiff() {
return optionsDiff;
}