void Learner :: OnSendNowInstanceID(const PaxosMsg & oPaxosMsg) { BP->GetLearnerBP()->OnSendNowInstanceID(); PLGHead("START Msg.InstanceID %lu Now.InstanceID %lu Msg.from_nodeid %lu Msg.MaxInstanceID %lu systemvariables_size %zu mastervariables_size %zu", oPaxosMsg.instanceid(), GetInstanceID(), oPaxosMsg.nodeid(), oPaxosMsg.nowinstanceid(), oPaxosMsg.systemvariables().size(), oPaxosMsg.mastervariables().size()); SetSeenInstanceID(oPaxosMsg.nowinstanceid(), oPaxosMsg.nodeid()); bool bSystemVariablesChange = false; int ret = m_poConfig->GetSystemVSM()->UpdateByCheckpoint(oPaxosMsg.systemvariables(), bSystemVariablesChange); if (ret == 0 && bSystemVariablesChange) { PLGHead("SystemVariables changed!, all thing need to reflesh, so skip this msg"); return; } bool bMasterVariablesChange = false; if (m_poConfig->GetMasterSM() != nullptr) { ret = m_poConfig->GetMasterSM()->UpdateByCheckpoint(oPaxosMsg.mastervariables(), bMasterVariablesChange); if (ret == 0 && bMasterVariablesChange) { PLGHead("MasterVariables changed!"); } } if (oPaxosMsg.instanceid() != GetInstanceID()) { PLGErr("Lag msg, skip"); return; } if (oPaxosMsg.nowinstanceid() <= GetInstanceID()) { PLGErr("Lag msg, skip"); return; } if (oPaxosMsg.minchoseninstanceid() > GetInstanceID()) { BP->GetCheckpointBP()->NeedAskforCheckpoint(); PLGHead("my instanceid %lu small than other's minchoseninstanceid %lu, other nodeid %lu", GetInstanceID(), oPaxosMsg.minchoseninstanceid(), oPaxosMsg.nodeid()); AskforCheckpoint(oPaxosMsg.nodeid()); } else if (!m_bIsIMLearning) { ComfirmAskForLearn(oPaxosMsg.nodeid()); } }