public void CopyTo(Peer peer) { peer.RpcDue = this.RpcDue; peer.MatchIndex = this.MatchIndex; peer.NextIndex = this.NextIndex; peer.HeartBeartDue = this.HeartBeartDue; }
public void SendReply(Peer peer, AppendEntriesReply reply) { SendMessage(peer, reply); }
//public void SendRequest(Peer peer, StatusRequest request) //{ // SendMessage(peer, request); //} public void SendReply(Peer peer, VoteReply reply) { SendMessage(peer, reply); }
public void SendRequest(Peer peer, AppendEntriesRequest request) { SendMessage(peer, request); }
public void SendRequest(Peer peer, VoteRequest request) { SendMessage(peer, request); }
private void SendMessage(Peer peer, object message) { if ((float)_random.NextDouble() < PACKET_LOSS) { //Console.WriteLine("** dropped packet to: {0}, type: {1}", peer.ID, message.GetType().Name); return; } var sm = new SimulationMessage() { To = peer.ID, From = 0, SendTick = _tick, RecvTick = _tick + _random.Next(ServerOld.MIN_RPC_LATENCY, ServerOld.MAX_RPC_LATENCY), Message = message }; _messages.Add(sm); //Console.WriteLine("** MESSAGE:{0}, type: {1}, send: {2}, recv: {3}", peer.ID, message.GetType().Name, sm.SendTick, sm.RecvTick); }
protected void sendRequestVote(IConsensus model, Peer peer) { if (_state == ServerState.Candidate && peer.CheckRpcTimeout(model)) { //Console.WriteLine("{0}: Requesting vote from {1}", _id, peer.ID); LogIndex lastIndex; var lastLogIndex = _persistedState.GetLastIndex(out lastIndex); peer.RpcDue = model.Tick + RPC_TIMEOUT; model.SendRequest(peer, new VoteRequest() { From = _id, Term = _persistedState.Term, LastTerm = lastIndex.Term, LogLength = lastLogIndex }); } }
protected void sendAppendEntries(IConsensus model, Peer peer) { if (_state == ServerState.Leader && (peer.HeartBeartDue <= model.Tick || (peer.NextIndex <= _persistedState.Length && peer.RpcDue <= model.Tick))) { var prevIndex = peer.NextIndex - 1; var lastIndex = Math.Min(prevIndex + BATCH_SIZE, _persistedState.Length); if (peer.MatchIndex + 1 < peer.NextIndex) lastIndex = prevIndex; var entries = _persistedState.GetEntries(prevIndex, lastIndex); if (entries != null && entries.Length > 0) Console.WriteLine("{0}: Send AppendEnties[{1}-{2}] to {3}", _id, prevIndex, lastIndex, peer.ID); peer.RpcDue = model.Tick + RPC_TIMEOUT; peer.HeartBeartDue = model.Tick + (ELECTION_TIMEOUT / 2); model.SendRequest(peer, new AppendEntriesRequest() { From = _id, Term = _persistedState.Term, PrevIndex = prevIndex, PrevTerm = _persistedState.GetTerm(prevIndex), Entries = entries, CommitIndex = Math.Min(_commitIndex, lastIndex) }); } }
protected void sendAddServer(IConsensus model, Peer peer) { if (_state == ServerState.Adding) { } }