Skip to content

Commit

Permalink
Merge branch 'async_remove' into wip-mgolub-testing
Browse files Browse the repository at this point in the history
[DNM] librbd: asynchronous image removal state machine #12102
  • Loading branch information
Mykola Golub committed Nov 28, 2016
2 parents 06a0eb5 + 24de125 commit 28156c6
Show file tree
Hide file tree
Showing 10 changed files with 822 additions and 219 deletions.
36 changes: 25 additions & 11 deletions src/cls/rbd/cls_rbd_client.cc
Expand Up @@ -916,25 +916,39 @@ namespace librbd {

/******************** rbd_directory object methods ********************/

int dir_get_id(librados::IoCtx *ioctx, const std::string &oid,
const std::string &name, std::string *id)
{
bufferlist in, out;
::encode(name, in);
int r = ioctx->exec(oid, "rbd", "dir_get_id", in, out);
if (r < 0)
return r;
void dir_get_id_start(librados::ObjectReadOperation *op,
const std::string &image_name) {
bufferlist bl;
::encode(image_name, bl);

bufferlist::iterator iter = out.begin();
op->exec("rbd", "dir_get_id", bl);
}

int dir_get_id_finish(bufferlist::iterator *iter, std::string *image_id) {
try {
::decode(*id, iter);
::decode(*image_id, *iter);
} catch (const buffer::error &err) {
return -EBADMSG;
return -EBADMSG;
}

return 0;
}

int dir_get_id(librados::IoCtx *ioctx, const std::string &oid,
const std::string &name, std::string *id) {
librados::ObjectReadOperation op;
dir_get_id_start(&op, name);

bufferlist out_bl;
int r = ioctx->operate(oid, &op, &out_bl);
if (r < 0) {
return r;
}

bufferlist::iterator iter = out_bl.begin();
return dir_get_id_finish(&iter, id);
}

void dir_get_name_start(librados::ObjectReadOperation *op,
const std::string &id) {
bufferlist in_bl;
Expand Down
3 changes: 3 additions & 0 deletions src/cls/rbd/cls_rbd_client.h
Expand Up @@ -194,6 +194,9 @@ namespace librbd {
// operations on rbd_directory objects
int dir_get_id(librados::IoCtx *ioctx, const std::string &oid,
const std::string &name, std::string *id);
void dir_get_id_start(librados::ObjectReadOperation *op,
const std::string &image_name);
int dir_get_id_finish(bufferlist::iterator *iter, std::string *image_id);
void dir_get_name_start(librados::ObjectReadOperation *op,
const std::string &id);
int dir_get_name_finish(bufferlist::iterator *it, std::string *name);
Expand Down
1 change: 1 addition & 0 deletions src/librbd/CMakeLists.txt
Expand Up @@ -40,6 +40,7 @@ set(librbd_internal_srcs
image/RefreshParentRequest.cc
image/RefreshRequest.cc
image/SetFlagsRequest.cc
image/RemoveRequest.cc
image/SetSnapRequest.cc
image_watcher/NotifyLockOwner.cc
image_watcher/RewatchRequest.cc
Expand Down
2 changes: 1 addition & 1 deletion src/librbd/Operations.cc
Expand Up @@ -1326,7 +1326,7 @@ void Operations<I>::execute_update_features(uint64_t features, bool enabled,
} else {
operation::DisableFeaturesRequest<I> *req =
new operation::DisableFeaturesRequest<I>(
m_image_ctx, on_finish, journal_op_tid, features);
m_image_ctx, on_finish, journal_op_tid, features, false);
req->send();
}
}
Expand Down

0 comments on commit 28156c6

Please sign in to comment.