context->io_ctx.snap_set_read(context->snaps[snap]);
}
+ context->find_object(oid, &src_value, snap);
+
pair<TestOp*, TestOp::CallbackInfo*> *cb_arg =
new pair<TestOp*, TestOp::CallbackInfo*>(this,
new TestOp::CallbackInfo(0));
// sucess
} else if (r == -EBUSY) {
// could fail if snap is not oldest
- } else if (r == -ENOENT) {
- // could fail if obj is removed
+ } else if (r == -ENOENT && src_value.deleted()) {
+ // could fail if object is removed
} else {
ceph_abort_msg("shouldn't happen");
}
string oid;
std::shared_ptr<int> in_use;
int snap;
+ ObjectDesc src_value;
TierEvictOp(int n,
RadosTestContext *context,
{
context->state_lock.lock();
+ 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);
context->io_ctx.snap_set_read(context->snaps[snap]);
}
+ context->find_object(oid, &src_value, snap);
+
pair<TestOp*, TestOp::CallbackInfo*> *cb_arg =
new pair<TestOp*, TestOp::CallbackInfo*>(this,
new TestOp::CallbackInfo(0));
// modifying manifeset object makes existing chunk_map clear
// as a result, the modified object is no longer manifest object
// this casues to return -EINVAL
- } else if (r == -ENOENT) {
- // may have raced with a remove?
+ } else if (r == -ENOENT && src_value.deleted()) {
+ // could fail if object is removed
} else {
ceph_abort_msg("shouldn't happen");
}
+ context->oid_in_use.erase(oid);
+ context->oid_not_in_use.insert(oid);
context->kick();
done = true;
}