summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-02-25 12:35:26 -0800
committerSage Weil <sage@inktank.com>2013-03-04 13:53:55 -0800
commit3e596678fde87bc6083b9f0c1be72666ee8c8bc3 (patch)
treeed142917eb0abc8d24262a5fcb3a38bab42639df
parent1cfc3ae0d45013bae9dc0e955e6848105ffb46ea (diff)
downloadceph-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.cc21
-rw-r--r--src/osd/ReplicatedPG.h10
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);