size_t conf_prefix_len = prefix.size();
string start = prefix;
- int r = 0, j = 0;
for (map<string, bufferlist>::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;
}
}
"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;
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);
void aware_metadata_confs();
static bool _aware_metadata_confs(const string &prefix, const char **configs, size_t len,
map<string, bufferlist> &pairs, map<string, bufferlist> *res);
+ };
}
#endif
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<string, bufferlist> 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);
+}