Add a BigIntegerFingerprint class to create a fast non-cryptographcially secure fingerprinting scheme for
ActionExecutionValues.
PiperOrigin-RevId: 226360834
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
index 9e581f42..9221ebc 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
@@ -24,6 +24,7 @@
import com.google.devtools.build.lib.actions.FileArtifactValue;
import com.google.devtools.build.lib.actions.cache.DigestUtils;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.util.BigIntegerFingerprint;
import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.Dirent.Type;
import com.google.devtools.build.lib.vfs.Path;
@@ -31,6 +32,7 @@
import com.google.devtools.build.lib.vfs.Symlinks;
import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
+import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
@@ -53,6 +55,7 @@
private final byte[] digest;
private final Map<TreeFileArtifact, FileArtifactValue> childData;
+ private BigInteger valueFingerprint;
@AutoCodec.VisibleForSerialization
TreeArtifactValue(byte[] digest, Map<TreeFileArtifact, FileArtifactValue> childData) {
@@ -102,6 +105,16 @@
}
@Override
+ public BigInteger getValueFingerprint() {
+ if (valueFingerprint == null) {
+ BigIntegerFingerprint fp = new BigIntegerFingerprint();
+ fp.addBytes(digest);
+ valueFingerprint = fp.getFingerprint();
+ }
+ return valueFingerprint;
+ }
+
+ @Override
public int hashCode() {
return Arrays.hashCode(digest);
}