void ReplicatedLog::OnMessage(PaxosMessage& imsg) { Log_Trace(); bool processed; processed = false; if (imsg.type == PAXOS_PREPARE_REQUEST) processed = OnPrepareRequest(imsg); else if (imsg.IsPrepareResponse()) processed = OnPrepareResponse(imsg); else if (imsg.type == PAXOS_PROPOSE_REQUEST) processed = OnProposeRequest(imsg); else if (imsg.IsProposeResponse()) processed = OnProposeResponse(imsg); else if (imsg.IsLearn()) processed = OnLearnChosen(imsg); else if (imsg.type == PAXOS_REQUEST_CHOSEN) processed = OnRequestChosen(imsg); else if (imsg.type == PAXOS_START_CATCHUP) processed = OnStartCatchup(imsg); else ASSERT_FAIL(); if (processed) context->OnMessageProcessed(); }
void ReplicatedLog::OnMessage(PaxosMessage& imsg) { Log_Trace(); if (imsg.type == PAXOS_PREPARE_REQUEST) OnPrepareRequest(imsg); else if (imsg.IsPrepareResponse()) OnPrepareResponse(imsg); else if (imsg.type == PAXOS_PROPOSE_REQUEST) OnProposeRequest(imsg); else if (imsg.IsProposeResponse()) OnProposeResponse(imsg); else if (imsg.IsLearn()) OnLearnChosen(imsg); else if (imsg.type == PAXOS_REQUEST_CHOSEN) OnRequestChosen(imsg); else if (imsg.type == PAXOS_START_CATCHUP) OnStartCatchup(imsg); else ASSERT_FAIL(); }
void ConfigQuorumContext::OnPaxosMessage(ReadBuffer buffer) { PaxosMessage msg; if (!isReplicationActive) return; msg.Read(buffer); if (msg.IsPaxosRequest() || msg.IsPaxosResponse() || msg.IsLearn()) { if (!quorum.IsMember(msg.nodeID)) { Log_Message("Dropping paxos msg from %U because that node is not a quourm member", msg.nodeID); OnMessageProcessed(); return; } } RegisterPaxosID(msg.paxosID); replicatedLog.RegisterPaxosID(msg.paxosID, msg.nodeID); replicatedLog.OnMessage(msg); }