/// <summary> /// Removes Job Processor workers which are IDLE for a while /// </summary> private IEnumerable <JobHostEntity> RemoveIdleInstancesAsNeeded(IEnumerable <JobHostEntity> overIdleJobHosts, int idleCount) { // does the policy state a minumum number of idle workers? overIdleJobHosts = (idleCount > _policy.MaximumIdleJobHosts) ? overIdleJobHosts.Take(idleCount - _policy.MaximumIdleJobHosts) : overIdleJobHosts.Take(0); string[] roleInstances = overIdleJobHosts.Select(jhe => jhe.RoleInstanceId).ToArray <string>(); if (overIdleJobHosts.Count() > 0) { string requestId = string.Empty; if (RoleEnvironment.IsEmulated == false) { requestId = ManagementApiHelper.RemoveJobHostInstances(roleInstances); } if (!string.IsNullOrEmpty(requestId)) { UpdateRoleOperationStatus(requestId); // mark the jobHosts as deleting foreach (var jhe in overIdleJobHosts) { jhe.Status = JobHostStatus.Deleting; _jobHostRepository.UpdateJobHost(jhe); } } } return(overIdleJobHosts); }