コード例 #1
0
        private void HandleCancelEvacuation(CancelEvacuation message)
        {
            Console.WriteLine($"I Cancelling Evacuation I am Host #{MachineId} ");
            if (!EvacuateMode)
            {
                throw new NotImplementedException("Cancel what wasn't active");
            }

            EvacuateMode = true;
        }
コード例 #2
0
        /// <summary>
        /// Should Be Optimized for the reasons to add new host or remove one
        /// </summary>
        /// <param name="hostId"></param>
        /// <param name="atype"></param>
        protected void InitiateRejectAction(int hostId, StrategyActionType atype)
        {
            //Implement Conditions for How to Add New Nodes or Remove
            //Implement Add Host and Evacuation System Locks
            var action = RejectActions.Nothing;

            switch (atype)
            {
            case StrategyActionType.PushAction:
                //Create New Host
                //if (hostId != EvacuatingHost)
                //if (EvacuatingHost == 0)

                if (EvacuatingHosts.Count == 0)
                {
                    //if (_pushFailures > Global.GetNoOfFailures)
                    if (!DataHolder.GetCandidateHosts(UtilizationStates.UnderUtilization, 0).Any())
                    {
                        PowerController.PowerOnHost();
                    }
                    //_pushFailures = 0;

                    //else
                    //{
                    //    //_pushFailures++;
                    //}
                }
                //else if (hostId == EvacuatingHost)
                else if (EvacuatingHosts.Contains(hostId))
                {
                    action = RejectActions.CancelEvacuation;
                    Console.WriteLine($"Cancel Evacuation for {hostId}");
                    //EvacuatingHost = 0;
                    EvacuatingHosts.Remove(hostId);
                    DataHolder.SetUtilization(hostId, UtilizationStates.UnderUtilization);
                }
                else
                {
                    //throw new Exception("Evacuting Host with Push Request, What to Do");
                    //Options (Cancel Evacuation Mode @All Hosts)
                    foreach (var ehost in EvacuatingHosts)
                    {
                        DataHolder.SetUtilization(ehost, UtilizationStates.UnderUtilization);
                        var cem = new CancelEvacuation(ehost, this.MachineId);
                        CommunicationModule.SendMessage(cem);
                    }
                    EvacuatingHosts.Clear();
                }
                break;

            case StrategyActionType.PullAction:
                //Evacuate Host
                if (EvacuatingHosts.Contains(hostId))
                {
                    throw new NotImplementedException();
                }
                if (    //(EvacuatingHost == 0 &&
                    !DataHolder.GetCandidateHosts(UtilizationStates.OverUtilization, 0).Any())
                {
                    DataHolder.SetUtilization(hostId, UtilizationStates.Evacuating);
                    //EvacuatingHost = hostId;
                    EvacuatingHosts.Add(hostId);
                    if (EvacuatingHosts.Count > 1)
                    {
                    }
                    action = RejectActions.Evacuate;
                    Console.WriteLine($"Start Evacuation for {hostId}");
                }
                //else if (hostId == EvacuatingHost)
                //{
                //    throw new NotImplementedException();
                //}

                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            RejectRequest request = new RejectRequest(hostId, this.MachineId, atype, action);

            CommunicationModule.SendMessage(request);
        }