librados::ObjectReadOperation op;
string oid;
std::shared_ptr<int> in_use;
+ int snap;
TierFlushOp(int n,
RadosTestContext *context,
TestOpStat *stat)
: TestOp(n, context, stat),
completion(NULL),
- oid(oid)
+ oid(oid),
+ snap(-1)
{}
void _begin() override
context->oid_in_use.insert(oid);
context->oid_not_in_use.erase(oid);
+ if (0 && !(rand() % 4) && !context->snaps.empty()) {
+ snap = rand_choose(context->snaps)->first;
+ in_use = context->snaps_in_use.lookup_or_create(snap, snap);
+ } else {
+ snap = -1;
+ }
+
+ if (snap >= 0) {
+ context->io_ctx.snap_set_read(context->snaps[snap]);
+ }
+
pair<TestOp*, TestOp::CallbackInfo*> *cb_arg =
new pair<TestOp*, TestOp::CallbackInfo*>(this,
new TestOp::CallbackInfo(0));
int r = context->io_ctx.aio_operate(context->prefix+oid, completion,
&op, flags, NULL);
ceph_assert(!r);
+
+ if (snap >= 0) {
+ context->io_ctx.snap_set_read(0);
+ }
}
void _finish(CallbackInfo *info) override
} else {
ceph_abort_msg("shouldn't happen");
}
- context->update_object_version(oid, completion->get_version64());
+ context->update_object_version(oid, completion->get_version64(), snap);
context->oid_in_use.erase(oid);
context->oid_not_in_use.insert(oid);
context->kick();