#include "Object.h"
#include "TestOpStat.h"
#include "test/librados/test.h"
+#include "common/sharedptr_registry.hpp"
#ifndef RADOSMODEL_H
#define RADOSMODEL_H
map<int, map<string,ObjectDesc> > pool_obj_cont;
set<string> oid_in_use;
set<string> oid_not_in_use;
- set<int> snaps_in_use;
+ SharedPtrRegistry<int, int> snaps_in_use;
int current_snap;
string pool_name;
librados::IoCtx io_ctx;
bool done;
librados::ObjectWriteOperation op;
librados::AioCompletion *comp;
+ std::tr1::shared_ptr<int> in_use;
RollbackOp(int n,
RadosTestContext *context,
context->oid_not_in_use.erase(oid);
roll_back_to = rand_choose(context->snaps)->first;
- context->snaps_in_use.insert(roll_back_to);
+ in_use = context->snaps_in_use.lookup_or_create(
+ roll_back_to,
+ roll_back_to);
cout << "rollback oid " << oid << " to " << roll_back_to << std::endl;
context->update_object_version(oid, comp->get_version64());
context->oid_in_use.erase(oid);
context->oid_not_in_use.insert(oid);
- context->snaps_in_use.erase(roll_back_to);
+ in_use = std::tr1::shared_ptr<int>();
context->kick();
}
}
while (true) {
int snap = rand_choose(context.snaps)->first;
- if (context.snaps_in_use.count(snap))
+ if (context.snaps_in_use.lookup(snap))
continue; // in use; try again!
cout << "snap_remove snap " << snap << std::endl;
return new SnapRemoveOp(m_op, &context, snap, m_stats);