#include <common/perf_counters_collection.h>
+#include <fmt/format.h>
#include "test/librados/test_cxx.h"
#include "test/librados/testcase_cxx.h"
#include "crimson_utils.h"
using namespace cls;
using namespace rados::cls;
-typedef RadosTestPP LibRadosSplitOpPP;
+class LibRadosSplitOpPP : public RadosTestPP {
+public:
+ static void SetUpTestCase() {
+ auto pool_prefix = fmt::format("{}_", ::testing::UnitTest::GetInstance()->current_test_case()->name());
+ pool_name_default = get_temp_pool_name(pool_prefix);
+ std::map<std::string, std::string> config = {{"rados_replica_read_policy", "default"}};
+ ASSERT_EQ("", connect_cluster_pp(s_cluster, config));
+ ASSERT_EQ("", create_pool_pp(pool_name_default, s_cluster, 3));
+ s_cluster.wait_for_latest_osdmap();
+ }
+};
+
typedef RadosTestECPP LibRadosSplitOpECPP;
// After a write is committed, it isn't necessarily true that the log is
return err;
}
-std::string create_pool_pp(const std::string &pool_name, Rados &cluster) {
- int ret = cluster.pool_create(pool_name.c_str());
- if (ret) {
- cluster.shutdown();
- std::ostringstream oss;
- oss << "cluster.pool_create(" << pool_name << ") failed with error " << ret;
- return oss.str();
+std::string create_pool_pp(const std::string &pool_name, Rados &cluster, int size) {
+ std::ostringstream oss;
+ int ret;
+ if (size > 0) {
+ ret = cluster.mon_command(
+ "{\"prefix\": \"osd pool create\", \"pool\": \"" + pool_name +
+ "\", \"size\": " + std::to_string(size) + "}",
+ {}, NULL, NULL);
+ if (ret) {
+ oss << "mon_command osd pool create pool:" << pool_name
+ << " size:" << size << " failed with error " << ret;
+ return oss.str();
+ }
+ } else {
+ ret = cluster.pool_create(pool_name.c_str());
+ if (ret) {
+ cluster.shutdown();
+ oss << "cluster.pool_create(" << pool_name << ") failed with error " << ret;
+ return oss.str();
+ }
}
IoCtx ioctx;
ret = cluster.ioctx_create(pool_name.c_str(), ioctx);
if (ret < 0) {
cluster.shutdown();
- std::ostringstream oss;
- oss << "cluster.ioctx_create(" << pool_name << ") failed with error "
- << ret;
+ oss << "cluster.ioctx_create(" << pool_name << ") failed with error " << ret;
return oss.str();
}
ioctx.application_enable("rados", true);
librados::Rados &cluster,
bool fast_ec = false);
std::string create_pool_pp(const std::string &pool_name,
- librados::Rados &cluster);
+ librados::Rados &cluster,
+ int size = 0);
std::string set_allow_ec_overwrites_pp(const std::string &pool_name,
librados::Rados &cluster, bool allow);
std::string connect_cluster_pp(librados::Rados &cluster);