From 1295813f2af63dac016ae4d9612626de6bca6c3d Mon Sep 17 00:00:00 2001 From: Christopher Hoffman Date: Fri, 4 Feb 2022 21:25:53 +0000 Subject: [PATCH] rbd: support pool and image level overrides for rbd_default_map_options Fixes: https://tracker.ceph.com/issues/52850 Signed-off-by: Christopher Hoffman (cherry picked from commit 9afc9712824a92fd6bdb2574c5880ab835236ed1) --- src/librbd/api/Config.cc | 1 - src/tools/rbd/action/Kernel.cc | 29 ++++++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/librbd/api/Config.cc b/src/librbd/api/Config.cc index 07e37162b4340..8148607e39ff2 100644 --- a/src/librbd/api/Config.cc +++ b/src/librbd/api/Config.cc @@ -28,7 +28,6 @@ typedef std::map> Pare static std::set EXCLUDE_OPTIONS { "rbd_auto_exclusive_lock_until_manual_request", "rbd_default_format", - "rbd_default_map_options", "rbd_default_pool", "rbd_discard_on_zeroed_write_same", "rbd_op_thread_timeout", diff --git a/src/tools/rbd/action/Kernel.cc b/src/tools/rbd/action/Kernel.cc index 1c09a49ff4cb1..cb59334652a55 100644 --- a/src/tools/rbd/action/Kernel.cc +++ b/src/tools/rbd/action/Kernel.cc @@ -551,14 +551,33 @@ int execute_map(const po::variables_map &vm, utils::normalize_pool_name(&pool_name); - MapOptions default_map_options; - r = parse_map_options( - g_conf().get_val("rbd_default_map_options"), - &default_map_options); + librados::IoCtx ioctx; + librbd::Image image; + r = utils::init_io_ctx(rados, pool_name, nspace_name, &ioctx); + if (r < 0) { + return r; + } + + r = utils::open_image(ioctx, image_name, true, &image); if (r < 0) { - std::cerr << "rbd: couldn't parse default map options" << std::endl; return r; } + + MapOptions default_map_options; + std::vector options; + image.config_list(&options); + for (const auto &option : options) { + if (option.name == "rbd_default_map_options") { + r = parse_map_options(option.value, &default_map_options); + if (r < 0) { + std::cerr << "rbd: couldn't parse default map options" << std::endl; + return r; + } + + break; + } + } + for (auto& [key, value] : default_map_options) { if (map_options.count(key) == 0) { map_options[key] = value; -- 2.39.5