From e993ebdd0af9963fa63125efc991da3fa3124e1f Mon Sep 17 00:00:00 2001 From: songweibin Date: Thu, 22 Feb 2018 15:04:22 +0800 Subject: [PATCH] rbd: filter out UserSnapshotNamespace in do_disk_usage Signed-off-by: songweibin --- src/tools/rbd/Utils.cc | 11 +++++++++++ src/tools/rbd/Utils.h | 3 +++ src/tools/rbd/action/DiskUsage.cc | 7 ++++++- src/tools/rbd/action/Snap.cc | 17 +++-------------- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/tools/rbd/Utils.cc b/src/tools/rbd/Utils.cc index 8d3df85ea96d..73be804a78df 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 c265249fb379..4f5e921e3577 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 c8dadc8d76a8..ab7dfada2e18 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 533e3d4349af..e471c0710450 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) { -- 2.47.3