}
}
+ if (pg.last_complete_ondisk != pg.info.last_complete)
+ out << " lcod " << pg.last_complete_ondisk;
+
if (pg.get_role() == 0) {
out << " mlcod " << pg.min_last_complete_ondisk;
if (!pg.have_master_log)
}
+struct C_OSD_Commit : public Context {
+ ReplicatedPG *pg;
+ epoch_t same_since;
+ eversion_t last_complete;
+ C_OSD_Commit(ReplicatedPG *p, epoch_t ss, eversion_t lc) : pg(p), same_since(ss), last_complete(lc) {
+ pg->get();
+ }
+ void finish(int r) {
+ pg->lock();
+ pg->_committed(same_since, last_complete);
+ pg->unlock();
+ pg->put();
+ }
+};
+
+void ReplicatedPG::_committed(epoch_t same_since, eversion_t last_complete)
+{
+ if (same_since == info.history.same_since) {
+ dout(10) << "_committed last_complete " << last_complete << " now ondisk" << dendl;
+ last_complete_ondisk = last_complete;
+ } else {
+ dout(10) << "_committed pg has changed, not touching last_complete_ondisk" << dendl;
+ }
+}
+
/** op_push
* NOTE: called from opqueue.
*/
// apply to disk!
write_info(t);
- unsigned r = osd->store->apply_transaction(t);
+ unsigned r = osd->store->apply_transaction(t, new C_OSD_Commit(this, info.history.same_since,
+ info.last_complete));
assert(r == 0);
osd->logger->inc(l_osd_r_pull);
void sub_op_push_reply(MOSDSubOpReply *reply);
void sub_op_pull(MOSDSubOp *op);
+ void _committed(epoch_t same_since, eversion_t lc);
+ friend class C_OSD_Commit;
+
+
// -- scrub --
int _scrub(ScrubMap& map, int& errors, int& fixed);