From: Jason Dillaman Date: Fri, 11 May 2018 17:11:36 +0000 (-0400) Subject: rbd: disable cache for actions that open multiple images X-Git-Tag: v14.0.0~140^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F21946%2Fhead;p=ceph.git rbd: disable cache for actions that open multiple images Fixes: http://tracker.ceph.com/issues/24092 Signed-off-by: Jason Dillaman --- diff --git a/src/tools/rbd/Utils.cc b/src/tools/rbd/Utils.cc index 73be804a78df..334156721c2c 100644 --- a/src/tools/rbd/Utils.cc +++ b/src/tools/rbd/Utils.cc @@ -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; diff --git a/src/tools/rbd/Utils.h b/src/tools/rbd/Utils.h index 84f7e6bf9d3e..9822a8856ecb 100644 --- a/src/tools/rbd/Utils.h +++ b/src/tools/rbd/Utils.h @@ -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); diff --git a/src/tools/rbd/action/DiskUsage.cc b/src/tools/rbd/action/DiskUsage.cc index 5705bdfe780d..1f3a6d5ead7c 100644 --- a/src/tools/rbd/action/DiskUsage.cc +++ b/src/tools/rbd/action/DiskUsage.cc @@ -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(), diff --git a/src/tools/rbd/action/List.cc b/src/tools/rbd/action/List.cc index e6810b9a4c0d..08b6ab1baeb2 100644 --- a/src/tools/rbd/action/List.cc +++ b/src/tools/rbd/action/List.cc @@ -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; diff --git a/src/tools/rbd/action/MirrorPool.cc b/src/tools/rbd/action/MirrorPool.cc index a2f10cd1d82d..e4312bf6181b 100644 --- a/src/tools/rbd/action/MirrorPool.cc +++ b/src/tools/rbd/action/MirrorPool.cc @@ -972,6 +972,8 @@ int execute_promote(const po::variables_map &vm, return r; } + utils::disable_cache(); + std::atomic counter = { 0 }; ImageRequestGenerator generator(io_ctx, &counter, vm["force"].as()); @@ -1003,6 +1005,8 @@ int execute_demote(const po::variables_map &vm, return r; } + utils::disable_cache(); + std::atomic counter { 0 }; ImageRequestGenerator generator(io_ctx, &counter); r = generator.execute(); diff --git a/src/tools/rbd/action/Trash.cc b/src/tools/rbd/action/Trash.cc index c9cda70cd414..e9f6592bea49 100644 --- a/src/tools/rbd/action/Trash.cc +++ b/src/tools/rbd/action/Trash.cc @@ -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(), vm["all"].as(), 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;