summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-08-29 16:34:42 -0700
committerSage Weil <sage@inktank.com>2013-08-29 16:34:42 -0700
commit56ff4101a12e190caea9805dd5fb250ab5fa8e8c (patch)
tree24084e085525599382f021471609a80defaf930a
parent42d65b0a7057696f4b8094f7c686d467c075a64d (diff)
parent96aaa5e3a371ade8b91ad9ab991d996eaef2cea5 (diff)
downloadceph-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.cc8
-rw-r--r--src/test/osd/RadosModel.h40
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()