aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Nathan Harmata <nharmata@google.com>2015-08-27 16:11:07 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-08-28 09:20:56 +0000
commit9b38b2cdebc2bde00e85fc4ed8ed7bef400f6c8c (patch)
tree895d969e57b1b59029cd8eac5fde3e871c58a352
parent41d19f0700141fccb526e9f0972d901160b61bf6 (diff)
Be resilient to a non-decreasing clock in BlazeRuntime#recordLastExecutionTime. Also add @Nullable annotations as appropriate.
Fixes #394. -- MOS_MIGRATED_REVID=101685096
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeRuntime.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/FilesystemValueChecker.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java2
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<ConfiguredTarget> builtTargets,
boolean explain,
- Range<Long> lastExecutionTimeRange)
+ @Nullable Range<Long> 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<Long> 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<Long> lastExecutionTimeRange;
private final Supplier<Map<SkyKey, SkyValue>> valuesSupplier;
private AtomicInteger modifiedOutputFilesCounter = new AtomicInteger(0);
private AtomicInteger modifiedOutputFilesIntraBuildCounter = new AtomicInteger(0);
FilesystemValueChecker(Supplier<Map<SkyKey, SkyValue>> valuesSupplier,
- TimestampGranularityMonitor tsgm, Range<Long> lastExecutionTimeRange) {
+ TimestampGranularityMonitor tsgm, @Nullable Range<Long> lastExecutionTimeRange) {
this.valuesSupplier = valuesSupplier;
this.tsgm = tsgm;
this.lastExecutionTimeRange = lastExecutionTimeRange;
}
FilesystemValueChecker(final MemoizingEvaluator evaluator, TimestampGranularityMonitor tsgm,
- Range<Long> lastExecutionTimeRange) {
+ @Nullable Range<Long> 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<Long> lastExecutionTimeRange) throws AbruptExitException,
+ @Nullable Range<Long> lastExecutionTimeRange) throws AbruptExitException,
InterruptedException {
maybeInjectEmbeddedArtifacts();