]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: filter out UserSnapshotNamespace in do_disk_usage 20532/head
authorsongweibin <song.weibin@zte.com.cn>
Thu, 22 Feb 2018 07:04:22 +0000 (15:04 +0800)
committersongweibin <song.weibin@zte.com.cn>
Thu, 22 Feb 2018 07:35:53 +0000 (15:35 +0800)
Signed-off-by: songweibin <song.weibin@zte.com.cn>
src/tools/rbd/Utils.cc
src/tools/rbd/Utils.h
src/tools/rbd/action/DiskUsage.cc
src/tools/rbd/action/Snap.cc

index 8d3df85ea96d7943fbc5dbe0ee5b52cb28a72351..73be804a78dfe2709d909869ba6251b1e1400147 100644 (file)
@@ -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
index c265249fb3799201a060225e430fd1f611702007..4f5e921e3577c3bb30007db4683973b4d395a405 100644 (file)
@@ -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);
index c8dadc8d76a8f1f52e0f795b22499ea6505af77b..ab7dfada2e1892a863e4e55b8179f5567723f13a 100644 (file)
@@ -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());
index 533e3d4349affbe68578da9d17230157be47ca49..e471c0710450d6c4638d416283c7316941baca21 100644 (file)
@@ -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<librbd::snap_info_t> 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) {