Update to at least work with Ceph 14.x (maybe with newer versions too)

master
Vitaliy Filippov 2022-01-18 01:08:26 +03:00
parent cffb273cda
commit 420debc2f5
3 changed files with 21 additions and 12 deletions

View File

@ -6,7 +6,7 @@ LDFLAGS += -pthread -lrados -ljsoncpp -lstdc++ -g -ltcmalloc
#CC=clang-6.0
main: main.o mysignals.o radosutil.o
ceph-bench: main.o mysignals.o radosutil.o
$(CC) $^ -o $@ $(LDFLAGS)
clean:

View File

@ -275,7 +275,7 @@ static void _main(int argc, const char *argv[])
if (settings->pool.empty() || settings->mode.empty())
{
cerr << "Usage: " << argv[0]
<< " [poolname] [mode=host|osd] <specific item name to test>" << endl;
<< " <poolname> <mode=host|osd> [specific item name to test]" << endl;
throw "Wrong cmdline";
}
@ -321,16 +321,24 @@ static void _main(int argc, const char *argv[])
for (const auto &osd : rados_utils.get_osds(settings->pool))
{
const auto &location = rados_utils.get_osd_location(osd);
auto location = rados_utils.get_osd_location(osd);
location["osd"] = std::to_string(osd);
// TODO: do not fill this map if specific_bench_item specified
osd2location[osd] = location;
const auto &qwe = location.at(settings->mode);
if (settings->specific_bench_item.empty() ||
qwe == settings->specific_bench_item)
if (location.find(settings->mode) != location.end())
{
bench_items.insert(qwe);
const auto &osd_loc = location.at(settings->mode);
if (settings->specific_bench_item.empty() ||
osd_loc == settings->specific_bench_item)
{
bench_items.insert(osd_loc);
}
}
else
{
cerr << "CRUSH '" << settings->mode << "' location not found for " << osd << endl;
throw "CRUSH location not found";
}
}
@ -372,7 +380,7 @@ static void _main(int argc, const char *argv[])
{
const auto &bench_item = p.first;
const auto &obj_names = p.second;
cout << "Benching " << settings->mode << " " << bench_item << endl;
cout << "Benchmarking " << settings->mode << " " << bench_item << endl;
do_bench(settings, obj_names, ioctx);
}
}

View File

@ -33,7 +33,6 @@ unsigned int RadosUtils::get_obj_acting_primary(const string &name,
return acting_primary.asUInt();
}
// TODO: std::map copying ? return unique_ptr ?
map<string, string> RadosUtils::get_osd_location(unsigned int osd) {
Json::Value cmd(Json::objectValue);
cmd["prefix"] = "osd find";
@ -53,16 +52,18 @@ map<string, string> RadosUtils::get_osd_location(unsigned int osd) {
return result;
}
// todo: std::set copying
set<unsigned int> RadosUtils::get_osds(const string &pool) {
Json::Value cmd(Json::objectValue);
cmd["prefix"] = "pg ls-by-pool";
cmd["poolstr"] = pool;
const auto &&pgs = do_mon_command(cmd);
auto pgs = do_mon_command(cmd);
set<unsigned int> osds;
if (pgs.isMember("pg_stats")) {
pgs = pgs["pg_stats"];
}
for (const auto &pg : pgs) {
const auto &primary = pg["acting_primary"];
if (!primary.isNumeric())