diff options
author | Sage Weil <sage@inktank.com> | 2013-08-29 16:34:42 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-29 16:34:42 -0700 |
commit | 56ff4101a12e190caea9805dd5fb250ab5fa8e8c (patch) | |
tree | 24084e085525599382f021471609a80defaf930a | |
parent | 42d65b0a7057696f4b8094f7c686d467c075a64d (diff) | |
parent | 96aaa5e3a371ade8b91ad9ab991d996eaef2cea5 (diff) | |
download | ceph-56ff4101a12e190caea9805dd5fb250ab5fa8e8c.tar.gz |
Merge pull request #559 from ceph/wip-osd-rollback
fixes a few osd dout bugs; make rados model behave with rollback
Reviewed-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/osd/ReplicatedPG.cc | 8 | ||||
-rw-r--r-- | src/test/osd/RadosModel.h | 40 |
2 files changed, 29 insertions, 19 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 86d2db51cdb..4a8f24dadd6 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4714,9 +4714,6 @@ int ReplicatedPG::find_object_context(const hobject_t& oid, void ReplicatedPG::object_context_destructor_callback(ObjectContext *obc) { - dout(10) << "object_context_destructor_callback " << obc << " " - << obc->obs.oi.soid << dendl; - if (obc->ssc) put_snapset_context(obc->ssc); } @@ -4765,7 +4762,6 @@ SnapSetContext *ReplicatedPG::create_snapset_context(const object_t& oid) { Mutex::Locker l(snapset_contexts_lock); SnapSetContext *ssc = new SnapSetContext(oid); - dout(10) << "create_snapset_context " << ssc << " " << ssc->oid << dendl; _register_snapset_context(ssc); ssc->ref++; return ssc; @@ -4803,8 +4799,6 @@ SnapSetContext *ReplicatedPG::get_snapset_context(const object_t& oid, } } assert(ssc); - dout(10) << "get_snapset_context " << ssc->oid << " " - << ssc->ref << " -> " << (ssc->ref+1) << dendl; ssc->ref++; return ssc; } @@ -4812,8 +4806,6 @@ SnapSetContext *ReplicatedPG::get_snapset_context(const object_t& oid, void ReplicatedPG::put_snapset_context(SnapSetContext *ssc) { Mutex::Locker l(snapset_contexts_lock); - dout(10) << "put_snapset_context " << ssc->oid << " " - << ssc->ref << " -> " << (ssc->ref-1) << dendl; --ssc->ref; if (ssc->ref == 0) { if (ssc->registered) diff --git a/src/test/osd/RadosModel.h b/src/test/osd/RadosModel.h index b2325341ca0..dad0d2d3a0a 100644 --- a/src/test/osd/RadosModel.h +++ b/src/test/osd/RadosModel.h @@ -1306,13 +1306,17 @@ class RollbackOp : public TestOp { public: string oid; int roll_back_to; + bool done; + librados::ObjectWriteOperation op; + librados::AioCompletion *comp; + RollbackOp(RadosTestContext *context, const string &_oid, int snap, TestOpStat *stat = 0) : TestOp(context, stat), oid(_oid), - roll_back_to(snap) + roll_back_to(snap), done(false) {} void _begin() @@ -1338,19 +1342,33 @@ public: context->state_lock.Unlock(); assert(!context->io_ctx.selfmanaged_snap_set_write_ctx(context->seq, snapset)); - - int r = context->io_ctx.selfmanaged_snap_rollback(context->prefix+oid, - snap); - if (r) { - cerr << "r is " << r << std::endl; + op.selfmanaged_snap_rollback(snap); + + pair<TestOp*, TestOp::CallbackInfo*> *cb_arg = + new pair<TestOp*, TestOp::CallbackInfo*>(this, + new TestOp::CallbackInfo(0)); + comp = context->rados.aio_create_completion((void*) cb_arg, &write_callback, + NULL); + context->io_ctx.aio_operate(context->prefix+oid, comp, &op); + } + + void _finish(CallbackInfo *info) + { + Mutex::Locker l(context->state_lock); + int r; + if ((r = comp->get_return_value())) { + cerr << "err " << r << std::endl; assert(0); } + done = true; + context->update_object_version(oid, comp->get_version()); + context->oid_in_use.erase(oid); + context->oid_not_in_use.insert(oid); + } - { - Mutex::Locker l(context->state_lock); - context->oid_in_use.erase(oid); - context->oid_not_in_use.insert(oid); - } + bool finished() + { + return done; } string getType() |