Exemplo n.º 1
0
        public override R EndExecute(IAsyncResult result)
        {
            if (!Object.ReferenceEquals(result, asyncResult))
            {
                throw new ArgumentException("provided result argument does not match");
            }

            if (asyncResultDic != null && asyncResultDic.Count > 0)
            {
                IList <IClusterResponse <T> > clusterResults = new List <IClusterResponse <T> >();

                foreach (KeyValuePair <Server, IAsyncResult> pair in asyncResultDic)
                {
                    IClusterResponse <T> response = null;
                    try
                    {
                        response = new ClusterResponse <T>((T)_shard.EndSendMessage(pair.Key, pair.Value), pair.Key);
                    }
                    catch (Exception ex)
                    {
                        response = new ClusterResponse <T>(default(T), pair.Key, false, 1);
                    }

                    clusterResults.Add(response);
                }


                responseCollection.Responses = clusterResults;
                return(responseCollection); //_factory(clusterResults);
            }

            return(default(R));
        }
Exemplo n.º 2
0
        public IClusterResponse <T> GetResponse(Server server)
        {
            IClusterResponse <T> response = null;

            if (responses != null)
            {
                IEnumerator enumerator = responses.GetEnumerator();

                while (enumerator.MoveNext())
                {
                    IClusterResponse <T> res = (IClusterResponse <T>)enumerator.Current;
                    if (res.Server.Equals(server))
                    {
                        response = res;
                        break;
                    }
                }
            }
            return(response);
        }
Exemplo n.º 3
0
        internal Configuration.Services.ElectionResult ConductElection(ElectionId electionId, Address[] activeNodes, Activity activity)
        {
            Address[] votingNodes = null;
            if (activeNodes == null)
            {
                throw new ArgumentNullException("Active nodes are null");
            }
            Election election = null;

            if (votingNodes == null)
            {
                votingNodes = new Address[activeNodes.Length];
            }
            try
            {
                ElectionType electionType = ElectionType.None;
                if (activity == Activity.GeneralElectionsTriggered)
                {
                    electionType = ElectionType.GeneralElections;
                }
                else if (activity == Activity.TakeoverElectionsTriggered)
                {
                    electionType = ElectionType.TakeoverElections;
                }

                election    = new Election(electionId, electionType);
                votingNodes = activeNodes;
                election.RequestingServerInfo = LocalServerInfo();

                if (election.StartElection(votingNodes))
                {
                    ResponseCollection <object> response = (ResponseCollection <object>)MulticastRequest(election);

                    if (response != null)
                    {
                        foreach (var server in _shard.ActiveChannelsList)
                        {
                            IClusterResponse <object> serverResponse = response.GetResponse(server);
                            if (serverResponse.IsSuccessfull)
                            {
                                if (serverResponse.Value != null)
                                {
                                    ElectionVote vote = serverResponse.Value as ElectionVote;
                                    if (vote != null)
                                    {
                                        election.AddVote(vote);
                                    }
                                }
                            }
                        }
                    }
                    return(election.GetElectionResult());
                }
            }
            catch (Exception e)
            {
                if (LoggerManager.Instance.ShardLogger != null && LoggerManager.Instance.ShardLogger.IsErrorEnabled)
                {
                    LoggerManager.Instance.ShardLogger.Error("ElectionManager.ConductElection()", e.ToString());
                }
            }
            return(null);
        }