// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab #include "gtest/gtest.h" #include "mds/mdstypes.h" #include "include/buffer.h" #include "include/rbd_types.h" #include "include/rados/librados.h" #include "include/rados/librados.hpp" #include "include/stringify.h" #include "include/types.h" #include "global/global_context.h" #include "global/global_init.h" #include "common/ceph_argparse.h" #include "common/common_init.h" #include "common/Cond.h" #include "json_spirit/json_spirit.h" #include #include #include #include using namespace std; using namespace librados; int get_primary_osd(Rados& rados, const string& pool_name, const string& oid, int *pprimary) { bufferlist inbl; string cmd = string("{\"prefix\": \"osd map\",\"pool\":\"") + pool_name + string("\",\"object\": \"") + oid + string("\",\"format\": \"json\"}"); bufferlist outbl; if (int r = rados.mon_command(cmd, inbl, &outbl, nullptr); r < 0) { return r; } string outstr(outbl.c_str(), outbl.length()); json_spirit::Value v; if (!json_spirit::read(outstr, v)) { cerr <<" unable to parse json " << outstr << std::endl; return -1; } json_spirit::Object& o = v.get_obj(); for (json_spirit::Object::size_type i=0; i