From: Haomai Wang Date: Mon, 30 Mar 2015 09:46:42 +0000 (+0800) Subject: Librbd: Add tests for aware metadata config X-Git-Tag: v9.0.1~147^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cf715bd3e1e54ae4b315dd38847b70fa137b27df;p=ceph.git Librbd: Add tests for aware metadata config Signed-off-by: Haomai Wang --- diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 9fd209fa1278..f884bd422518 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -811,14 +811,14 @@ namespace librbd { size_t conf_prefix_len = prefix.size(); string start = prefix; - int r = 0, j = 0; for (map::iterator it = pairs.begin(); it != pairs.end(); ++it) { - if (it->first.size() <= conf_prefix_len || !it->first.compare(0, conf_prefix_len, prefix)) + if (it->first.size() <= conf_prefix_len || it->first.compare(0, conf_prefix_len, prefix)) return false; - for (int i = 0; i < len; ++i) { - if (!it->first.compare(conf_prefix_len, it->first.size() - conf_prefix_len, configs[i])) { - res->insert(make_pair(it->first, it->second)); + for (size_t i = 0; i < len; ++i) { + string key = it->first.substr(conf_prefix_len, it->first.size() - conf_prefix_len); + if (!key.compare(configs[i])) { + res->insert(make_pair(key, it->second)); break; } } @@ -841,7 +841,6 @@ namespace librbd { "rbd_balance_snap_reads" }; static uint64_t max_conf_items = 128; - size_t conf_prefix_len = METADATA_CONF_PREFIX.size(); string start = METADATA_CONF_PREFIX; int r = 0, j = 0; @@ -853,6 +852,8 @@ namespace librbd { lderr(cct) << __func__ << " couldn't list conf metadatas: " << r << dendl; break; } + if (pairs.empty()) + break; is_continue = _aware_metadata_confs(METADATA_CONF_PREFIX, aware_confs, sizeof(aware_confs) / sizeof(char*), pairs, &res); diff --git a/src/librbd/ImageCtx.h b/src/librbd/ImageCtx.h index 7e883f8371bb..45ab38b79229 100644 --- a/src/librbd/ImageCtx.h +++ b/src/librbd/ImageCtx.h @@ -210,6 +210,7 @@ namespace librbd { void aware_metadata_confs(); static bool _aware_metadata_confs(const string &prefix, const char **configs, size_t len, map &pairs, map *res); + }; } #endif diff --git a/src/test/librbd/test_internal.cc b/src/test/librbd/test_internal.cc index a6d1bcf529f2..7a4b7cbd03b3 100644 --- a/src/test/librbd/test_internal.cc +++ b/src/test/librbd/test_internal.cc @@ -361,3 +361,40 @@ TEST_F(TestInternal, MultipleResize) { ASSERT_EQ(0, librbd::get_size(ictx, &size)); ASSERT_EQ(0U, size); } + +TEST_F(TestInternal, MetadatConfig) { + REQUIRE_FEATURE(RBD_FEATURE_LAYERING); + + const char *test_confs[] = { + "aaaaaaa", + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + "cccccccccccccc", + }; + const string prefix = "test_config_"; + bool is_continue; + librbd::ImageCtx *ictx; + ASSERT_EQ(0, open_image(m_image_name, &ictx)); + + librbd::Image image1; + map pairs, res; + pairs[prefix+test_confs[0]].append("value1"); + pairs[prefix+test_confs[1]].append("value2"); + pairs[prefix+test_confs[2]].append("value3"); + pairs[prefix+"asdfsdaf"].append("value6"); + pairs[prefix+"zxvzxcv123"].append("value5"); + + is_continue = ictx->_aware_metadata_confs(prefix, test_confs, sizeof(test_confs) / sizeof(char*), + pairs, &res); + ASSERT_TRUE(is_continue); + ASSERT_TRUE(res.size() == 3U); + ASSERT_TRUE(res.count(test_confs[0])); + ASSERT_TRUE(res.count(test_confs[1])); + ASSERT_TRUE(res.count(test_confs[2])); + res.clear(); + + pairs["zzzzzzzz"].append("value7"); + is_continue = ictx->_aware_metadata_confs(prefix, test_confs, sizeof(test_confs) / sizeof(char*), + pairs, &res); + ASSERT_FALSE(is_continue); + ASSERT_TRUE(res.size() == 3U); +}