diff options
Diffstat (limited to 'src/main/java/com')
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. |