Move TimestampGranularityMonitor to CommandEnvironment.
This is one of the last pieces of state in BlazeRuntime that isn't safe to
share across command invocations.
--
MOS_MIGRATED_REVID=117910631
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
index 2d5a9b3..9f35341 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
@@ -397,7 +397,7 @@
FileArtifactValue value;
if (action.getActionType() == MiddlemanType.NORMAL) {
try {
- FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(output, null, tsgm);
+ FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(output, null, null);
artifactData.put(output, fileValue);
value = FileArtifactValue.create(output, fileValue);
} catch (IOException e) {
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
index 1a93420..76b2c11 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
@@ -24,7 +24,6 @@
import com.google.devtools.build.lib.skyframe.ActionLookupValue.ActionLookupKey;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
import com.google.devtools.build.lib.testutil.TestUtils;
-import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
@@ -60,8 +59,6 @@
protected SequentialBuildDriver driver;
protected MemoizingEvaluator evaluator;
protected Path root;
- protected TimestampGranularityMonitor tsgm =
- new TimestampGranularityMonitor(BlazeClock.instance());
/**
* The test action execution function. The Skyframe evaluator's action execution function
@@ -79,7 +76,9 @@
evaluator =
new InMemoryMemoizingEvaluator(
ImmutableMap.<SkyFunctionName, SkyFunction>builder()
- .put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper))
+ .put(SkyFunctions.FILE_STATE,
+ new FileStateFunction(
+ new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper))
.put(SkyFunctions.FILE, new FileFunction(pkgLocator))
.put(SkyFunctions.ARTIFACT,
new ArtifactFunction(allowedMissingInputsPredicate))
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
index 0476e56..aa6dcd9 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
@@ -24,7 +24,6 @@
import com.google.devtools.build.lib.events.NullEventHandler;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
-import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.InMemoryMemoizingEvaluator;
@@ -61,14 +60,14 @@
new AtomicReference<>(new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)));
deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false);
- TimestampGranularityMonitor tsgm = new TimestampGranularityMonitor(BlazeClock.instance());
Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>();
skyFunctions.put(SkyFunctions.PACKAGE_LOOKUP, new PackageLookupFunction(deletedPackages));
skyFunctions.put(SkyFunctions.CONTAINING_PACKAGE_LOOKUP, new ContainingPackageLookupFunction());
skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES,
new BlacklistedPackagePrefixesFunction());
- skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper));
+ skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(
+ new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper));
skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator));
RecordingDifferencer differencer = new RecordingDifferencer();
evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
index ed239f3..22afdaa 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
@@ -12,6 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
+
import static com.google.common.truth.Truth.assertThat;
import static com.google.devtools.build.lib.skyframe.SkyframeExecutor.DEFAULT_THREAD_COUNT;
import static org.junit.Assert.assertArrayEquals;
@@ -42,7 +43,6 @@
import com.google.devtools.build.lib.testutil.ManualClock;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
import com.google.devtools.build.lib.testutil.TestUtils;
-import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
@@ -96,17 +96,15 @@
private Path pkgRoot;
private Path outputBase;
private PathPackageLocator pkgLocator;
- private TimestampGranularityMonitor tsgm;
private boolean fastMd5;
private ManualClock manualClock;
private RecordingDifferencer differencer;
@Before
- public final void createMonitor() throws Exception {
+ public final void createFsAndRoot() throws Exception {
fastMd5 = true;
manualClock = new ManualClock();
createFsAndRoot(new CustomInMemoryFs(manualClock));
- tsgm = new TimestampGranularityMonitor(BlazeClock.instance());
}
private void createFsAndRoot(CustomInMemoryFs fs) throws IOException {
@@ -129,7 +127,8 @@
MemoizingEvaluator evaluator =
new InMemoryMemoizingEvaluator(
ImmutableMap.<SkyFunctionName, SkyFunction>builder()
- .put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper))
+ .put(SkyFunctions.FILE_STATE, new FileStateFunction(
+ new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper))
.put(
SkyFunctions.FILE_SYMLINK_CYCLE_UNIQUENESS,
new FileSymlinkCycleUniquenessFunction())
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
index 174709b..da88d1f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
@@ -36,7 +36,6 @@
import com.google.devtools.build.lib.packages.FilesetEntry.SymlinkBehavior;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
-import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
@@ -72,8 +71,6 @@
/** Tests for {@link FilesetEntryFunction}. */
@RunWith(JUnit4.class)
public final class FilesetEntryFunctionTest extends FoundationTestCase {
-
- private TimestampGranularityMonitor tsgm = new TimestampGranularityMonitor(BlazeClock.instance());
private MemoizingEvaluator evaluator;
private SequentialBuildDriver driver;
private RecordingDifferencer differencer;
@@ -89,7 +86,8 @@
Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>();
- skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper));
+ skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(
+ new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper));
skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator));
skyFunctions.put(SkyFunctions.DIRECTORY_LISTING, new DirectoryListingFunction());
skyFunctions.put(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
index 5f46eed..e9f4cf8 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
@@ -23,7 +23,6 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
import com.google.common.util.concurrent.Runnables;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
@@ -41,7 +40,6 @@
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.BasicFilesystemDirtinessChecker;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
-import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.BatchStat;
@@ -94,7 +92,6 @@
private SequentialBuildDriver driver;
private MockFileSystem fs;
private Path pkgRoot;
- private TimestampGranularityMonitor tsgm;
@Before
public final void setUp() throws Exception {
@@ -105,11 +102,11 @@
FileSystemUtils.createDirectoryAndParents(pkgRoot);
FileSystemUtils.createEmptyFile(pkgRoot.getRelative("WORKSPACE"));
- tsgm = new TimestampGranularityMonitor(BlazeClock.instance());
AtomicReference<PathPackageLocator> pkgLocator = new AtomicReference<>(new PathPackageLocator(
fs.getPath("/output_base"), ImmutableList.of(pkgRoot)));
ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false);
- skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper));
+ skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(
+ new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper));
skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator));
skyFunctions.put(
SkyFunctions.FILE_SYMLINK_CYCLE_UNIQUENESS, new FileSymlinkCycleUniquenessFunction());
@@ -137,13 +134,13 @@
@Test
public void testEmpty() throws Exception {
- FilesystemValueChecker checker = new FilesystemValueChecker(tsgm, null);
+ FilesystemValueChecker checker = new FilesystemValueChecker(null, null);
assertEmptyDiff(getDirtyFilesystemKeys(evaluator, checker));
}
@Test
public void testSimple() throws Exception {
- FilesystemValueChecker checker = new FilesystemValueChecker(tsgm, null);
+ FilesystemValueChecker checker = new FilesystemValueChecker(null, null);
Path path = fs.getPath("/foo");
FileSystemUtils.createEmptyFile(path);
@@ -187,7 +184,7 @@
*/
@Test
public void testDirtySymlink() throws Exception {
- FilesystemValueChecker checker = new FilesystemValueChecker(tsgm, null);
+ FilesystemValueChecker checker = new FilesystemValueChecker(null, null);
Path path = fs.getPath("/foo");
FileSystemUtils.writeContentAsLatin1(path, "foo contents");
@@ -259,7 +256,7 @@
@Test
public void testExplicitFiles() throws Exception {
- FilesystemValueChecker checker = new FilesystemValueChecker(tsgm, null);
+ FilesystemValueChecker checker = new FilesystemValueChecker(null, null);
Path path1 = fs.getPath("/foo1");
Path path2 = fs.getPath("/foo2");
@@ -312,7 +309,7 @@
assertTrue(result.hasError());
fs.readlinkThrowsIoException = false;
- FilesystemValueChecker checker = new FilesystemValueChecker(tsgm, null);
+ FilesystemValueChecker checker = new FilesystemValueChecker(null, null);
Diff diff = getDirtyFilesystemKeys(evaluator, checker);
assertThat(diff.changedKeysWithoutNewValues()).isEmpty();
assertThat(diff.changedKeysWithNewValues()).isEmpty();
@@ -336,7 +333,7 @@
NullEventHandler.INSTANCE);
assertTrue(result.hasError());
- FilesystemValueChecker checker = new FilesystemValueChecker(tsgm, null);
+ FilesystemValueChecker checker = new FilesystemValueChecker(null, null);
Diff diff = getDirtyFilesystemKeys(evaluator, checker);
assertThat(diff.changedKeysWithoutNewValues()).isEmpty();
assertThat(diff.changedKeysWithNewValues()).isEmpty();
@@ -363,28 +360,27 @@
driver
.evaluate(ImmutableList.<SkyKey>of(), false, 1, NullEventHandler.INSTANCE)
.hasError());
- assertThat(new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ assertThat(new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter, ModifiedFileSet.EVERYTHING_MODIFIED)).isEmpty();
FileSystemUtils.writeContentAsLatin1(out1.getPath(), "goodbye");
- assertEquals(
- ActionExecutionValue.key(action1),
- Iterables.getOnlyElement(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
- batchStatter, ModifiedFileSet.EVERYTHING_MODIFIED)));
- assertEquals(
- ActionExecutionValue.key(action1),
- Iterables.getOnlyElement(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
- batchStatter,
- new ModifiedFileSet.Builder().modify(out1.getExecPath()).build())));
assertThat(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ new FilesystemValueChecker(null, null).getDirtyActionValues(
+ evaluator.getValues(), batchStatter, ModifiedFileSet.EVERYTHING_MODIFIED))
+ .containsExactly(ActionExecutionValue.key(action1));
+ assertThat(
+ new FilesystemValueChecker(null, null).getDirtyActionValues(
+ evaluator.getValues(),
+ batchStatter,
+ new ModifiedFileSet.Builder().modify(out1.getExecPath()).build()))
+ .containsExactly(ActionExecutionValue.key(action1));
+ assertThat(
+ new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter,
new ModifiedFileSet.Builder().modify(
out1.getExecPath().getParentDirectory()).build())).isEmpty();
assertThat(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter, ModifiedFileSet.NOTHING_MODIFIED)).isEmpty();
}
@@ -439,25 +435,25 @@
driver
.evaluate(ImmutableList.<SkyKey>of(), false, 1, NullEventHandler.INSTANCE)
.hasError());
- assertThat(new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ assertThat(new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter, ModifiedFileSet.EVERYTHING_MODIFIED)).isEmpty();
// Touching the TreeArtifact directory should have no effect
FileSystemUtils.touchFile(out1.getPath());
assertThat(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter, ModifiedFileSet.EVERYTHING_MODIFIED)).isEmpty();
// Neither should touching a subdirectory.
FileSystemUtils.touchFile(out2.getPath().getChild("subdir"));
assertThat(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter, ModifiedFileSet.EVERYTHING_MODIFIED)).isEmpty();
/* **** Tests for directories **** */
// Removing a directory (even if empty) should have an effect
outEmpty.getPath().delete();
- assertThat(new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ assertThat(new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter,
new ModifiedFileSet.Builder().modify(outEmpty.getExecPath()).build()))
.containsExactly(ActionExecutionValue.key(actionEmpty));
@@ -465,7 +461,7 @@
Path dummyEmptyDir = fs.getPath("/bin").getRelative("symlink");
FileSystemUtils.createDirectoryAndParents(dummyEmptyDir);
FileSystemUtils.ensureSymbolicLink(outEmpty.getPath(), dummyEmptyDir);
- assertThat(new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ assertThat(new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter,
new ModifiedFileSet.Builder().modify(outEmpty.getExecPath()).build()))
.containsExactly(ActionExecutionValue.key(actionEmpty));
@@ -480,12 +476,12 @@
// Test that file contents matter. This is covered by existing tests already,
// so it's just a sanity check.
FileSystemUtils.writeContentAsLatin1(file11.getPath(), "goodbye");
- assertEquals(
- ActionExecutionValue.key(action1),
- Iterables.getOnlyElement(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
- batchStatter,
- new ModifiedFileSet.Builder().modify(file11.getExecPath()).build())));
+ assertThat(
+ new FilesystemValueChecker(null, null).getDirtyActionValues(
+ evaluator.getValues(),
+ batchStatter,
+ new ModifiedFileSet.Builder().modify(file11.getExecPath()).build()))
+ .containsExactly(ActionExecutionValue.key(action1));
// Test that directory contents (and nested contents) matter
ArtifactFile out1new = artifactFile(out1, "julius/caesar");
@@ -497,12 +493,12 @@
// so does removing
file21.getPath().delete();
// now, let's test our changes are actually visible
- assertThat(new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ assertThat(new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter, ModifiedFileSet.EVERYTHING_MODIFIED))
.containsExactly(ActionExecutionValue.key(action1), ActionExecutionValue.key(action2),
ActionExecutionValue.key(actionEmpty));
assertThat(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter,
new ModifiedFileSet.Builder()
.modify(file21.getExecPath())
@@ -514,7 +510,7 @@
// We add a test for NOTHING_MODIFIED, because FileSystemValueChecker doesn't
// pay attention to file sets for TreeArtifact directory listings.
assertThat(
- new FilesystemValueChecker(tsgm, null).getDirtyActionValues(evaluator.getValues(),
+ new FilesystemValueChecker(null, null).getDirtyActionValues(evaluator.getValues(),
batchStatter, ModifiedFileSet.NOTHING_MODIFIED)).isEmpty();
}
@@ -628,7 +624,7 @@
FileStatusWithDigest stat =
forceDigest ? statWithDigest(path, path.statIfFound(Symlinks.NOFOLLOW)) : null;
artifactData.put(output,
- ActionMetadataHandler.fileValueFromArtifactFile(output, stat, tsgm));
+ ActionMetadataHandler.fileValueFromArtifactFile(output, stat, null));
} catch (IOException e) {
throw new IllegalStateException(e);
}
@@ -662,7 +658,7 @@
dirDatum = new HashMap<>();
directoryData.put(output.getParent(), dirDatum);
}
- FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(output, null, tsgm);
+ FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(output, null, null);
// Always test with digests. TreeArtifact checking behavior doesn't depend on the
// presence/absence of digests. FileValue checking w/o digests is already tested.
byte[] digest = DigestUtils.getDigestOrFail(output.getPath(), 1);
@@ -695,7 +691,7 @@
ImmutableList.of(FileValue.key(RootedPath.toRootedPath(pkgRoot, new PathFragment("foo"))));
driver.evaluate(
values, false, SkyframeExecutor.DEFAULT_THREAD_COUNT, NullEventHandler.INSTANCE);
- FilesystemValueChecker checker = new FilesystemValueChecker(tsgm, null);
+ FilesystemValueChecker checker = new FilesystemValueChecker(null, null);
assertEmptyDiff(getDirtyFilesystemKeys(evaluator, checker));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
index 8829e77..95bf419 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
@@ -31,7 +31,6 @@
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.GlobValue.InvalidGlobPatternException;
import com.google.devtools.build.lib.testutil.ManualClock;
-import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.FileStatus;
@@ -94,7 +93,6 @@
private Path outputBase;
private Path pkgPath;
private AtomicReference<PathPackageLocator> pkgLocator;
- private TimestampGranularityMonitor tsgm;
private static final PackageIdentifier PKG_ID = PackageIdentifier.createInMainRepo("pkg");
@@ -109,7 +107,6 @@
pkgLocator =
new AtomicReference<>(
new PathPackageLocator(outputBase, ImmutableList.of(writableRoot, root)));
- tsgm = new TimestampGranularityMonitor(BlazeClock.instance());
differencer = new RecordingDifferencer();
evaluator = new InMemoryMemoizingEvaluator(createFunctionMap(), differencer);
@@ -139,7 +136,7 @@
skyFunctions.put(
SkyFunctions.FILE_STATE,
new FileStateFunction(
- new TimestampGranularityMonitor(BlazeClock.instance()), externalFilesHelper));
+ new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper));
skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator));
return skyFunctions;
}
@@ -562,7 +559,7 @@
// Our custom filesystem says "pkgPath/BUILD" exists but "pkgPath" does not exist.
fs.stubStat(pkgPath, null);
RootedPath pkgRootedPath = RootedPath.toRootedPath(root, pkgPath);
- FileStateValue pkgDirFileStateValue = FileStateValue.create(pkgRootedPath, tsgm);
+ FileStateValue pkgDirFileStateValue = FileStateValue.create(pkgRootedPath, null);
FileValue pkgDirValue =
FileValue.value(pkgRootedPath, pkgDirFileStateValue, pkgRootedPath, pkgDirFileStateValue);
differencer.inject(ImmutableMap.of(FileValue.key(pkgRootedPath), pkgDirValue));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
index 9178fd5..0ca5b31 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
@@ -35,6 +35,8 @@
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils;
import com.google.devtools.build.lib.testutil.ManualClock;
+import com.google.devtools.build.lib.util.BlazeClock;
+import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.Dirent;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystem;
@@ -71,6 +73,13 @@
private CustomInMemoryFs fs = new CustomInMemoryFs(new ManualClock());
+ private void preparePackageLoading(Path... roots) {
+ getSkyframeExecutor().preparePackageLoading(
+ new PathPackageLocator(outputBase, ImmutableList.copyOf(roots)),
+ ConstantRuleVisibility.PUBLIC, true,
+ 7, "", UUID.randomUUID(), new TimestampGranularityMonitor(BlazeClock.instance()));
+ }
+
@Override
protected Preprocessor.Factory.Supplier getPreprocessorFactorySupplier() {
return new SubincludePreprocessor.FactorySupplier(scratch.getFileSystem());
@@ -97,10 +106,7 @@
scratch.file("pkg/BUILD", "subinclude('//foo:sub')");
scratch.file("foo/sub");
- getSkyframeExecutor().preparePackageLoading(
- new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)),
- ConstantRuleVisibility.PUBLIC, true,
- 7, "", UUID.randomUUID());
+ preparePackageLoading(rootDirectory);
SkyKey pkgLookupKey = PackageLookupValue.key(new PathFragment("foo"));
EvaluationResult<PackageLookupValue> result = SkyframeExecutorTestUtils.evaluate(
@@ -131,10 +137,7 @@
scratch.file("/root2/foo/BUILD");
scratch.file("/root2/foo/sub");
- getSkyframeExecutor().preparePackageLoading(
- new PathPackageLocator(outputBase, ImmutableList.of(root1, root2)),
- ConstantRuleVisibility.PUBLIC, true,
- 7, "", UUID.randomUUID());
+ preparePackageLoading(root1, root2);
SkyKey pkgLookupKey = PackageLookupValue.key(PackageIdentifier.parse("@//foo"));
EvaluationResult<PackageLookupValue> result = SkyframeExecutorTestUtils.evaluate(
@@ -206,8 +209,7 @@
};
fs.stubStat(fooDir, inconsistentParentFileStatus);
RootedPath pkgRootedPath = RootedPath.toRootedPath(pkgRoot, fooDir);
- SkyValue fooDirValue = FileStateValue.create(pkgRootedPath,
- getSkyframeExecutor().getTimestampGranularityMonitorForTesting());
+ SkyValue fooDirValue = FileStateValue.create(pkgRootedPath, tsgm);
differencer.inject(ImmutableMap.of(FileStateValue.key(pkgRootedPath), fooDirValue));
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
String expectedMessage = "/workspace/foo/BUILD exists but its parent path /workspace/foo isn't "
@@ -240,8 +242,7 @@
// has a child directory "baz".
fs.stubStat(bazDir, null);
RootedPath barDirRootedPath = RootedPath.toRootedPath(pkgRoot, barDir);
- FileStateValue barDirFileStateValue = FileStateValue.create(barDirRootedPath,
- getSkyframeExecutor().getTimestampGranularityMonitorForTesting());
+ FileStateValue barDirFileStateValue = FileStateValue.create(barDirRootedPath, tsgm);
FileValue barDirFileValue = FileValue.value(barDirRootedPath, barDirFileStateValue,
barDirRootedPath, barDirFileStateValue);
DirectoryListingValue barDirListing = DirectoryListingValue.value(barDirRootedPath,
@@ -293,10 +294,7 @@
scratch.file("bar/a");
scratch.file("bar/b");
- getSkyframeExecutor().preparePackageLoading(
- new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)),
- ConstantRuleVisibility.PUBLIC, true,
- 7, "", UUID.randomUUID());
+ preparePackageLoading(rootDirectory);
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
validPackage(skyKey);
@@ -315,10 +313,7 @@
scratch.file("baz/b");
scratch.file("baz/c");
- getSkyframeExecutor().preparePackageLoading(
- new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)),
- ConstantRuleVisibility.PUBLIC, true,
- 7, "", UUID.randomUUID());
+ preparePackageLoading(rootDirectory);
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
PackageValue value = validPackage(skyKey);
@@ -345,10 +340,7 @@
"exports_files(['a'])");
scratch.file("baz/a");
- getSkyframeExecutor().preparePackageLoading(
- new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)),
- ConstantRuleVisibility.PUBLIC, true,
- 7, "", UUID.randomUUID());
+ preparePackageLoading(rootDirectory);
SkyKey fooKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
PackageValue fooValue = validPackage(fooKey);
@@ -376,10 +368,7 @@
scratch.file("qux/ext.bzl",
"c = 1");
- getSkyframeExecutor().preparePackageLoading(
- new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)),
- ConstantRuleVisibility.PUBLIC, true,
- 7, "", UUID.randomUUID());
+ preparePackageLoading(rootDirectory);
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
PackageValue value = validPackage(skyKey);
@@ -549,10 +538,7 @@
scratch.file("foo/existing.txt");
FileSystemUtils.ensureSymbolicLink(packageDirPath.getChild("dangling.txt"), "nope");
- getSkyframeExecutor().preparePackageLoading(
- new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)),
- ConstantRuleVisibility.PUBLIC, true,
- 7, "", UUID.randomUUID());
+ preparePackageLoading(rootDirectory);
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
PackageValue value = validPackage(skyKey);
@@ -605,10 +591,7 @@
"[sh_library(name = x + '-matched') for x in glob(['**'], exclude_directories = 0)]");
scratch.file("foo/bar");
- getSkyframeExecutor().preparePackageLoading(
- new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)),
- ConstantRuleVisibility.PUBLIC, true,
- 7, "", UUID.randomUUID());
+ preparePackageLoading(rootDirectory);
SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
PackageValue value = validPackage(skyKey);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
index 3452728..07edc60 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
@@ -32,7 +32,6 @@
import com.google.devtools.build.lib.skyframe.PackageLookupValue.ErrorReason;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
-import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -74,7 +73,6 @@
new PathPackageLocator(outputBase, ImmutableList.of(emptyPackagePath, rootDirectory)));
deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of());
ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false);
- TimestampGranularityMonitor tsgm = new TimestampGranularityMonitor(BlazeClock.instance());
BlazeDirectories directories = new BlazeDirectories(rootDirectory, outputBase, rootDirectory);
Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>();
@@ -83,7 +81,8 @@
skyFunctions.put(
SkyFunctions.PACKAGE,
new PackageFunction(null, null, null, null, null, null, null));
- skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper));
+ skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(
+ new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper));
skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator));
skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES,
new BlacklistedPackagePrefixesFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
index 5e2ebfd..507e93a 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
@@ -38,7 +38,6 @@
import com.google.devtools.build.lib.skyframe.RecursiveFilesystemTraversalValue.TraversalRequest;
import com.google.devtools.build.lib.testutil.FoundationTestCase;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
-import com.google.devtools.build.lib.util.BlazeClock;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.Path;
@@ -74,9 +73,6 @@
/** Tests for {@link RecursiveFilesystemTraversalFunction}. */
@RunWith(JUnit4.class)
public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTestCase {
-
- private final TimestampGranularityMonitor tsgm =
- new TimestampGranularityMonitor(BlazeClock.instance());
private RecordingEvaluationProgressReceiver progressReceiver;
private MemoizingEvaluator evaluator;
private SequentialBuildDriver driver;
@@ -93,7 +89,8 @@
Map<SkyFunctionName, SkyFunction> skyFunctions = new HashMap<>();
- skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper));
+ skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction(
+ new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper));
skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator));
skyFunctions.put(SkyFunctions.DIRECTORY_LISTING, new DirectoryListingFunction());
skyFunctions.put(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
index d8c63fe..d1e36bea 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTest.java
@@ -24,9 +24,10 @@
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
-import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.util.SubincludePreprocessor;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
+import com.google.devtools.build.lib.util.BlazeClock;
+import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.FileStatus;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.ModifiedFileSet;
@@ -43,12 +44,6 @@
@RunWith(JUnit4.class)
public class SkyframeLabelVisitorTest extends SkyframeLabelVisitorTestCase {
-
- @Override
- public PackageFactory.EnvironmentExtension getPackageEnvironmentExtension() {
- return new PackageFactory.EmptyEnvironmentExtension();
- }
-
@Test
public void testLabelVisitorDetectsMissingPackages() throws Exception {
reporter.removeHandler(failFastHandler); // expect errors
@@ -414,7 +409,8 @@
true,
7,
ruleClassProvider.getDefaultsPackageContent(),
- UUID.randomUUID());
+ UUID.randomUUID(),
+ new TimestampGranularityMonitor(BlazeClock.instance()));
this.visitor = getSkyframeExecutor().pkgLoader();
scratch.file("pkg/BUILD", "sh_library(name = 'x', deps = ['z'])", "sh_library(name = 'z')");
assertLabelsVisited(
@@ -457,7 +453,8 @@
true,
7,
ruleClassProvider.getDefaultsPackageContent(),
- UUID.randomUUID());
+ UUID.randomUUID(),
+ new TimestampGranularityMonitor(BlazeClock.instance()));
this.visitor = getSkyframeExecutor().pkgLoader();
scratch.file("a/BUILD", "subinclude('//b:c/d/foo')");
scratch.file("b/BUILD", "exports_files(['c/d/foo'])");
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java
index 1395159..1568cc1 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeLabelVisitorTestCase.java
@@ -20,7 +20,6 @@
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -33,7 +32,7 @@
import com.google.devtools.build.lib.events.EventKind;
import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
import com.google.devtools.build.lib.packages.NoSuchThingException;
-import com.google.devtools.build.lib.packages.PackageFactory;
+import com.google.devtools.build.lib.packages.Preprocessor;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase;
import com.google.devtools.build.lib.packages.util.PreprocessorUtils;
@@ -71,7 +70,10 @@
protected PreprocessorUtils.MutableFactorySupplier preprocessorFactorySupplier =
new PreprocessorUtils.MutableFactorySupplier(null);
- abstract public PackageFactory.EnvironmentExtension getPackageEnvironmentExtension();
+ @Override
+ protected Preprocessor.Factory.Supplier getPreprocessorFactorySupplier() {
+ return preprocessorFactorySupplier;
+ }
@Override
protected FileSystem createFileSystem() {
@@ -279,9 +281,7 @@
@Before
public final void initializeVisitor() throws Exception {
- skyframeExecutor = super.createSkyframeExecutor(
- ImmutableList.of(getPackageEnvironmentExtension()), preprocessorFactorySupplier,
- ConstantRuleVisibility.PRIVATE, ruleClassProvider.getDefaultsPackageContent());
+ setUpSkyframe(ConstantRuleVisibility.PRIVATE, ruleClassProvider.getDefaultsPackageContent());
this.visitor = skyframeExecutor.pkgLoader();
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java
index 4cdc8be..089d6a4 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkFileContentHashTests.java
@@ -24,6 +24,8 @@
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils;
+import com.google.devtools.build.lib.util.BlazeClock;
+import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.skyframe.EvaluationResult;
import com.google.devtools.build.skyframe.SkyKey;
@@ -161,7 +163,8 @@
true,
7,
"",
- UUID.randomUUID());
+ UUID.randomUUID(),
+ new TimestampGranularityMonitor(BlazeClock.instance()));
SkyKey pkgLookupKey = PackageValue.key(PackageIdentifier.parse("@//" + pkg));
EvaluationResult<PackageValue> result =
SkyframeExecutorTestUtils.evaluate(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunctionTest.java
index 8689062..838302f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunctionTest.java
@@ -24,6 +24,8 @@
import com.google.devtools.build.lib.packages.ConstantRuleVisibility;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.util.SkyframeExecutorTestUtils;
+import com.google.devtools.build.lib.util.BlazeClock;
+import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.ErrorInfo;
import com.google.devtools.build.skyframe.EvaluationResult;
@@ -52,7 +54,8 @@
true,
7,
"",
- UUID.randomUUID());
+ UUID.randomUUID(),
+ new TimestampGranularityMonitor(BlazeClock.instance()));
}
@Test
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index 9ddfcb5..e4e15ef 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -138,6 +138,7 @@
@Nullable EvaluationProgressReceiver evaluationProgressReceiver) {
AtomicReference<PathPackageLocator> pkgLocator =
new AtomicReference<>(new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)));
+ AtomicReference<TimestampGranularityMonitor> tsgmRef = new AtomicReference<>(tsgm);
ExternalFilesHelper externalFilesHelper = new ExternalFilesHelper(pkgLocator, false);
differencer = new RecordingDifferencer();
@@ -153,14 +154,14 @@
final InMemoryMemoizingEvaluator evaluator =
new InMemoryMemoizingEvaluator(
ImmutableMap.<SkyFunctionName, SkyFunction>builder()
- .put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgm, externalFilesHelper))
+ .put(SkyFunctions.FILE_STATE, new FileStateFunction(tsgmRef, externalFilesHelper))
.put(SkyFunctions.FILE, new FileFunction(pkgLocator))
.put(
SkyFunctions.ARTIFACT,
new ArtifactFunction(Predicates.<PathFragment>alwaysFalse()))
.put(
SkyFunctions.ACTION_EXECUTION,
- new ActionExecutionFunction(skyframeActionExecutor, tsgm))
+ new ActionExecutionFunction(skyframeActionExecutor, tsgmRef))
.put(
SkyFunctions.PACKAGE,
new PackageFunction(null, null, null, null, null, null, null))
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
index a57576c..54a1418 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactMetadataTest.java
@@ -227,7 +227,7 @@
try {
ArtifactFile suboutput = ActionInputHelper.artifactFile(output, subpath);
FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(
- suboutput, null, tsgm);
+ suboutput, null, null);
fileData.put(suboutput, fileValue);
// Ignore FileValue digests--correctness of these digests is not part of this tests.
byte[] digest = DigestUtils.getDigestOrFail(suboutput.getPath(), 1);