diff options
author | 2016-03-23 09:18:13 +0000 | |
---|---|---|
committer | 2016-03-23 12:21:08 +0000 | |
commit | c73051c6baad0aaaf1fdf34d5ad19602b8df628a (patch) | |
tree | 29bfc153be8f0cc80c99bf29cff264c97cf0a70d /src/main/java/com/google/devtools | |
parent | 8a5f5c7a9174222c13f5546e3c467309e19534d7 (diff) |
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
Diffstat (limited to 'src/main/java/com/google/devtools')
11 files changed, 59 insertions, 76 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java index 76b182af4f..422e289f83 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandDispatcher.java @@ -209,16 +209,10 @@ public class BlazeCommandDispatcher { */ int exec(List<String> args, OutErr outErr, long firstContactTime) throws ShutdownBlazeServerException { - // Record the start time for the profiler and the timestamp granularity monitor. Do not put - // anything before this! + // Record the start time for the profiler. Do not put anything before this! long execStartTimeNanos = runtime.getClock().nanoTime(); - // Record the command's starting time again, for use by - // TimestampGranularityMonitor.waitForTimestampGranularity(). - // This should be done as close as possible to the start of - // the command's execution - that's why we do this separately, - // rather than in runtime.beforeCommand(). - runtime.getTimestampGranularityMonitor().setCommandStartTime(); + // The initCommand call also records the start time for the timestamp granularity monitor. CommandEnvironment env = runtime.initCommand(); // Record the command's starting time for use by the commands themselves. env.recordCommandStartTime(firstContactTime); @@ -400,7 +394,7 @@ public class BlazeCommandDispatcher { reporter.removeHandler(ansiAllowingHandler); releaseHandler(ansiAllowingHandler); } - runtime.getTimestampGranularityMonitor().waitForTimestampGranularity(outErr); + env.getTimestampGranularityMonitor().waitForTimestampGranularity(outErr); } } 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 e1e82f89ee..c28b697c57 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 @@ -92,7 +92,6 @@ import com.google.devtools.build.lib.util.OsUtils; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.util.ThreadUtils; import com.google.devtools.build.lib.util.io.OutErr; -import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.FileSystem; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.JavaIoFileSystem; @@ -159,7 +158,6 @@ public final class BlazeRuntime { private final PackageFactory packageFactory; private final ConfigurationFactory configurationFactory; private final ConfiguredRuleClassProvider ruleClassProvider; - private final TimestampGranularityMonitor timestampGranularityMonitor; private final AtomicInteger storedExitCode = new AtomicInteger(); @@ -190,7 +188,6 @@ public final class BlazeRuntime { PackageFactory pkgFactory, ConfiguredRuleClassProvider ruleClassProvider, ConfigurationFactory configurationFactory, Clock clock, OptionsProvider startupOptionsProvider, Iterable<BlazeModule> blazeModules, - TimestampGranularityMonitor timestampGranularityMonitor, SubscriberExceptionHandler eventBusExceptionHandler, BinTools binTools, ProjectFile.Provider projectFileProvider, InvocationPolicy invocationPolicy, Iterable<BlazeCommand> commands) { @@ -207,7 +204,6 @@ public final class BlazeRuntime { this.ruleClassProvider = ruleClassProvider; this.configurationFactory = configurationFactory; this.clock = clock; - this.timestampGranularityMonitor = Preconditions.checkNotNull(timestampGranularityMonitor); this.startupOptionsProvider = startupOptionsProvider; this.eventBusExceptionHandler = eventBusExceptionHandler; this.queryEnvironmentFactory = queryEnvironmentFactory; @@ -578,15 +574,6 @@ public final class BlazeRuntime { } /** - * Returns the TimestampGranularityMonitor. The same monitor object is used - * across multiple Blaze commands, but it doesn't hold any persistent state - * across different commands. - */ - public TimestampGranularityMonitor getTimestampGranularityMonitor() { - return timestampGranularityMonitor; - } - - /** * Returns path to the cache directory. Path must be inside output base to * ensure that users can run concurrent instances of blaze in different * clients without attempting to concurrently write to the same action cache @@ -1342,7 +1329,6 @@ public final class BlazeRuntime { UUID instanceId = (this.instanceId == null) ? UUID.randomUUID() : this.instanceId; Preconditions.checkNotNull(clock); - TimestampGranularityMonitor timestampMonitor = new TimestampGranularityMonitor(clock); Preprocessor.Factory.Supplier preprocessorFactorySupplier = null; SkyframeExecutorFactory skyframeExecutorFactory = null; @@ -1466,7 +1452,6 @@ public final class BlazeRuntime { SkyframeExecutor skyframeExecutor = skyframeExecutorFactory.create( pkgFactory, - timestampMonitor, directories, binTools, workspaceStatusActionFactory, @@ -1499,8 +1484,7 @@ public final class BlazeRuntime { return new BlazeRuntime(directories, workspaceStatusActionFactory, skyframeExecutor, queryEnvironmentFactory, pkgFactory, ruleClassProvider, configurationFactory, clock, startupOptionsProvider, ImmutableList.copyOf(blazeModules), - timestampMonitor, eventBusExceptionHandler, binTools, projectFileProvider, - invocationPolicy, commands); + eventBusExceptionHandler, binTools, projectFileProvider, invocationPolicy, commands); } public Builder setBinTools(BinTools binTools) { diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java index 952b71e082..f0dc73c00e 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java @@ -46,6 +46,7 @@ import com.google.devtools.build.lib.skyframe.SkyframeExecutor; import com.google.devtools.build.lib.util.AbruptExitException; import com.google.devtools.build.lib.util.ExitCode; import com.google.devtools.build.lib.util.Preconditions; +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; import com.google.devtools.build.lib.vfs.PathFragment; @@ -77,6 +78,7 @@ public final class CommandEnvironment { private final EventBus eventBus; private final BlazeModule.ModuleEnvironment blazeModuleEnvironment; private final Map<String, String> clientEnv = new HashMap<>(); + private final TimestampGranularityMonitor timestampGranularityMonitor; private final BuildView view; @@ -110,6 +112,12 @@ public final class CommandEnvironment { this.reporter = new Reporter(); this.eventBus = eventBus; this.blazeModuleEnvironment = new BlazeModuleEnvironment(); + this.timestampGranularityMonitor = new TimestampGranularityMonitor(runtime.getClock()); + // Record the command's starting time again, for use by + // TimestampGranularityMonitor.waitForTimestampGranularity(). + // This should be done as close as possible to the start of + // the command's execution. + timestampGranularityMonitor.setCommandStartTime(); this.view = new BuildView(runtime.getDirectories(), runtime.getRuleClassProvider(), runtime.getSkyframeExecutor(), runtime.getCoverageReportActionFactory()); @@ -161,6 +169,10 @@ public final class CommandEnvironment { } } + public TimestampGranularityMonitor getTimestampGranularityMonitor() { + return timestampGranularityMonitor; + } + public PackageManager getPackageManager() { return runtime.getPackageManager(); } @@ -297,7 +309,8 @@ public final class CommandEnvironment { skyframeExecutor.resetEvaluator(); } skyframeExecutor.sync(reporter, packageCacheOptions, runtime.getOutputBase(), - getWorkingDirectory(), defaultsPackageContents, commandId); + getWorkingDirectory(), defaultsPackageContents, commandId, + timestampGranularityMonitor); } public void recordLastExecutionTime() { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java index ba4c70aeb3..963fe1dce0 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java @@ -59,6 +59,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Level; import javax.annotation.Nullable; @@ -78,11 +79,11 @@ import javax.annotation.Nullable; */ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver { private final SkyframeActionExecutor skyframeActionExecutor; - private final TimestampGranularityMonitor tsgm; + private final AtomicReference<TimestampGranularityMonitor> tsgm; private ConcurrentMap<Action, ContinuationState> stateMap; public ActionExecutionFunction(SkyframeActionExecutor skyframeActionExecutor, - TimestampGranularityMonitor tsgm) { + AtomicReference<TimestampGranularityMonitor> tsgm) { this.skyframeActionExecutor = skyframeActionExecutor; this.tsgm = tsgm; stateMap = Maps.newConcurrentMap(); @@ -334,7 +335,7 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver } // This may be recreated if we discover inputs. ActionMetadataHandler metadataHandler = new ActionMetadataHandler(state.inputArtifactData, - action.getOutputs(), tsgm); + action.getOutputs(), tsgm.get()); long actionStartTime = System.nanoTime(); // We only need to check the action cache if we haven't done it on a previous run. if (!state.hasCheckedActionCache()) { @@ -376,7 +377,7 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver state.inputArtifactData = inputArtifactData; perActionFileCache = new PerActionFileCache(state.inputArtifactData); metadataHandler = - new ActionMetadataHandler(state.inputArtifactData, action.getOutputs(), tsgm); + new ActionMetadataHandler(state.inputArtifactData, action.getOutputs(), tsgm.get()); } } actionExecutionContext = @@ -414,7 +415,7 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver inputArtifactData.putAll(metadataFoundDuringActionExecution); state.inputArtifactData = inputArtifactData; metadataHandler = - new ActionMetadataHandler(state.inputArtifactData, action.getOutputs(), tsgm); + new ActionMetadataHandler(state.inputArtifactData, action.getOutputs(), tsgm.get()); } } else if (!metadataFoundDuringActionExecution.isEmpty()) { // The action has run and discovered more inputs. This is a bug, probably the result of diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java index 0f2fb63fdc..cf8f6680e7 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java @@ -568,7 +568,7 @@ public class ActionMetadataHandler implements MetadataHandler { @VisibleForTesting static FileValue fileValueFromArtifactFile(ArtifactFile file, - @Nullable FileStatusWithDigest statNoFollow, TimestampGranularityMonitor tsgm) + @Nullable FileStatusWithDigest statNoFollow, @Nullable TimestampGranularityMonitor tsgm) throws IOException { Path path = file.getPath(); RootedPath rootedPath = diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java index 3e1033075c..d77f7e3fc3 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileStateFunction.java @@ -21,6 +21,7 @@ import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import java.io.IOException; +import java.util.concurrent.atomic.AtomicReference; /** * A {@link SkyFunction} for {@link FileStateValue}s. @@ -30,10 +31,10 @@ import java.io.IOException; */ public class FileStateFunction implements SkyFunction { - private final TimestampGranularityMonitor tsgm; + private final AtomicReference<TimestampGranularityMonitor> tsgm; private final ExternalFilesHelper externalFilesHelper; - public FileStateFunction(TimestampGranularityMonitor tsgm, + public FileStateFunction(AtomicReference<TimestampGranularityMonitor> tsgm, ExternalFilesHelper externalFilesHelper) { this.tsgm = tsgm; this.externalFilesHelper = externalFilesHelper; @@ -48,7 +49,7 @@ public class FileStateFunction implements SkyFunction { if (env.valuesMissing()) { return null; } - return FileStateValue.create(rootedPath, tsgm); + return FileStateValue.create(rootedPath, tsgm.get()); } catch (FileOutsidePackageRootsException e) { throw new FileStateFunctionException(e); } catch (IOException e) { 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 833306dd70..63a3800b4f 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 @@ -371,8 +371,7 @@ public class FilesystemValueChecker { FileValue lastKnownData = entry.getValue(); if (shouldCheckFile(knownModifiedOutputFiles, file)) { try { - FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(file, null, - tsgm); + FileValue fileValue = ActionMetadataHandler.fileValueFromArtifactFile(file, null, tsgm); if (!fileValue.equals(lastKnownData)) { updateIntraBuildModifiedCounter(fileValue.exists() ? fileValue.realRootedPath().asPath().getLastModifiedTime() diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java index 3b393a9bac..0a612f89e2 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java @@ -100,7 +100,6 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { private SequencedSkyframeExecutor( EvaluatorSupplier evaluatorSupplier, PackageFactory pkgFactory, - TimestampGranularityMonitor tsgm, BlazeDirectories directories, BinTools binTools, Factory workspaceStatusActionFactory, @@ -114,7 +113,6 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { super( evaluatorSupplier, pkgFactory, - tsgm, directories, binTools, workspaceStatusActionFactory, @@ -130,7 +128,6 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { public static SequencedSkyframeExecutor create( PackageFactory pkgFactory, - TimestampGranularityMonitor tsgm, BlazeDirectories directories, BinTools binTools, Factory workspaceStatusActionFactory, @@ -145,7 +142,6 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { new SequencedSkyframeExecutor( InMemoryMemoizingEvaluator.SUPPLIER, pkgFactory, - tsgm, directories, binTools, workspaceStatusActionFactory, @@ -162,13 +158,12 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { @VisibleForTesting public static SequencedSkyframeExecutor create(PackageFactory pkgFactory, - TimestampGranularityMonitor tsgm, BlazeDirectories directories, BinTools binTools, + BlazeDirectories directories, BinTools binTools, WorkspaceStatusAction.Factory workspaceStatusActionFactory, ImmutableList<BuildInfoFactory> buildInfoFactories, Iterable<? extends DiffAwareness.Factory> diffAwarenessFactories) { return create( pkgFactory, - tsgm, directories, binTools, workspaceStatusActionFactory, @@ -217,11 +212,12 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { @Override public void sync(EventHandler eventHandler, PackageCacheOptions packageCacheOptions, - Path outputBase, Path workingDirectory, String defaultsPackageContents, UUID commandId) + Path outputBase, Path workingDirectory, String defaultsPackageContents, UUID commandId, + TimestampGranularityMonitor tsgm) throws InterruptedException, AbruptExitException { this.valueCacheEvictionLimit = packageCacheOptions.minLoadedPkgCountForCtNodeEviction; super.sync(eventHandler, packageCacheOptions, outputBase, workingDirectory, - defaultsPackageContents, commandId); + defaultsPackageContents, commandId, tsgm); handleDiffs(eventHandler); } @@ -283,6 +279,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { dropConfiguredTargetsNow(eventHandler); lastAnalysisDiscarded = false; } + TimestampGranularityMonitor tsgm = this.tsgm.get(); modifiedFiles = 0; Map<Path, DiffAwarenessManager.ProcessableModifiedFileSet> modifiedFilesByPathEntry = Maps.newHashMap(); @@ -297,8 +294,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { modifiedFilesByPathEntry.put(pathEntry, modifiedFileSet); } } - handleDiffsWithCompleteDiffInformation(modifiedFilesByPathEntry); - handleDiffsWithMissingDiffInformation(eventHandler, pathEntriesWithoutDiffInformation); + handleDiffsWithCompleteDiffInformation(tsgm, modifiedFilesByPathEntry); + handleDiffsWithMissingDiffInformation(eventHandler, tsgm, pathEntriesWithoutDiffInformation); } /** @@ -306,7 +303,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { * diff. Removes entries from the given map as they are processed. All of the files need to be * invalidated, so the map should be empty upon completion of this function. */ - private void handleDiffsWithCompleteDiffInformation( + private void handleDiffsWithCompleteDiffInformation(TimestampGranularityMonitor tsgm, Map<Path, DiffAwarenessManager.ProcessableModifiedFileSet> modifiedFilesByPathEntry) throws InterruptedException { for (Path pathEntry : ImmutableSet.copyOf(modifiedFilesByPathEntry.keySet())) { @@ -315,7 +312,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { ModifiedFileSet modifiedFileSet = processableModifiedFileSet.getModifiedFileSet(); Preconditions.checkState(!modifiedFileSet.treatEverythingAsModified(), pathEntry); handleChangedFiles(ImmutableList.of(pathEntry), - getDiff(modifiedFileSet.modifiedSourceFiles(), pathEntry)); + getDiff(tsgm, modifiedFileSet.modifiedSourceFiles(), pathEntry)); processableModifiedFileSet.markProcessed(); } } @@ -325,6 +322,7 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { * {@link DiffAwareness} said all files may have been modified. */ private void handleDiffsWithMissingDiffInformation(EventHandler eventHandler, + TimestampGranularityMonitor tsgm, Set<Pair<Path, DiffAwarenessManager.ProcessableModifiedFileSet>> pathEntriesWithoutDiffInformation) throws InterruptedException { if (pathEntriesWithoutDiffInformation.isEmpty() @@ -447,12 +445,13 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { dropConfiguredTargetsNow(eventHandler); lastAnalysisDiscarded = false; } + TimestampGranularityMonitor tsgm = this.tsgm.get(); Differencer.Diff diff; if (modifiedFileSet.treatEverythingAsModified()) { diff = new FilesystemValueChecker(tsgm, null).getDirtyKeys(memoizingEvaluator.getValues(), new BasicFilesystemDirtinessChecker()); } else { - diff = getDiff(modifiedFileSet.modifiedSourceFiles(), pathEntry); + diff = getDiff(tsgm, modifiedFileSet.modifiedSourceFiles(), pathEntry); } syscalls.set(newPerBuildSyscallCache(/*concurrencyLevel=*/42)); recordingDiffer.invalidate(diff.changedKeysWithoutNewValues()); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java index 5b6484d57a..3dbeb2ed09 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java @@ -22,7 +22,6 @@ import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory; import com.google.devtools.build.lib.analysis.config.BinTools; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.Preprocessor; -import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; @@ -35,7 +34,6 @@ public class SequencedSkyframeExecutorFactory implements SkyframeExecutorFactory @Override public SkyframeExecutor create( PackageFactory pkgFactory, - TimestampGranularityMonitor tsgm, BlazeDirectories directories, BinTools binTools, Factory workspaceStatusActionFactory, @@ -48,7 +46,6 @@ public class SequencedSkyframeExecutorFactory implements SkyframeExecutorFactory Iterable<SkyValueDirtinessChecker> customDirtinessCheckers) { return SequencedSkyframeExecutor.create( pkgFactory, - tsgm, directories, binTools, workspaceStatusActionFactory, 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 7bcb2e3ac0..c21541185c 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 @@ -215,6 +215,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { protected final AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages = new AtomicReference<>(ImmutableSet.<PackageIdentifier>of()); private final AtomicReference<EventBus> eventBus = new AtomicReference<>(); + protected final AtomicReference<TimestampGranularityMonitor> tsgm = + new AtomicReference<>(); private final ImmutableList<BuildInfoFactory> buildInfoFactories; // Under normal circumstances, the artifact factory persists for the life of a Blaze server, but @@ -233,8 +235,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { private final Preprocessor.Factory.Supplier preprocessorFactorySupplier; private Preprocessor.Factory preprocessorFactory; - protected final TimestampGranularityMonitor tsgm; - private final ResourceManager resourceManager; /** Used to lock evaluator on legacy calls to get existing values. */ @@ -270,7 +270,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { protected SkyframeExecutor( EvaluatorSupplier evaluatorSupplier, PackageFactory pkgFactory, - TimestampGranularityMonitor tsgm, BlazeDirectories directories, BinTools binTools, Factory workspaceStatusActionFactory, @@ -285,7 +284,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { this.evaluatorSupplier = evaluatorSupplier; this.pkgFactory = pkgFactory; this.pkgFactory.setSyscalls(syscalls); - this.tsgm = tsgm; this.workspaceStatusActionFactory = workspaceStatusActionFactory; this.packageManager = new SkyframePackageManager( new SkyframePackageLoader(), new SkyframeTransitivePackageLoader(), @@ -804,8 +802,9 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { || (oldType.equals(Dirent.Type.SYMLINK) && newType.equals(FileStateValue.Type.SYMLINK)); } - protected Differencer.Diff getDiff(Iterable<PathFragment> modifiedSourceFiles, - final Path pathEntry) throws InterruptedException { + protected Differencer.Diff getDiff(TimestampGranularityMonitor tsgm, + Iterable<PathFragment> modifiedSourceFiles, final Path pathEntry) + throws InterruptedException { if (Iterables.isEmpty(modifiedSourceFiles)) { return new ImmutableDiff(ImmutableList.<SkyKey>of(), ImmutableMap.<SkyKey, SkyValue>of()); } @@ -901,10 +900,13 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { @VisibleForTesting // productionVisibility = Visibility.PRIVATE public void preparePackageLoading(PathPackageLocator pkgLocator, RuleVisibility defaultVisibility, boolean showLoadingProgress, int globbingThreads, - String defaultsPackageContents, UUID commandId) { + String defaultsPackageContents, UUID commandId, + TimestampGranularityMonitor tsgm) { Preconditions.checkNotNull(pkgLocator); + Preconditions.checkNotNull(tsgm); setActive(true); + this.tsgm.set(tsgm); maybeInjectPrecomputedValuesForAnalysis(); setCommandId(commandId); setBlacklistedPackagePrefixesFile(getBlacklistedPackagePrefixesFile()); @@ -1358,11 +1360,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { */ public abstract void invalidateTransientErrors(); - @VisibleForTesting - public TimestampGranularityMonitor getTimestampGranularityMonitorForTesting() { - return tsgm; - } - /** Configures a given set of configured targets. */ public EvaluationResult<ActionLookupValue> configureTargets( EventHandler eventHandler, @@ -1592,16 +1589,15 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { public abstract void updateLoadedPackageSet(Set<PackageIdentifier> loadedPackages); public void sync(EventHandler eventHandler, PackageCacheOptions packageCacheOptions, - Path outputBase, Path workingDirectory, String defaultsPackageContents, UUID commandId) - throws InterruptedException, - AbruptExitException{ - + Path outputBase, Path workingDirectory, String defaultsPackageContents, UUID commandId, + TimestampGranularityMonitor tsgm) + throws InterruptedException, AbruptExitException{ preparePackageLoading( createPackageLocator( eventHandler, packageCacheOptions, outputBase, directories.getWorkspace(), workingDirectory), packageCacheOptions.defaultVisibility, packageCacheOptions.showLoadingProgress, - packageCacheOptions.globbingThreads, defaultsPackageContents, commandId); + packageCacheOptions.globbingThreads, defaultsPackageContents, commandId, tsgm); setDeletedPackages(packageCacheOptions.getDeletedPackages()); incrementalBuildMonitor = new SkyframeIncrementalBuildMonitor(); @@ -1643,12 +1639,13 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { } public void prepareExecution(ModifiedFileSet modifiedOutputFiles, - @Nullable Range<Long> lastExecutionTimeRange) throws AbruptExitException, - InterruptedException { + @Nullable Range<Long> lastExecutionTimeRange) + throws AbruptExitException, InterruptedException { maybeInjectEmbeddedArtifacts(); // Detect external modifications in the output tree. - FilesystemValueChecker fsvc = new FilesystemValueChecker(tsgm, lastExecutionTimeRange); + FilesystemValueChecker fsvc = + new FilesystemValueChecker(Preconditions.checkNotNull(tsgm.get()), lastExecutionTimeRange); BatchStat batchStatter = outputService == null ? null : outputService.getBatchStatter(); invalidateDirtyActions(fsvc.getDirtyActionValues(memoizingEvaluator.getValues(), batchStatter, modifiedOutputFiles)); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java index ddfdd237b5..8e3cea4d2e 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java @@ -23,7 +23,6 @@ import com.google.devtools.build.lib.analysis.config.BinTools; import com.google.devtools.build.lib.packages.PackageFactory; import com.google.devtools.build.lib.packages.Preprocessor; import com.google.devtools.build.lib.util.AbruptExitException; -import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; @@ -53,7 +52,6 @@ public interface SkyframeExecutorFactory { */ SkyframeExecutor create( PackageFactory pkgFactory, - TimestampGranularityMonitor tsgm, BlazeDirectories directories, BinTools binTools, Factory workspaceStatusActionFactory, |