vector<int>::const_iterator end = acting.end();
while (++a != end) {
int peer(*a);
- MOSDPGLog *m = new MOSDPGLog(info.last_update.version, info);
+ MOSDPGLog *m = new MOSDPGLog(info.last_update.epoch, info);
m->log.head = log.head;
m->log.tail = log.tail;
for (list<Log::Entry>::const_reverse_iterator i = log.log.rbegin();
return discard_event();
}
+boost::statechart::result
+PG::RecoveryState::ReplicaActive::react(const MLogRec& logevt) {
+ PG *pg = context< RecoveryMachine >().pg;
+ MOSDPGLog *msg = logevt.msg;
+ dout(10) << "received log from " << logevt.from << dendl;
+ pg->merge_log(*context<RecoveryMachine>().get_cur_transaction(),
+ msg->info, msg->log, logevt.from);
+
+ assert(pg->log.tail <= pg->info.last_complete || pg->log.backlog);
+ assert(pg->log.head == pg->info.last_update);
+
+ return discard_event();
+}
+
boost::statechart::result
PG::RecoveryState::ReplicaActive::react(const ActMap&) {
PG *pg = context< RecoveryMachine >().pg;
typedef boost::mpl::list <
boost::statechart::custom_reaction< ActMap >,
boost::statechart::custom_reaction< MQuery >,
- boost::statechart::custom_reaction< MInfoRec >
+ boost::statechart::custom_reaction< MInfoRec >,
+ boost::statechart::custom_reaction< MLogRec >
> reactions;
boost::statechart::result react(const MInfoRec& infoevt);
+ boost::statechart::result react(const MLogRec& logevt);
boost::statechart::result react(const ActMap&);
boost::statechart::result react(const MQuery&);
};