public Proposer(Presence presence, Acceptor myAcceptor, Uri orignatorUri, Uri[] allAcceptors) : base(presence) { this.myAcceptor = myAcceptor; this.orignatorUri = orignatorUri; this.allAcceptors = allAcceptors; ballotBase = base.GetHashCode()%25; // effectively a random choice Register<Promise>(OnPromise); Register<ProposalSubsumed>(OnProposalSubsumed); Register<Accepted>(OnAccepted); }
public Proposer(Presence presence, Acceptor myAcceptor, Uri orignatorUri, Uri[] allAcceptors) : base(presence) { this.myAcceptor = myAcceptor; this.orignatorUri = orignatorUri; this.allAcceptors = allAcceptors; ballotBase = base.GetHashCode() % 25; // effectively a random choice Register <Promise>(OnPromise); Register <ProposalSubsumed>(OnProposalSubsumed); Register <Accepted>(OnAccepted); }
protected virtual void SelectNewMasterOnTopologyChanged(object sender, NodeMetadata nodeMetadata) { if (nodeMetadata.ChangeType == TopologyChangeType.MasterSelected) return;//nothing to do here MasterSelectedByQuorum = null; // Who is the master is in doubt, because the topology changed var others = topologyState.Keys.ToArray(); var acceptor = new Acceptor(this, myAddress, others); var proposer = new Proposer(this, acceptor, myAddress, others); var learner = new Learner(this, others); learner.OnAcceptedValue += LearnerOnOnAcceptedValue; agents = new Agent[] { acceptor, proposer, learner }; proposer.StartProposing(new SwitchMasterCommand { NewMaster = others.OrderBy(x => x.AbsoluteUri).First() }); }