From 8d79bf2bcba1d09d8e5589c5a8ee6dca1d27f800 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Wed, 15 Mar 2017 14:12:35 -0400 Subject: [PATCH] librbd: removed legacy state machine callbacks from CreateRequest Signed-off-by: Jason Dillaman --- src/librbd/image/CreateRequest.cc | 208 ++++++++++++++---------------- src/librbd/image/CreateRequest.h | 30 ++--- 2 files changed, 111 insertions(+), 127 deletions(-) diff --git a/src/librbd/image/CreateRequest.cc b/src/librbd/image/CreateRequest.cc index 51a17a92835..538cc3d94e0 100644 --- a/src/librbd/image/CreateRequest.cc +++ b/src/librbd/image/CreateRequest.cc @@ -113,10 +113,6 @@ int get_image_option(const ImageOptions &image_options, int option, } // anonymous namespace -// TODO: do away with @m_op_work_queue -// This is used as a temporary measure to execute synchronous calls in -// worker thread (see callers of ->queue()). Once everything is made -// fully asynchronous this can be done away with. template CreateRequest::CreateRequest(IoCtx &ioctx, const std::string &image_name, const std::string &image_id, uint64_t size, @@ -286,16 +282,17 @@ void CreateRequest::validate_pool() { } template -Context* CreateRequest::handle_validate_pool(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_validate_pool(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result == 0) { + if (r == 0) { create_id_object(); - return nullptr; - } else if ((*result < 0) && (*result != -ENOENT)) { - lderr(m_cct) << "failed to stat RBD directory: " << cpp_strerror(*result) + return; + } else if ((r < 0) && (r != -ENOENT)) { + lderr(m_cct) << "failed to stat RBD directory: " << cpp_strerror(r) << dendl; - return m_on_finish; + complete(r); + return; } // allocate a self-managed snapshot id if this a new pool to force @@ -305,17 +302,17 @@ Context* CreateRequest::handle_validate_pool(int *result) { // deadlocks). uint64_t snap_id; - int r = m_ioctx.selfmanaged_snap_create(&snap_id); + r = m_ioctx.selfmanaged_snap_create(&snap_id); if (r == -EINVAL) { lderr(m_cct) << "pool not configured for self-managed RBD snapshot support" << dendl; - *result = r; - return m_on_finish; + complete(r); + return; } else if (r < 0) { lderr(m_cct) << "failed to allocate self-managed snapshot: " << cpp_strerror(r) << dendl; - *result = r; - return m_on_finish; + complete(r); + return; } r = m_ioctx.selfmanaged_snap_remove(snap_id); @@ -327,7 +324,6 @@ Context* CreateRequest::handle_validate_pool(int *result) { } create_id_object(); - return nullptr; } template @@ -347,17 +343,17 @@ void CreateRequest::create_id_object() { } template -Context *CreateRequest::handle_create_id_object(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_create_id_object(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { - lderr(m_cct) << "error creating RBD id object: " << cpp_strerror(*result) + if (r < 0) { + lderr(m_cct) << "error creating RBD id object: " << cpp_strerror(r) << dendl; - return m_on_finish; + complete(r); + return; } add_image_to_directory(); - return nullptr; } template @@ -376,20 +372,18 @@ void CreateRequest::add_image_to_directory() { } template -Context *CreateRequest::handle_add_image_to_directory(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_add_image_to_directory(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { - lderr(m_cct) << "error adding image to directory: " << cpp_strerror(*result) + if (r < 0) { + lderr(m_cct) << "error adding image to directory: " << cpp_strerror(r) << dendl; - m_r_saved = *result; + m_r_saved = r; remove_id_object(); - return nullptr; } negotiate_features(); - return nullptr; } template @@ -413,17 +407,17 @@ void CreateRequest::negotiate_features() { } template -Context *CreateRequest::handle_negotiate_features(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_negotiate_features(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; uint64_t all_features; - if (*result >= 0) { + if (r >= 0) { bufferlist::iterator it = m_outbl.begin(); - *result = cls_client::get_all_features_finish(&it, &all_features); + r = cls_client::get_all_features_finish(&it, &all_features); } - if (*result < 0) { + if (r < 0) { ldout(m_cct, 10) << "error retrieving server supported features set: " - << cpp_strerror(*result) << dendl; + << cpp_strerror(r) << dendl; } else if ((m_features & all_features) != m_features) { m_features &= all_features; ldout(m_cct, 10) << "limiting default features set to server supported: " @@ -431,7 +425,6 @@ Context *CreateRequest::handle_negotiate_features(int *result) { } create_image(); - return nullptr; } template @@ -465,18 +458,17 @@ void CreateRequest::create_image() { } template -Context *CreateRequest::handle_create_image(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_create_image(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { - lderr(m_cct) << "error writing header: " << cpp_strerror(*result) << dendl; - m_r_saved = *result; + if (r < 0) { + lderr(m_cct) << "error writing header: " << cpp_strerror(r) << dendl; + m_r_saved = r; remove_from_dir(); - return nullptr; + return; } set_stripe_unit_count(); - return nullptr; } template @@ -501,19 +493,18 @@ void CreateRequest::set_stripe_unit_count() { } template -Context *CreateRequest::handle_set_stripe_unit_count(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_set_stripe_unit_count(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { + if (r < 0) { lderr(m_cct) << "error setting stripe unit/count: " - << cpp_strerror(*result) << dendl; - m_r_saved = *result; + << cpp_strerror(r) << dendl; + m_r_saved = r; remove_header_object(); - return nullptr; + return; } object_map_resize(); - return nullptr; } template @@ -538,20 +529,19 @@ void CreateRequest::object_map_resize() { } template -Context *CreateRequest::handle_object_map_resize(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_object_map_resize(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { + if (r < 0) { lderr(m_cct) << "error creating initial object map: " - << cpp_strerror(*result) << dendl; + << cpp_strerror(r) << dendl; - m_r_saved = *result; + m_r_saved = r; remove_header_object(); - return nullptr; + return; } fetch_mirror_mode(); - return nullptr; } template @@ -576,28 +566,28 @@ void CreateRequest::fetch_mirror_mode() { } template -Context *CreateRequest::handle_fetch_mirror_mode(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_fetch_mirror_mode(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if ((*result < 0) && (*result != -ENOENT)) { - lderr(m_cct) << "failed to retrieve mirror mode: " << cpp_strerror(*result) + if ((r < 0) && (r != -ENOENT)) { + lderr(m_cct) << "failed to retrieve mirror mode: " << cpp_strerror(r) << dendl; - m_r_saved = *result; + m_r_saved = r; remove_object_map(); - return nullptr; + return; } cls::rbd::MirrorMode mirror_mode_internal = cls::rbd::MIRROR_MODE_DISABLED; - if (*result == 0) { + if (r == 0) { bufferlist::iterator it = m_outbl.begin(); - *result = cls_client::mirror_mode_get_finish(&it, &mirror_mode_internal); - if (*result < 0) { + r = cls_client::mirror_mode_get_finish(&it, &mirror_mode_internal); + if (r < 0) { lderr(m_cct) << "Failed to retrieve mirror mode" << dendl; - m_r_saved = *result; + m_r_saved = r; remove_object_map(); - return nullptr; + return; } } @@ -612,13 +602,12 @@ Context *CreateRequest::handle_fetch_mirror_mode(int *result) { lderr(m_cct) << "Unknown mirror mode (" << static_cast(mirror_mode_internal) << ")" << dendl; - *result = -EINVAL; + r = -EINVAL; remove_object_map(); - return nullptr; + return; } journal_create(); - return nullptr; } template @@ -642,20 +631,19 @@ void CreateRequest::journal_create() { } template -Context* CreateRequest::handle_journal_create(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_journal_create(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { - lderr(m_cct) << "error creating journal: " << cpp_strerror(*result) + if (r < 0) { + lderr(m_cct) << "error creating journal: " << cpp_strerror(r) << dendl; - m_r_saved = *result; + m_r_saved = r; remove_object_map(); - return nullptr; + return; } mirror_image_enable(); - return nullptr; } template @@ -676,18 +664,19 @@ void CreateRequest::mirror_image_enable() { } template -Context *CreateRequest::handle_mirror_image_enable(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_mirror_image_enable(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { - lderr(m_cct) << "cannot enable mirroring: " << cpp_strerror(*result) + if (r < 0) { + lderr(m_cct) << "cannot enable mirroring: " << cpp_strerror(r) << dendl; - m_r_saved = *result; + m_r_saved = r; journal_remove(); - return nullptr; + return; } - return m_on_finish; + + complete(0); } template @@ -724,16 +713,15 @@ void CreateRequest::journal_remove() { } template -Context *CreateRequest::handle_journal_remove(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_journal_remove(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { + if (r < 0) { lderr(m_cct) << "error cleaning up journal after creation failed: " - << cpp_strerror(*result) << dendl; + << cpp_strerror(r) << dendl; } remove_object_map(); - return nullptr; } template @@ -754,16 +742,15 @@ void CreateRequest::remove_object_map() { } template -Context *CreateRequest::handle_remove_object_map(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_remove_object_map(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { + if (r < 0) { lderr(m_cct) << "error cleaning up object map after creation failed: " - << cpp_strerror(*result) << dendl; + << cpp_strerror(r) << dendl; } remove_header_object(); - return nullptr; } template @@ -779,16 +766,15 @@ void CreateRequest::remove_header_object() { } template -Context *CreateRequest::handle_remove_header_object(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_remove_header_object(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { + if (r < 0) { lderr(m_cct) << "error cleaning up image header after creation failed: " - << cpp_strerror(*result) << dendl; + << cpp_strerror(r) << dendl; } remove_from_dir(); - return nullptr; } template @@ -807,16 +793,15 @@ void CreateRequest::remove_from_dir() { } template -Context *CreateRequest::handle_remove_from_dir(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_remove_from_dir(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { + if (r < 0) { lderr(m_cct) << "error cleaning up image from rbd_directory object " - << "after creation failed: " << cpp_strerror(*result) << dendl; + << "after creation failed: " << cpp_strerror(r) << dendl; } remove_id_object(); - return nullptr; } template @@ -832,16 +817,15 @@ void CreateRequest::remove_id_object() { } template -Context *CreateRequest::handle_remove_id_object(int *result) { - ldout(m_cct, 20) << __func__ << ": r=" << *result << dendl; +void CreateRequest::handle_remove_id_object(int r) { + ldout(m_cct, 20) << __func__ << ": r=" << r << dendl; - if (*result < 0) { + if (r < 0) { lderr(m_cct) << "error cleaning up id object after creation failed: " - << cpp_strerror(*result) << dendl; + << cpp_strerror(r) << dendl; } - *result = m_r_saved; - return m_on_finish; + complete(m_r_saved); } } //namespace image diff --git a/src/librbd/image/CreateRequest.h b/src/librbd/image/CreateRequest.h index b481d9ece1a..8a3464b5f3a 100644 --- a/src/librbd/image/CreateRequest.h +++ b/src/librbd/image/CreateRequest.h @@ -130,52 +130,52 @@ private: cls::rbd::MirrorImage m_mirror_image_internal; void validate_pool(); - Context *handle_validate_pool(int *result); + void handle_validate_pool(int r); void create_id_object(); - Context *handle_create_id_object(int *result); + void handle_create_id_object(int r); void add_image_to_directory(); - Context *handle_add_image_to_directory(int *result); + void handle_add_image_to_directory(int r); void negotiate_features(); - Context *handle_negotiate_features(int *result); + void handle_negotiate_features(int r); void create_image(); - Context *handle_create_image(int *result); + void handle_create_image(int r); void set_stripe_unit_count(); - Context *handle_set_stripe_unit_count(int *result); + void handle_set_stripe_unit_count(int r); void object_map_resize(); - Context *handle_object_map_resize(int *result); + void handle_object_map_resize(int r); void fetch_mirror_mode(); - Context *handle_fetch_mirror_mode(int *result); + void handle_fetch_mirror_mode(int r); void journal_create(); - Context *handle_journal_create(int *result); + void handle_journal_create(int r); void mirror_image_enable(); - Context *handle_mirror_image_enable(int *result); + void handle_mirror_image_enable(int r); void complete(int r); // cleanup void journal_remove(); - Context *handle_journal_remove(int *result); + void handle_journal_remove(int r); void remove_object_map(); - Context *handle_remove_object_map(int *result); + void handle_remove_object_map(int r); void remove_header_object(); - Context *handle_remove_header_object(int *result); + void handle_remove_header_object(int r); void remove_from_dir(); - Context *handle_remove_from_dir(int *result); + void handle_remove_from_dir(int r); void remove_id_object(); - Context *handle_remove_id_object(int *result); + void handle_remove_id_object(int r); }; } //namespace image -- 2.39.5