/// <summary> /// Reads in the scheduling plan if one exists and has not previously been read; returns true if the scheduling plan /// both exists and is valid, or false otherwise. /// </summary> private bool GetSchedulingPlanAndAlgorithm() { // Read the plan, if any. if (_schedulingPlan == null) { _schedulingPlan = new SchedulingPlan(_configCache, _schedulingData); ReadSchedulingPlan(_schedulingData.GetRequestsByHierarchy(null).First().BuildRequest.SubmissionId); } if (_customRequestSchedulingAlgorithm == null) { string customScheduler = Environment.GetEnvironmentVariable("MSBUILDCUSTOMSCHEDULER"); if (!String.IsNullOrEmpty(customScheduler)) { // Assign to the delegate if (customScheduler.Equals("WithPlanByMostImmediateReferences", StringComparison.OrdinalIgnoreCase) && _schedulingPlan.IsPlanValid) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsWithPlanByMostImmediateReferences; } else if (customScheduler.Equals("WithPlanByGreatestPlanTime", StringComparison.OrdinalIgnoreCase) && _schedulingPlan.IsPlanValid) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsWithPlanByGreatestPlanTime; } else if (customScheduler.Equals("ByTraversalsFirst", StringComparison.OrdinalIgnoreCase)) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsByTraversalsFirst; } else if (customScheduler.Equals("WithConfigurationCountLevelling", StringComparison.OrdinalIgnoreCase)) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsWithConfigurationCountLevelling; } else if (customScheduler.Equals("WithSmallestFileSize", StringComparison.OrdinalIgnoreCase)) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsWithSmallestFileSize; } else if (customScheduler.Equals("WithLargestFileSize", StringComparison.OrdinalIgnoreCase)) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsWithLargestFileSize; } else if (customScheduler.Equals("WithMaxWaitingRequests", StringComparison.OrdinalIgnoreCase)) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsWithMaxWaitingRequests; } else if (customScheduler.Equals("WithMaxWaitingRequests2", StringComparison.OrdinalIgnoreCase)) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsWithMaxWaitingRequests2; } else if (customScheduler.Equals("FIFO", StringComparison.OrdinalIgnoreCase)) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsFIFO; } else if (customScheduler.Equals("CustomSchedulerForSQL", StringComparison.OrdinalIgnoreCase)) { _customRequestSchedulingAlgorithm = AssignUnscheduledRequestsUsingCustomSchedulerForSQL; string multiplier = Environment.GetEnvironmentVariable("MSBUILDCUSTOMSCHEDULERFORSQLCONFIGURATIONLIMITMULTIPLIER"); double convertedMultiplier = 0; if (!Double.TryParse(multiplier, out convertedMultiplier) || convertedMultiplier < 1) { _customSchedulerForSQLConfigurationLimitMultiplier = DefaultCustomSchedulerForSQLConfigurationLimitMultiplier; } else { _customSchedulerForSQLConfigurationLimitMultiplier = convertedMultiplier; } } } } return _schedulingPlan.IsPlanValid; }
/// <summary> /// Retrieves the scheduling plan from the previous run. /// </summary> private void ReadSchedulingPlan(int submissionId) { _schedulingPlan = new SchedulingPlan(_configCache, _schedulingData); _schedulingPlan.ReadPlan(submissionId, _componentHost.LoggingService, new BuildEventContext(submissionId, 0, 0, 0, 0, 0)); }
/// <summary> /// Resets the scheduler. /// </summary> public void Reset() { DumpConfigurations(); DumpRequests(); _schedulingPlan = null; _schedulingData = new SchedulingData(); _availableNodes = new Dictionary<int, NodeInfo>(8); _currentInProcNodeCount = 0; _currentOutOfProcNodeCount = 0; _nextGlobalRequestId = 0; _customRequestSchedulingAlgorithm = null; }
/// <summary> /// Write out the scheduling information so the next time we can read the plan back in and use it. /// </summary> private void WriteSchedulingPlan(int submissionId) { SchedulingPlan plan = new SchedulingPlan(_configCache, _schedulingData); plan.WritePlan(submissionId, _componentHost.LoggingService, new BuildEventContext(submissionId, 0, 0, 0, 0, 0)); }