1 instantiation of SchedulableRequest
Microsoft.Build (1)
BackEnd\Components\Scheduler\SchedulingData.cs (1)
262SchedulableRequest request = new SchedulableRequest(this, buildRequest, parent);
216 references to SchedulableRequest
Microsoft.Build (216)
BackEnd\Components\Scheduler\SchedulableRequest.cs (36)
85private SchedulableRequest _parent; 96private Dictionary<BlockingRequestKey, SchedulableRequest> _requestsWeAreBlockedBy; 101private HashSet<SchedulableRequest> _requestsWeAreBlocking; 126public SchedulableRequest(SchedulingData collection, BuildRequest request, SchedulableRequest parent) 136_requestsWeAreBlockedBy = new Dictionary<BlockingRequestKey, SchedulableRequest>(); 137_requestsWeAreBlocking = new HashSet<SchedulableRequest>(); 169public SchedulableRequest Parent 213public IEnumerable<SchedulableRequest> RequestsWeAreBlockedBy 235public IEnumerable<SchedulableRequest> RequestsWeAreBlocking 334public void BlockByRequest(SchedulableRequest blockingRequest, string[] activeTargets, string blockingTarget = null) 423List<SchedulableRequest> requestsToUnblock = new List<SchedulableRequest>(_requestsWeAreBlocking); 424foreach (SchedulableRequest requestWeAreBlocking in requestsToUnblock) 497private void DetectCircularDependency(SchedulableRequest blockingRequest) 514private void DetectIndirectCircularDependency(SchedulableRequest blockingRequest) 518SchedulableRequest alternateRequest = _schedulingData.GetBlockedRequestIfAny(blockingRequest.BuildRequest.GlobalRequestId); 524Stack<SchedulableRequest> requestsToEvaluate = new Stack<SchedulableRequest>(16); 525HashSet<SchedulableRequest> evaluatedRequests = new HashSet<SchedulableRequest>(); 530SchedulableRequest requestToEvaluate = requestsToEvaluate.Pop(); 554foreach (SchedulableRequest childRequest in requestToEvaluate.RequestsWeAreBlockedBy) 567private void ThrowIndirectCircularDependency(SchedulableRequest blockingRequest, SchedulableRequest requestToEvaluate) 571List<SchedulableRequest> ancestors = new List<SchedulableRequest>(16); 585private void DetectDirectCircularDependency(SchedulableRequest blockingRequest) 589List<SchedulableRequest> ancestors = new List<SchedulableRequest>(16); 590SchedulableRequest currentRequest = this; 608private void CleanupForCircularDependencyAndThrow(SchedulableRequest requestCausingFailure, List<SchedulableRequest> ancestors) 612List<SchedulableRequest> tempRequests = new List<SchedulableRequest>(_requestsWeAreBlockedBy.Values); 613foreach (SchedulableRequest requestWeAreBlockedBy in tempRequests) 640Assumed.True(_requestsWeAreBlockedBy.TryGetValue(blockingRequestKey, out SchedulableRequest unblockingRequest), "We are not blocked by the specified request.");
BackEnd\Components\Scheduler\Scheduler.cs (88)
71private ArrayPool<SchedulableRequest> _requestBufferPool = ArrayPool<SchedulableRequest>.Create(); 342SchedulableRequest request = _schedulingData.GetExecutingRequestByNode(nodeId); 355SchedulableRequest parentRequest = null; 440SchedulableRequest request = _schedulingData.GetExecutingRequest(result.GlobalRequestId); 480SchedulableRequest[] unscheduledRequests = RentPooledBuffer( 482foreach (SchedulableRequest unscheduledRequest in new ReadOnlySpan<SchedulableRequest>(unscheduledRequests, 0, numRead)) 586foreach (SchedulableRequest request in _schedulingData.GetScheduledRequestsByNode(nodeId)) 603_requestBufferPool = ArrayPool<SchedulableRequest>.Create(); 621foreach (SchedulableRequest request in _schedulingData.GetRequestsByHierarchy(null)) 718private void HandleYieldAction(SchedulableRequest parentRequest, BuildRequestBlocker blocker) 813foreach (SchedulableRequest request in _schedulingData.BlockedRequests) 999SchedulableRequest bestRequest = null; 1002foreach (SchedulableRequest request in _schedulingData.UnscheduledRequestsWhichCanBeScheduled) 1051private void AssignUnscheduledRequestsToInProcNode(List<ScheduleResponse> responses, HashSet<int> idleNodes, Func<SchedulableRequest, bool> shouldBeScheduled) 1055SchedulableRequest[] unscheduledRequests = _requestBufferPool.Rent(_schedulingData.UnscheduledRequestsCount); 1065foreach (SchedulableRequest request in new ReadOnlySpan<SchedulableRequest>(unscheduledRequests, 0, numRead)) 1110foreach (SchedulableRequest request in _schedulingData.UnscheduledRequestsWhichCanBeScheduled) 1134SchedulableRequest requestWithSmallestSourceFile = null; 1138foreach (SchedulableRequest unscheduledRequest in _schedulingData.UnscheduledRequestsWhichCanBeScheduled) 1176SchedulableRequest requestWithLargestSourceFile = null; 1180foreach (SchedulableRequest unscheduledRequest in _schedulingData.UnscheduledRequestsWhichCanBeScheduled) 1219SchedulableRequest requestToSchedule = null; 1220SchedulableRequest requestToScheduleNoAffinity = null; 1221SchedulableRequest requestToScheduleWithAffinity = null; 1222foreach (SchedulableRequest currentSchedulableRequest in _schedulingData.UnscheduledRequestsWhichCanBeScheduled) 1296SchedulableRequest mostWaitingRequests = null; 1297foreach (SchedulableRequest unscheduledRequest in _schedulingData.UnscheduledRequestsWhichCanBeScheduled) 1330foreach (SchedulableRequest unscheduledRequest in _schedulingData.UnscheduledRequestsWhichCanBeScheduled) 1394foreach (SchedulableRequest request in _schedulingData.UnscheduledRequestsWhichCanBeScheduled) 1423private void AssignUnscheduledRequestToNode(SchedulableRequest request, int nodeId, List<ScheduleResponse> responses) 1516private bool CanScheduleRequestToNode(SchedulableRequest request, int nodeId) 1540private bool CreateNewNodeIfPossible(List<ScheduleResponse> responses, IEnumerable<SchedulableRequest> requests) 1555foreach (SchedulableRequest request in requests) 1681private void MarkRequestAborted(SchedulableRequest request) 1686foreach (SchedulableRequest blockedRequest in request.RequestsWeAreBlocking) 1695private void HandleRequestBlockedOnInProgressTarget(SchedulableRequest blockedRequest, BuildRequestBlocker blocker) 1701SchedulableRequest blockingRequest = _schedulingData.GetScheduledRequest(blocker.BlockingRequestId); 1726private void HandleRequestBlockedOnResultsTransfer(SchedulableRequest parentRequest, List<ScheduleResponse> responses) 1754private void HandleRequestBlockedByNewRequests(SchedulableRequest parentRequest, BuildRequestBlocker blocker, List<ScheduleResponse> responses) 1822foreach (SchedulableRequest existingRequest in _schedulingData.GetRequestsAssignedToConfiguration(request.ConfigurationId)) 1881SchedulableRequest blockingRequest = _schedulingData.CreateRequest(requestToAdd, parentRequest); 1896foreach (SchedulableRequest request in _schedulingData.GetReadyRequestsByNode(nodeId)) 1913private void ResolveRequestFromCacheAndResumeIfPossible(SchedulableRequest request, List<ScheduleResponse> responses) 2008SchedulableRequest[] unscheduledRequests = RentPooledBuffer( 2010foreach (SchedulableRequest request in new ReadOnlySpan<SchedulableRequest>(unscheduledRequests, 0, numRead)) 2039private IReadOnlyCollection<string> GetIsolationAllowedTopLevelTargets(SchedulableRequest parentRequest, BuildRequest request) 2129foreach (SchedulableRequest blockedRequest in schedulingData.BlockedRequests) 2140foreach (SchedulableRequest executingRequest in schedulingData.ExecutingRequests) 2252private int ComputeClosureOfWaitingRequests(SchedulableRequest request) 2259foreach (SchedulableRequest waitingRequest in request.RequestsWeAreBlocking) 2321private bool RequestOrAnyItIsBlockedByCanBeServiced(SchedulableRequest request) 2325foreach (SchedulableRequest requestWeAreBlockedBy in request.RequestsWeAreBlockedBy) 2370foreach (SchedulableRequest existingRequest in _schedulingData.GetRequestsAssignedToConfiguration(request.ConfigurationId)) 2404private SchedulableRequest[] RentPooledBuffer(IEnumerable<SchedulableRequest> requests, int count, out int numRead) 2406SchedulableRequest[] buffer = _requestBufferPool.Rent(count); 2407IEnumerator<SchedulableRequest> requestsToRead = requests.GetEnumerator(); 2421private void ReturnPooledBuffer(SchedulableRequest[] buffer, int numRead) 2643private void WriteRecursiveSummary(ILoggingService loggingService, BuildEventContext context, int submissionId, SchedulableRequest request, int level, bool useConfigurations, bool isLastChild) 2680List<SchedulableRequest> childRequests = new List<SchedulableRequest>(_schedulingData.GetRequestsByHierarchy(request)); 2681childRequests.Sort(delegate (SchedulableRequest left, SchedulableRequest right) 2697SchedulableRequest childRequest = childRequests[i]; 2801SchedulableRequest executingRequest = _schedulingData.GetExecutingRequestByNode(nodeId); 2814List<SchedulableRequest> scheduledRequestsByNode = new List<SchedulableRequest>(_schedulingData.GetScheduledRequestsByNode(nodeId)); 2816foreach (SchedulableRequest request in scheduledRequestsByNode) 2834Queue<SchedulableRequest> blockingRequests = new Queue<SchedulableRequest>(); 2835HashSet<SchedulableRequest> topLevelBlockingRequests = new HashSet<SchedulableRequest>(); 2836foreach (SchedulableRequest request in scheduledRequestsByNode) 2840foreach (SchedulableRequest blockingRequest in request.RequestsWeAreBlockedBy) 2849SchedulableRequest request = blockingRequests.Dequeue(); 2853foreach (SchedulableRequest blockingRequest in request.RequestsWeAreBlockedBy) 2864foreach (SchedulableRequest request in topLevelBlockingRequests) 2881foreach (SchedulableRequest request in _schedulingData.UnscheduledRequests) 2967private void DumpRequestHierarchy(StreamWriter file, SchedulableRequest root, int indent) 2969foreach (SchedulableRequest child in _schedulingData.GetRequestsByHierarchy(root)) 2979private void DumpRequestState(StreamWriter file, SchedulableRequest request, int indent) 2984foreach (SchedulableRequest blockingRequest in request.RequestsWeAreBlockedBy) 2992foreach (SchedulableRequest blockedRequest in request.RequestsWeAreBlocking) 3002private void DumpRequestSpec(StreamWriter file, SchedulableRequest request, int indent, string prefix)
BackEnd\Components\Scheduler\SchedulerCircularDependencyException.cs (3)
23private IList<SchedulableRequest> _ancestors; 33public SchedulerCircularDependencyException(BuildRequest request, IList<SchedulableRequest> ancestors) 47public IEnumerable<SchedulableRequest> Ancestors
BackEnd\Components\Scheduler\SchedulingData.cs (79)
24private readonly Dictionary<int, SchedulableRequest> _executingRequests = new Dictionary<int, SchedulableRequest>(32); 29private readonly Dictionary<int, SchedulableRequest> _blockedRequests = new Dictionary<int, SchedulableRequest>(32); 34private readonly Dictionary<int, SchedulableRequest> _yieldingRequests = new Dictionary<int, SchedulableRequest>(32); 39private readonly Dictionary<int, SchedulableRequest> _readyRequests = new Dictionary<int, SchedulableRequest>(32); 44private readonly LinkedList<SchedulableRequest> _unscheduledRequests = new LinkedList<SchedulableRequest>(); 50private readonly Dictionary<SchedulableRequest, LinkedListNode<SchedulableRequest>> _unscheduledRequestNodesByRequest = new Dictionary<SchedulableRequest, LinkedListNode<SchedulableRequest>>(32); 59private readonly Dictionary<int, HashSet<SchedulableRequest>> _scheduledRequestsByNode = new Dictionary<int, HashSet<SchedulableRequest>>(32); 69private readonly ConcurrentDictionary<int, SchedulableRequest> _executingRequestByNode = new(concurrencyLevel: 1, capacity: 32); 74private readonly Dictionary<int, HashSet<SchedulableRequest>> _readyRequestsByNode = new Dictionary<int, HashSet<SchedulableRequest>>(32); 92private readonly Dictionary<int, HashSet<SchedulableRequest>> _configurationToRequests = new Dictionary<int, HashSet<SchedulableRequest>>(32); 110private readonly Dictionary<SchedulableRequest, List<SchedulableRequest>> _buildHierarchy = new Dictionary<SchedulableRequest, List<SchedulableRequest>>(32); 142public IEnumerable<SchedulableRequest> ExecutingRequests 158public IEnumerable<SchedulableRequest> ReadyRequests 182public IEnumerable<SchedulableRequest> BlockedRequests 198public IEnumerable<SchedulableRequest> YieldingRequests 214public IEnumerable<SchedulableRequest> UnscheduledRequests 260public SchedulableRequest CreateRequest(BuildRequest buildRequest, SchedulableRequest parent) 262SchedulableRequest request = new SchedulableRequest(this, buildRequest, parent); 265LinkedListNode<SchedulableRequest> requestNode = _unscheduledRequests.AddFirst(request); 269HashSet<SchedulableRequest> requests; 272requests = new HashSet<SchedulableRequest>(); 281_buildHierarchy[request] = new List<SchedulableRequest>(8); 296public void UpdateFromState(SchedulableRequest request, SchedulableRequestState previousState) 324LinkedListNode<SchedulableRequest> requestNode = _unscheduledRequestNodesByRequest[request]; 331HashSet<SchedulableRequest> requestsAssignedToNode; 334requestsAssignedToNode = new HashSet<SchedulableRequest>(); 400HashSet<SchedulableRequest> readyRequestsOnNode; 403readyRequestsOnNode = new HashSet<SchedulableRequest>(); 422public IEnumerable<SchedulableRequest> GetRequestsAssignedToConfiguration(int configurationId) 432HashSet<SchedulableRequest> requests; 444public SchedulableRequest GetExecutingRequest(int globalRequestId) 453public SchedulableRequest GetBlockedRequest(int globalRequestId) 462public SchedulableRequest GetBlockedRequestIfAny(int globalRequestId) 464SchedulableRequest request; 476public SchedulableRequest GetYieldingRequest(int globalRequestId) 485public SchedulableRequest GetReadyRequest(int globalRequestId) 494public SchedulableRequest GetScheduledRequest(int globalRequestId) 496SchedulableRequest returnValue = InternalGetScheduledRequestByGlobalRequestId(globalRequestId); 539public SchedulableRequest GetExecutingRequestByNode(int nodeId) 541return _executingRequestByNode.TryGetValue(nodeId, out SchedulableRequest request) ? request : null; 547public bool IsRequestScheduled(SchedulableRequest request) 557HashSet<SchedulableRequest> requests; 569public IEnumerable<SchedulableRequest> GetScheduledRequestsByNode(int nodeId) 571HashSet<SchedulableRequest> requests; 574return ReadOnlyEmptyCollection<SchedulableRequest>.Instance; 583public IEnumerable<SchedulableRequest> GetReadyRequestsByNode(int nodeId) 585HashSet<SchedulableRequest> requests; 588return ReadOnlyEmptyCollection<SchedulableRequest>.Instance; 598public IEnumerable<SchedulableRequest> GetRequestsByHierarchy(SchedulableRequest root) 603List<SchedulableRequest> roots = new List<SchedulableRequest>(); 604foreach (SchedulableRequest key in _buildHierarchy.Keys) 636public bool CanScheduleRequestToNode(SchedulableRequest request, int nodeId) 653SchedulableRequest request = GetScheduledRequest(globalRequestId); 666SchedulableRequest request = GetScheduledRequest(globalRequestId); 690private SchedulableRequest InternalGetScheduledRequestByGlobalRequestId(int globalRequestId) 692SchedulableRequest returnValue; 721SchedulableRequest request = InternalGetScheduledRequestByGlobalRequestId(globalRequestId); 731private LinkedList<SchedulableRequest>.Enumerator _enumerator; 742public SchedulableRequest Current { get; private set; } 772private SchedulableRequest _request; 787public SchedulingEvent(DateTime eventTime, SchedulableRequest request, SchedulableRequestState oldState, SchedulableRequestState newState) 806public SchedulableRequest Request
BackEnd\Components\Scheduler\SchedulingPlan.cs (10)
93SchedulableRequest rootRequest = GetRootRequest(submissionId); 142SchedulableRequest rootRequest = GetRootRequest(submissionId); 204private string GetPlanName(SchedulableRequest rootRequest) 424private SchedulableRequest GetRootRequest(int submissionId) 426foreach (SchedulableRequest request in _schedulingData.GetRequestsByHierarchy(null)) 440private void RecursiveWriteDependencies(StreamWriter file, SchedulableRequest request) 443foreach (SchedulableRequest child in _schedulingData.GetRequestsByHierarchy(request)) 450foreach (SchedulableRequest child in _schedulingData.GetRequestsByHierarchy(request)) 459private void RecursiveAccumulateConfigurationTimes(SchedulableRequest request, Dictionary<int, double> accumulatedTimeByConfiguration) 468foreach (SchedulableRequest childRequest in _schedulingData.GetRequestsByHierarchy(request))