From: Samuel Just Date: Mon, 25 Feb 2013 20:35:26 +0000 (-0800) Subject: ReplicatedPG::C_OSD_CommittedPushedObject take epoch submitted X-Git-Tag: v0.59~104^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a01dea6af9aacf0614570ebb5fa161d9dde9b6b6;p=ceph.git ReplicatedPG::C_OSD_CommittedPushedObject take epoch submitted What we really care about is that the epoch in which the Context was submitted is at complete() time >= last_peering_reset. Signed-off-by: Samuel Just --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index cfa6bbabe8a0..d079f1f27b8e 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5258,9 +5258,10 @@ void ReplicatedPG::handle_pull_response(OpRequestRef op) queue_transaction( osr.get(), t, onreadable, - new C_OSD_CommittedPushedObject(this, op, - info.history.same_interval_since, - info.last_complete), + new C_OSD_CommittedPushedObject( + this, op, + get_osdmap()->get_epoch(), + info.last_complete), onreadable_sync, oncomplete, TrackedOpRef() @@ -5331,7 +5332,7 @@ void ReplicatedPG::handle_push(OpRequestRef op) onreadable, new C_OSD_CommittedPushedObject( this, op, - info.history.same_interval_since, + get_osdmap()->get_epoch(), info.last_complete), onreadable_sync, oncomplete, @@ -5612,10 +5613,11 @@ void ReplicatedPG::sub_op_pull(OpRequestRef op) } -void ReplicatedPG::_committed_pushed_object(OpRequestRef op, epoch_t same_since, eversion_t last_complete) +void ReplicatedPG::_committed_pushed_object( + OpRequestRef op, epoch_t epoch, eversion_t last_complete) { lock(); - if (same_since == info.history.same_interval_since) { + if (epoch >= last_peering_reset) { dout(10) << "_committed_pushed_object last_complete " << last_complete << " now ondisk" << dendl; last_complete_ondisk = last_complete; @@ -6440,9 +6442,10 @@ int ReplicatedPG::recover_primary(int max) osd->store->queue_transaction(osr.get(), t, new C_OSD_AppliedRecoveredObject(this, t, obc), - new C_OSD_CommittedPushedObject(this, OpRequestRef(), - info.history.same_interval_since, - info.last_complete), + new C_OSD_CommittedPushedObject( + this, OpRequestRef(), + get_osdmap()->get_epoch(), + info.last_complete), new C_OSD_OndiskWriteUnlock(obc)); continue; } diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 50af643163a2..87225ff7d057 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -792,13 +792,15 @@ protected: struct C_OSD_CommittedPushedObject : public Context { ReplicatedPG *pg; OpRequestRef op; - epoch_t same_since; + epoch_t epoch; eversion_t last_complete; - C_OSD_CommittedPushedObject(ReplicatedPG *p, OpRequestRef o, epoch_t ss, eversion_t lc) : pg(p), op(o), same_since(ss), last_complete(lc) { + C_OSD_CommittedPushedObject( + ReplicatedPG *p, OpRequestRef o, epoch_t epoch, eversion_t lc) : + pg(p), op(o), epoch(epoch), last_complete(lc) { pg->get(); } void finish(int r) { - pg->_committed_pushed_object(op, same_since, last_complete); + pg->_committed_pushed_object(op, epoch, last_complete); pg->put(); } }; @@ -850,7 +852,7 @@ protected: void sub_op_modify_reply(OpRequestRef op); void _applied_recovered_object(ObjectStore::Transaction *t, ObjectContext *obc); void _applied_recovered_object_replica(ObjectStore::Transaction *t); - void _committed_pushed_object(OpRequestRef op, epoch_t same_since, eversion_t lc); + void _committed_pushed_object(OpRequestRef op, epoch_t epoch, eversion_t lc); void recover_got(hobject_t oid, eversion_t v); void sub_op_push(OpRequestRef op); void _failed_push(OpRequestRef op);