From: songweibin Date: Thu, 22 Feb 2018 07:04:22 +0000 (+0800) Subject: rbd: filter out UserSnapshotNamespace in do_disk_usage X-Git-Tag: wip-pdonnell-testing-20180317.202121~220^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e993ebdd0af9963fa63125efc991da3fa3124e1f;p=ceph-ci.git rbd: filter out UserSnapshotNamespace in do_disk_usage Signed-off-by: songweibin --- diff --git a/src/tools/rbd/Utils.cc b/src/tools/rbd/Utils.cc index 8d3df85ea96..73be804a78d 100644 --- a/src/tools/rbd/Utils.cc +++ b/src/tools/rbd/Utils.cc @@ -1099,5 +1099,16 @@ bool check_if_image_spec_present(const po::variables_map &vm, return false; } +bool is_not_user_snap_namespace(librbd::Image* image, + const librbd::snap_info_t &snap_info) +{ + librbd::snap_namespace_type_t namespace_type; + int r = image->snap_get_namespace_type(snap_info.id, &namespace_type); + if (r < 0) { + return false; + } + return namespace_type != RBD_SNAP_NAMESPACE_TYPE_USER; +} + } // namespace utils } // namespace rbd diff --git a/src/tools/rbd/Utils.h b/src/tools/rbd/Utils.h index c265249fb37..4f5e921e357 100644 --- a/src/tools/rbd/Utils.h +++ b/src/tools/rbd/Utils.h @@ -202,6 +202,9 @@ bool check_if_image_spec_present(const boost::program_options::variables_map &vm argument_types::ArgumentModifier mod, size_t spec_arg_index); +bool is_not_user_snap_namespace(librbd::Image* image, + const librbd::snap_info_t &snap_info); + std::string image_id(librbd::Image& image); std::string mirror_image_state(librbd::mirror_image_state_t mirror_image_state); diff --git a/src/tools/rbd/action/DiskUsage.cc b/src/tools/rbd/action/DiskUsage.cc index c8dadc8d76a..ab7dfada2e1 100644 --- a/src/tools/rbd/action/DiskUsage.cc +++ b/src/tools/rbd/action/DiskUsage.cc @@ -155,6 +155,11 @@ static int do_disk_usage(librbd::RBD &rbd, librados::IoCtx &io_ctx, continue; } + snap_list.erase(remove_if(snap_list.begin(), + snap_list.end(), + boost::bind(utils::is_not_user_snap_namespace, &image, _1)), + snap_list.end()); + bool found_from_snap = (from_snapname == nullptr); std::string last_snap_name; std::sort(snap_list.begin(), snap_list.end(), @@ -279,7 +284,7 @@ int execute(const po::variables_map &vm, librbd::RBD rbd; r = do_disk_usage(rbd, io_ctx, - image_name.empty() ? nullptr: image_name.c_str() , + image_name.empty() ? nullptr: image_name.c_str(), snap_name.empty() ? nullptr : snap_name.c_str(), from_snap_name.empty() ? nullptr : from_snap_name.c_str(), formatter.get()); diff --git a/src/tools/rbd/action/Snap.cc b/src/tools/rbd/action/Snap.cc index 533e3d4349a..e471c071045 100644 --- a/src/tools/rbd/action/Snap.cc +++ b/src/tools/rbd/action/Snap.cc @@ -22,17 +22,6 @@ static const std::string ALL_NAME("all"); namespace at = argument_types; namespace po = boost::program_options; -static bool is_not_user_snap_namespace(librbd::Image* image, - const librbd::snap_info_t &snap_info) -{ - librbd::snap_namespace_type_t namespace_type; - int r = image->snap_get_namespace_type(snap_info.id, &namespace_type); - if (r < 0) { - return false; - } - return namespace_type != RBD_SNAP_NAMESPACE_TYPE_USER; -} - int do_list_snaps(librbd::Image& image, Formatter *f, bool all_snaps, librados::Rados& rados) { std::vector snaps; @@ -47,9 +36,9 @@ int do_list_snaps(librbd::Image& image, Formatter *f, bool all_snaps, librados:: if (!all_snaps) { snaps.erase(remove_if(snaps.begin(), - snaps.end(), - boost::bind(is_not_user_snap_namespace, &image, _1)), - snaps.end()); + snaps.end(), + boost::bind(utils::is_not_user_snap_namespace, &image, _1)), + snaps.end()); } if (f) {