From 9b38b2cdebc2bde00e85fc4ed8ed7bef400f6c8c Mon Sep 17 00:00:00 2001 From: Nathan Harmata Date: Thu, 27 Aug 2015 16:11:07 +0000 Subject: Be resilient to a non-decreasing clock in BlazeRuntime#recordLastExecutionTime. Also add @Nullable annotations as appropriate. Fixes #394. -- MOS_MIGRATED_REVID=101685096 --- .../com/google/devtools/build/lib/buildtool/SkyframeBuilder.java | 4 +++- .../java/com/google/devtools/build/lib/runtime/BlazeRuntime.java | 6 +++++- .../google/devtools/build/lib/skyframe/FilesystemValueChecker.java | 5 +++-- .../com/google/devtools/build/lib/skyframe/SkyframeExecutor.java | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java index 0ab5e8059c..fd91a9358b 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java @@ -66,6 +66,8 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; +import javax.annotation.Nullable; + /** * A {@link Builder} implementation driven by Skyframe. */ @@ -103,7 +105,7 @@ public class SkyframeBuilder implements Builder { Executor executor, Set builtTargets, boolean explain, - Range lastExecutionTimeRange) + @Nullable Range lastExecutionTimeRange) throws BuildFailedException, AbruptExitException, TestExecException, InterruptedException { skyframeExecutor.prepareExecution(checkOutputFiles, lastExecutionTimeRange); skyframeExecutor.setFileCache(fileCache); diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java index 3a4f3e1d90..ddd3cb1585 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java @@ -168,6 +168,7 @@ public final class BlazeRuntime { private Path workingDirectory; private long commandStartTime; + @Nullable private Range lastExecutionStartFinish = null; private final SkyframeExecutor skyframeExecutor; @@ -408,7 +409,10 @@ public final class BlazeRuntime { } public void recordLastExecutionTime() { - lastExecutionStartFinish = Range.closed(commandStartTime, clock.currentTimeMillis()); + long currentTimeMillis = clock.currentTimeMillis(); + lastExecutionStartFinish = currentTimeMillis >= commandStartTime + ? Range.closed(commandStartTime, currentTimeMillis) + : null; } /** diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java b/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java index 9e00da1ce4..3c414d8126 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java @@ -67,20 +67,21 @@ class FilesystemValueChecker { SkyFunctionName.functionIs(SkyFunctions.ACTION_EXECUTION); private final TimestampGranularityMonitor tsgm; + @Nullable private final Range lastExecutionTimeRange; private final Supplier> valuesSupplier; private AtomicInteger modifiedOutputFilesCounter = new AtomicInteger(0); private AtomicInteger modifiedOutputFilesIntraBuildCounter = new AtomicInteger(0); FilesystemValueChecker(Supplier> valuesSupplier, - TimestampGranularityMonitor tsgm, Range lastExecutionTimeRange) { + TimestampGranularityMonitor tsgm, @Nullable Range lastExecutionTimeRange) { this.valuesSupplier = valuesSupplier; this.tsgm = tsgm; this.lastExecutionTimeRange = lastExecutionTimeRange; } FilesystemValueChecker(final MemoizingEvaluator evaluator, TimestampGranularityMonitor tsgm, - Range lastExecutionTimeRange) { + @Nullable Range lastExecutionTimeRange) { this.tsgm = tsgm; this.lastExecutionTimeRange = lastExecutionTimeRange; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index c6b5a22f82..907a89a939 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -1634,7 +1634,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { } public void prepareExecution(boolean checkOutputFiles, - Range lastExecutionTimeRange) throws AbruptExitException, + @Nullable Range lastExecutionTimeRange) throws AbruptExitException, InterruptedException { maybeInjectEmbeddedArtifacts(); -- cgit v1.2.3