diff options
author | Samuel Just <sam.just@inktank.com> | 2013-02-25 12:35:26 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-03-04 13:53:55 -0800 |
commit | 3e596678fde87bc6083b9f0c1be72666ee8c8bc3 (patch) | |
tree | ed142917eb0abc8d24262a5fcb3a38bab42639df | |
parent | 1cfc3ae0d45013bae9dc0e955e6848105ffb46ea (diff) | |
download | ceph-3e596678fde87bc6083b9f0c1be72666ee8c8bc3.tar.gz |
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 <sam.just@inktank.com>
(cherry picked from commit a01dea6af9aacf0614570ebb5fa161d9dde9b6b6)
-rw-r--r-- | src/osd/ReplicatedPG.cc | 21 | ||||
-rw-r--r-- | src/osd/ReplicatedPG.h | 10 |
2 files changed, 18 insertions, 13 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index becba7afab0..134a612d7bd 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5440,9 +5440,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() @@ -5513,7 +5514,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, @@ -5794,10 +5795,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; @@ -6617,9 +6619,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 ae506e55074..800477003dd 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -885,13 +885,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(); } }; @@ -943,7 +945,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); |