OSDPoolGetReply actually returns a lot more values than what is currently supplied. These have been added in as optionals (as they can not be give as well) so its possible to query them to find out if they exist and use them if they do.
Signed-off-by: Jon Bailey <jonathan.bailey1@ibm.com>
}
void OSDPoolGetReply::dump(Formatter* f) const {
+ encode_json("size", size, f);
+ encode_json("min_size", min_size, f);
+ encode_json("pg_num", pg_num, f);
+ encode_json("pgp_num", pgp_num, f);
+ encode_json("crush_rule", crush_rule, f);
+ encode_json("allow_ec_overwrites", allow_ec_overwrites, f);
+ encode_json("nodelete", nodelete, f);
+ encode_json("nopgchange", nopgchange, f);
+ encode_json("nosizechange", nosizechange, f);
+ encode_json("noscrub", noscrub, f);
+ encode_json("nodeep-scrub", nodeep_scrub, f);
encode_json("erasure_code_profile", erasure_code_profile, f);
+ encode_json("fast_read", fast_read, f);
encode_json("allow_ec_optimizations", allow_ec_optimizations, f);
}
void OSDPoolGetReply::decode_json(JSONObj* obj) {
+ JSONDecoder::decode_json("size", size, obj);
+ JSONDecoder::decode_json("min_size", min_size, obj);
+ JSONDecoder::decode_json("pg_num", pg_num, obj);
+ JSONDecoder::decode_json("pgp_num", pgp_num, obj);
+ JSONDecoder::decode_json("crush_rule", crush_rule, obj);
+ JSONDecoder::decode_json("allow_ec_overwrites", allow_ec_overwrites, obj);
+ JSONDecoder::decode_json("nodelete", nodelete, obj);
+ JSONDecoder::decode_json("nopgchange", nopgchange, obj);
+ JSONDecoder::decode_json("nosizechange", nosizechange, obj);
+ JSONDecoder::decode_json("noscrub", noscrub, obj);
+ JSONDecoder::decode_json("nodeep-scrub", nodeep_scrub, obj);
JSONDecoder::decode_json("erasure_code_profile", erasure_code_profile, obj);
+ JSONDecoder::decode_json("fast_read", fast_read, obj);
JSONDecoder::decode_json("allow_ec_optimizations", allow_ec_optimizations, obj);
}
struct OSDPoolGetRequest {
std::string pool;
- std::string var = "erasure_code_profile";
+ std::string var;
std::string format = "json";
void dump(Formatter* f) const;
};
struct OSDPoolGetReply {
- std::string erasure_code_profile;
- bool allow_ec_optimizations;
+ std::optional<int> size;
+ std::optional<int> min_size;
+ std::optional<int> pg_num;
+ std::optional<int> pgp_num;
+ std::optional<std::string> crush_rule;
+ std::optional<bool> allow_ec_overwrites;
+ std::optional<bool> nodelete;
+ std::optional<bool> nopgchange;
+ std::optional<bool> nosizechange;
+ std::optional<bool> noscrub;
+ std::optional<bool> nodeep_scrub;
+ std::optional<std::string> erasure_code_profile;
+ std::optional<int> fast_read;
+ std::optional<bool> allow_ec_optimizations;
+
void dump(Formatter* f) const;
void decode_json(JSONObj* obj);
};
*/
bool RadosCommands::get_pool_allow_ec_optimizations(const std::string& pool_name)
{
- ceph::messaging::osd::OSDPoolGetRequest osd_pool_get_request{pool_name, "allow_ec_optimizations"};
+ ceph::messaging::osd::OSDPoolGetRequest osd_pool_get_request{pool_name, "all"};
encode_json("OSDPoolGetRequest", osd_pool_get_request, formatter.get());
std::ostringstream oss;
ceph::messaging::osd::OSDPoolGetReply osd_pool_get_reply;
osd_pool_get_reply.decode_json(&p);
- return osd_pool_get_reply.allow_ec_optimizations;
+ return osd_pool_get_reply.allow_ec_optimizations.value_or(false);
}
/**
*/
std::string RadosCommands::get_pool_ec_profile_name(const std::string& pool_name)
{
- ceph::messaging::osd::OSDPoolGetRequest osd_pool_get_request{pool_name};
+ ceph::messaging::osd::OSDPoolGetRequest osd_pool_get_request{pool_name, "all"};
encode_json("OSDPoolGetRequest", osd_pool_get_request, formatter.get());
std::ostringstream oss;
ceph::messaging::osd::OSDPoolGetReply osd_pool_get_reply;
osd_pool_get_reply.decode_json(&p);
- return osd_pool_get_reply.erasure_code_profile;
+ if (!osd_pool_get_reply.erasure_code_profile) {
+ throw std::runtime_error("No profile for given pool. "
+ "Is it an Erasure Coded pool?");
+ }
+
+ return *osd_pool_get_reply.erasure_code_profile;
}
/**
guard.emplace(boost::asio::make_work_guard(asio));
thread = make_named_thread("io_thread",[&asio] { asio.run(); });
- auto checker = ceph::consistency::ConsistencyChecker(rados, asio, pool);
- checker.single_read_and_check_consistency(oid, blocksize, offset, length);
- checker.print_results(std::cout);
+ try {
+ auto checker = ceph::consistency::ConsistencyChecker(rados, asio, pool);
+ checker.single_read_and_check_consistency(oid, blocksize, offset, length);
+ checker.print_results(std::cout);
+ } catch (std::runtime_error& e) {
+ std::cerr << e.what() << std::endl;
+ exit(1);
+ }
exit(0);
}
\ No newline at end of file
bufferlist inbl, outbl;
auto formatter = std::make_shared<JSONFormatter>(false);
- ceph::messaging::osd::OSDPoolGetRequest osdPoolGetRequest{*force_value};
+ ceph::messaging::osd::OSDPoolGetRequest osdPoolGetRequest{*force_value,
+ "all"};
rc = send_mon_command(osdPoolGetRequest, rados, "OSDPoolGetRequest", inbl,
&outbl, formatter.get());
ceph_assert(rc == 0);