aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2015-09-29 22:59:02 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-09-30 09:36:00 +0000
commit5fb1073d31e392e2f39a067647337043500b348e (patch)
treedddb02591057507a06b7c04232a5c880c69e7152 /src
parent3251ebb3c8f61a4dd7de38719993bc645e017cad (diff)
Reintroduce an inconsistency check (albeit, in a weaker form) removed by a previous change that was trying to optimize away a filesystem call.
-- MOS_MIGRATED_REVID=104246368
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/FileContentsProxy.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java24
3 files changed, 32 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileContentsProxy.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileContentsProxy.java
index d49119c99d..3c3403e804 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FileContentsProxy.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileContentsProxy.java
@@ -61,6 +61,10 @@ public final class FileContentsProxy implements Serializable {
@Override
public String toString() {
- return "mtime: " + mtime + " valueId: " + valueId;
+ return prettyPrint();
+ }
+
+ public String prettyPrint() {
+ return String.format("mtime of %d and nodeId of %d", mtime, valueId);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java
index b0c08adbd4..1255600e6e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileFunction.java
@@ -59,7 +59,7 @@ public class FileFunction implements SkyFunction {
@Override
public SkyValue compute(SkyKey skyKey, Environment env) throws FileFunctionException {
RootedPath rootedPath = (RootedPath) skyKey.argument();
- RootedPath realRootedPath = rootedPath;
+ RootedPath realRootedPath = null;
FileStateValue realFileStateValue = null;
PathFragment relativePath = rootedPath.getRelativePath();
@@ -83,7 +83,16 @@ public class FileFunction implements SkyFunction {
return null;
}
if (realFileStateValue == null) {
+ realRootedPath = rootedPath;
realFileStateValue = fileStateValue;
+ } else if (rootedPath.equals(realRootedPath) && !fileStateValue.equals(realFileStateValue)) {
+ String message = String.format(
+ "Some filesystem operations implied %s was a %s but others made us think it was a %s",
+ rootedPath.asPath().getPathString(),
+ fileStateValue.prettyPrint(),
+ realFileStateValue.prettyPrint());
+ throw new FileFunctionException(new InconsistentFilesystemException(message),
+ Transience.TRANSIENT);
}
ArrayList<RootedPath> symlinkChain = new ArrayList<>();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
index 4495a46b58..46a5734823 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateValue.java
@@ -115,6 +115,13 @@ public abstract class FileStateValue implements SkyValue {
throw new IllegalStateException();
}
+ @Override
+ public String toString() {
+ return prettyPrint();
+ }
+
+ abstract String prettyPrint();
+
/**
* Implementation of {@link FileStateValue} for files that exist.
*
@@ -212,9 +219,12 @@ public abstract class FileStateValue implements SkyValue {
}
@Override
- public String toString() {
- return "[size: " + size + " " + (mtime != -1 ? "mtime: " + mtime : "")
- + (digest != null ? "digest: " + Arrays.toString(digest) : contentsProxy) + "]";
+ public String prettyPrint() {
+ String contents = digest != null
+ ? String.format("digest of ", Arrays.toString(digest))
+ : contentsProxy.prettyPrint();
+ String extra = mtime != -1 ? String.format(" and mtime of %d", mtime) : "";
+ return String.format("regular file with size of %d and %s%s", size, contents, extra);
}
}
@@ -232,7 +242,7 @@ public abstract class FileStateValue implements SkyValue {
}
@Override
- public String toString() {
+ public String prettyPrint() {
return "directory";
}
@@ -282,7 +292,7 @@ public abstract class FileStateValue implements SkyValue {
}
@Override
- public String toString() {
+ public String prettyPrint() {
return "symlink to " + symlinkTarget;
}
}
@@ -301,8 +311,8 @@ public abstract class FileStateValue implements SkyValue {
}
@Override
- public String toString() {
- return "nonexistent";
+ public String prettyPrint() {
+ return "nonexistent path";
}
// This object is normally a singleton, but deserialization produces copies.