From 27465b5916b55ac3c2846c74b89f4362ad17ff1e Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Mon, 9 Jan 2017 18:31:21 +0100 Subject: [PATCH] librbd: metadata_set API operation should not change global config setting Fixes: http://tracker.ceph.com/issues/18465 Signed-off-by: Mykola Golub --- src/librbd/Operations.cc | 3 ++- src/test/librbd/test_librbd.cc | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/librbd/Operations.cc b/src/librbd/Operations.cc index 3d4dd0d479f5..895bdad0cc50 100644 --- a/src/librbd/Operations.cc +++ b/src/librbd/Operations.cc @@ -1342,8 +1342,9 @@ int Operations::metadata_set(const std::string &key, size_t conf_prefix_len = start.size(); if (key.size() > conf_prefix_len && !key.compare(0, conf_prefix_len, start)) { + // validate config setting string subkey = key.substr(conf_prefix_len, key.size() - conf_prefix_len); - int r = cct->_conf->set_val(subkey.c_str(), value); + int r = md_config_t().set_val(subkey.c_str(), value); if (r < 0) { return r; } diff --git a/src/test/librbd/test_librbd.cc b/src/test/librbd/test_librbd.cc index 0b2e0b212811..bda3cab33b42 100644 --- a/src/test/librbd/test_librbd.cc +++ b/src/test/librbd/test_librbd.cc @@ -3946,6 +3946,11 @@ TEST_F(TestLibRBD, Metadata) ASSERT_EQ(1U, pairs.size()); ASSERT_EQ(0, strncmp("value2", pairs["key2"].c_str(), 6)); + // test config setting + ASSERT_EQ(0, image1.metadata_set("conf_rbd_cache", "false")); + ASSERT_EQ(-EINVAL, image1.metadata_set("conf_rbd_cache", "INVALID_VALUE")); + ASSERT_EQ(0, image1.metadata_remove("conf_rbd_cache")); + // test metadata with snapshot adding ASSERT_EQ(0, image1.snap_create("snap1")); ASSERT_EQ(0, image1.snap_protect("snap1")); -- 2.47.3