Пример #1
0
        /// <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);
        }