/// <summary> /// Same behavior as <see cref="LoadOrReuse"/>, but the file envelopeId is ignored /// </summary> /// <remarks> /// Only available when the factory is constructed with analysis mode on /// </remarks> public IIncrementalSchedulingState LoadOrReuseIgnoringFileEnvelope( PipGraph pipGraph, IConfiguration configuration, PreserveOutputsInfo preserveOutputSalt, string incrementalSchedulingStatePath, SchedulerState schedulerState) { Contract.Assert(m_analysisMode); return(LoadOrReuseInternal(FileEnvelopeId.Invalid, pipGraph, configuration, preserveOutputSalt, incrementalSchedulingStatePath, schedulerState)); }
/// <summary> /// Loads an existing instance of <see cref="IIncrementalSchedulingState"/> from a given file or reuse it from a given <see cref="SchedulerState"/>. /// </summary> public IIncrementalSchedulingState LoadOrReuse( FileEnvelopeId atomicSaveToken, PipGraph pipGraph, IConfiguration configuration, PreserveOutputsInfo preserveOutputSalt, string incrementalSchedulingStatePath, SchedulerState schedulerState) { Contract.Requires(atomicSaveToken.IsValid); return(LoadOrReuseInternal(atomicSaveToken, pipGraph, configuration, preserveOutputSalt, incrementalSchedulingStatePath, schedulerState)); }
private GraphAgnosticIncrementalSchedulingStateId( string machineName, string substSource, string substTarget, PreserveOutputsInfo preserveOutputSalt) { Contract.Requires(machineName != null); m_machineName = machineName; m_substSource = substSource; m_substTarget = substTarget; m_preserveOutputSalt = preserveOutputSalt; m_hashCode = ComputeHashCode(); }
/// <summary> /// Deserializes into <see cref="GraphAgnosticIncrementalSchedulingStateId" />. /// </summary> public static GraphAgnosticIncrementalSchedulingStateId Deserialize(BuildXLReader reader) { Contract.Requires(reader != null); var machineName = reader.ReadString(); var substSource = reader.ReadString(); var substTarget = reader.ReadString(); var preserveOutputSalt = new PreserveOutputsInfo(reader); return(new GraphAgnosticIncrementalSchedulingStateId( machineName, substSource, substTarget, preserveOutputSalt)); }
/// <summary> /// Creates a new instance of <see cref="IIncrementalSchedulingState"/>. /// </summary> public IIncrementalSchedulingState CreateNew( FileEnvelopeId atomicSaveToken, PipGraph pipGraph, IConfiguration configuration, PreserveOutputsInfo preserveOutputSalt) { Contract.Requires(atomicSaveToken.IsValid); Contract.Requires(pipGraph != null); Contract.Requires(configuration != null); return(GraphAgnosticIncrementalSchedulingState.CreateNew( m_loggingContext, atomicSaveToken, pipGraph, configuration, preserveOutputSalt, m_tempDirectoryCleaner)); }
/// <summary> /// Class constructor /// </summary> public PipExecutionState( IConfiguration configuration, LoggingContext loggingContext, PipTwoPhaseCache cache, FileAccessWhitelist fileAccessWhitelist, IDirectoryMembershipFingerprinter directoryMembershipFingerprinter, SemanticPathExpander pathExpander, IExecutionLogTarget executionLog, DirectoryMembershipFingerprinterRuleSet directoryMembershipFinterprinterRuleSet, FileContentManager fileContentManager, IUnsafeSandboxConfiguration unsafeConfiguration, PreserveOutputsInfo preserveOutputsSalt, FileSystemView fileSystemView, bool lazyDeletionOfSharedOpaqueOutputsEnabled, ServiceManager serviceManager = null) { Contract.Requires(fileContentManager != null); Contract.Requires(directoryMembershipFingerprinter != null); Contract.Requires(pathExpander != null); Cache = cache; m_fileAccessWhitelist = fileAccessWhitelist; DirectoryMembershipFingerprinter = directoryMembershipFingerprinter; ResourceManager = new ProcessResourceManager(loggingContext); m_pathExpander = new FileContentManagerSemanticPathExpander(fileContentManager, pathExpander); ExecutionLog = executionLog; m_rootModuleConfiguration = configuration; m_directoryMembershipFingerprinterRuleSet = directoryMembershipFinterprinterRuleSet; PathExistenceCache = new ConcurrentBigMap <AbsolutePath, PathExistence>(); FileContentManager = fileContentManager; ServiceManager = serviceManager ?? ServiceManager.Default; PipEnvironment = new PipEnvironment(loggingContext); FileSystemView = fileSystemView; m_unsafeConfiguration = unsafeConfiguration; m_preserveOutputsSalt = preserveOutputsSalt; LazyDeletionOfSharedOpaqueOutputsEnabled = lazyDeletionOfSharedOpaqueOutputsEnabled; if (fileSystemView != null) { fileContentManager.SetLocalDiskFileSystemExistenceView(fileSystemView); } }
private IIncrementalSchedulingState LoadOrReuseInternal( FileEnvelopeId atomicSaveToken, PipGraph pipGraph, IConfiguration configuration, PreserveOutputsInfo preserveOutputSalt, string incrementalSchedulingStatePath, SchedulerState schedulerState) { Contract.Requires(pipGraph != null); Contract.Requires(!string.IsNullOrWhiteSpace(incrementalSchedulingStatePath)); Contract.Assert(m_analysisMode || configuration != null); if (!m_analysisMode && schedulerState != null && schedulerState.IncrementalSchedulingState != null) { IIncrementalSchedulingState reusedState = schedulerState.IncrementalSchedulingState.ReuseFromEngineState( m_loggingContext, pipGraph, configuration, preserveOutputSalt, incrementalSchedulingStatePath, m_tempDirectoryCleaner); if (reusedState != null) { return(reusedState); } } return(GraphAgnosticIncrementalSchedulingState.Load( m_loggingContext, atomicSaveToken, pipGraph, configuration, preserveOutputSalt, incrementalSchedulingStatePath, analysisModeOnly: m_analysisMode, tempDirectoryCleaner: m_tempDirectoryCleaner)); }
/// <summary> /// Creates an instance of <see cref="GraphAgnosticIncrementalSchedulingStateId" /> from <see cref="IConfiguration" />. /// </summary> public static GraphAgnosticIncrementalSchedulingStateId Create(PathTable pathTable, IConfiguration configuration, PreserveOutputsInfo preserveOutputSalt) { return(new GraphAgnosticIncrementalSchedulingStateId( Environment.MachineName, configuration.Logging.SubstSource.ToString(pathTable).ToUpperInvariant(), configuration.Logging.SubstTarget.ToString(pathTable).ToUpperInvariant(), preserveOutputSalt)); }