From ca4c166b7e2ef33601016035cc8aefc85faf66e1 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 30 Oct 2013 16:12:19 -0700 Subject: [PATCH] test/osd/RadosModel.h: select and reserve roll_back_to atomically Signed-off-by: Samuel Just Reviewed-by: Sage Weil --- src/test/osd/RadosModel.h | 15 +++++++++++++-- src/test/osd/TestRados.cc | 8 ++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/test/osd/RadosModel.h b/src/test/osd/RadosModel.h index ac2f336f1101e..902d4b970c3df 100644 --- a/src/test/osd/RadosModel.h +++ b/src/test/osd/RadosModel.h @@ -1325,11 +1325,10 @@ public: RollbackOp(int n, RadosTestContext *context, const string &_oid, - int snap, TestOpStat *stat = 0) : TestOp(n, context, stat), oid(_oid), - roll_back_to(snap), done(false) + roll_back_to(-1), done(false) {} void _begin() @@ -1340,10 +1339,22 @@ public: context->state_lock.Unlock(); return; } + + if (context->snaps.empty()) { + context->kick(); + context->state_lock.Unlock(); + done = true; + return; + } + context->oid_in_use.insert(oid); context->oid_not_in_use.erase(oid); + + roll_back_to = rand_choose(context->snaps)->first; context->snaps_in_use.insert(roll_back_to); + cout << "rollback oid " << oid << " to " << roll_back_to << std::endl; + context->roll_back(oid, roll_back_to); uint64_t snap = context->snaps[roll_back_to]; diff --git a/src/test/osd/TestRados.cc b/src/test/osd/TestRados.cc index 842f9d2bca3e1..0c1d55c7777e6 100644 --- a/src/test/osd/TestRados.cc +++ b/src/test/osd/TestRados.cc @@ -123,14 +123,10 @@ private: } case TEST_OP_ROLLBACK: - if (context.snaps.empty()) { - return NULL; - } { - int snap = rand_choose(context.snaps)->first; string oid = *(rand_choose(context.oid_not_in_use)); - cout << "rollback oid " << oid << " to " << snap << std::endl; - return new RollbackOp(m_op, &context, oid, snap); + cout << "rollback oid " << oid << std::endl; + return new RollbackOp(m_op, &context, oid); } case TEST_OP_SETATTR: -- 2.39.5