]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: disable cache for actions that open multiple images 21946/head
authorJason Dillaman <dillaman@redhat.com>
Fri, 11 May 2018 17:11:36 +0000 (13:11 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 11 May 2018 17:11:36 +0000 (13:11 -0400)
Fixes: http://tracker.ceph.com/issues/24092
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/tools/rbd/Utils.cc
src/tools/rbd/Utils.h
src/tools/rbd/action/DiskUsage.cc
src/tools/rbd/action/List.cc
src/tools/rbd/action/MirrorPool.cc
src/tools/rbd/action/Trash.cc

index 73be804a78dfe2709d909869ba6251b1e1400147..334156721c2c63dfa85644c32ef1b6b42b959e78 100644 (file)
@@ -907,6 +907,10 @@ int init_io_ctx(librados::Rados &rados, const std::string &pool_name,
   return 0;
 }
 
+void disable_cache() {
+  g_conf->set_val_or_die("rbd_cache", "false");
+}
+
 int open_image(librados::IoCtx &io_ctx, const std::string &image_name,
                bool read_only, librbd::Image *image) {
   int r;
index 84f7e6bf9d3eaf7ea49069fbb2ad9bb0358af142..9822a8856ecbb82dd79564129bce32681fdcec3b 100644 (file)
@@ -178,6 +178,8 @@ int init(const std::string &pool_name, librados::Rados *rados,
 int init_io_ctx(librados::Rados &rados, const std::string &pool_name,
                 librados::IoCtx *io_ctx);
 
+void disable_cache();
+
 int open_image(librados::IoCtx &io_ctx, const std::string &image_name,
                bool read_only, librbd::Image *image);
 
index 5705bdfe780d17a37f3209bf06fda28f31b6aa0d..1f3a6d5ead7c3056f65426a76ce26837da552241 100644 (file)
@@ -283,6 +283,8 @@ int execute(const po::variables_map &vm,
     return r;
   }
 
+  utils::disable_cache();
+
   librbd::RBD rbd;
   r = do_disk_usage(rbd, io_ctx,
                     image_name.empty() ? nullptr: image_name.c_str(),
index e6810b9a4c0d542230ea4a672bd29a7cdbae0b1a..08b6ab1baeb2410f143bef741307dcbf71827799 100644 (file)
@@ -163,6 +163,8 @@ int do_list(std::string &pool_name, bool lflag, int threads, Formatter *f) {
     return r;
   }
 
+  utils::disable_cache();
+
   r = rbd.list(ioctx, names);
   if (r < 0)
     return r;
index a2f10cd1d82d78f73aa4d9ff7f3eed1c477f9699..e4312bf6181b851a7abcffc77139d52c9f2d9511 100644 (file)
@@ -972,6 +972,8 @@ int execute_promote(const po::variables_map &vm,
     return r;
   }
 
+  utils::disable_cache();
+
   std::atomic<unsigned> counter = { 0 };
   ImageRequestGenerator<PromoteImageRequest> generator(io_ctx, &counter,
                                                        vm["force"].as<bool>());
@@ -1003,6 +1005,8 @@ int execute_demote(const po::variables_map &vm,
     return r;
   }
 
+  utils::disable_cache();
+
   std::atomic<unsigned> counter { 0 };
   ImageRequestGenerator<DemoteImageRequest> generator(io_ctx, &counter);
   r = generator.execute();
index c9cda70cd414f8ea0489e0f0db111040ede3fbf7..e9f6592bea490417c4b1e653fc75b2662dd369c3 100644 (file)
@@ -346,6 +346,8 @@ int execute_list(const po::variables_map &vm,
     return r;
   }
 
+  utils::disable_cache();
+
   librbd::RBD rbd;
   r = do_list(rbd, io_ctx, vm["long"].as<bool>(), vm["all"].as<bool>(),
               formatter.get());
@@ -384,6 +386,8 @@ int execute_purge (const po::variables_map &vm,
     return r;
   }
 
+  utils::disable_cache();
+
   io_ctx.set_osdmap_full_try();
   librbd::RBD rbd;