Ignore the profile 'directory' field.
This ensures that we can always find plugins even when teh cluster
is installed across a mix of distros.
Rename the option to have no osd_ (or mon_) prefix since anybody
may use the ec factory/plugin code.
We still hard-code .libs in the unit tests... sigh.
Signed-off-by: Sage Weil <sage@redhat.com>
--mon-data-avail-crit=1 \
--paxos-propose-interval=0.1 \
--osd-crush-chooseleaf-type=0 \
- --osd-pool-default-erasure-code-directory=.libs \
+ --erasure-code-dir=.libs \
--debug-mon 20 \
--debug-ms 20 \
--debug-paxos 20 \
ceph_args+=" --osd-journal-size=100"
ceph_args+=" --osd-data=$osd_data"
ceph_args+=" --chdir="
- ceph_args+=" --osd-pool-default-erasure-code-directory=.libs"
+ ceph_args+=" --erasure-code-dir=.libs"
ceph_args+=" --osd-class-dir=.libs"
ceph_args+=" --run-dir=$dir"
ceph_args+=" --debug-osd=20"
int preload_erasure_code()
{
- string directory = g_conf->osd_pool_default_erasure_code_directory;
string plugins = g_conf->osd_erasure_code_plugins;
stringstream ss;
- int r = ErasureCodePluginRegistry::instance().preload(plugins,
- directory,
- &ss);
+ int r = ErasureCodePluginRegistry::instance().preload(
+ plugins,
+ g_conf->erasure_code_dir,
+ &ss);
if (r)
derr << ss.str() << dendl;
else
int preload_erasure_code()
{
- string directory = g_conf->osd_pool_default_erasure_code_directory;
string plugins = g_conf->osd_erasure_code_plugins;
stringstream ss;
- int r = ErasureCodePluginRegistry::instance().preload(plugins,
- directory,
- &ss);
+ int r = ErasureCodePluginRegistry::instance().preload(
+ plugins,
+ g_conf->erasure_code_dir,
+ &ss);
if (r)
derr << ss.str() << dendl;
else
OPTION(restapi_log_level, OPT_STR, "") // default set by Python code
OPTION(restapi_base_url, OPT_STR, "") // "
OPTION(fatal_signal_handlers, OPT_BOOL, true)
+OPTION(erasure_code_dir, OPT_STR, CEPH_PKGLIBDIR"/erasure-code") // default location for erasure-code plugins
OPTION(log_file, OPT_STR, "/var/log/ceph/$cluster-$name.log") // default changed by common_preinit()
OPTION(log_max_new, OPT_INT, 1000) // default changed by common_preinit()
OPTION(osd_pool_default_min_size, OPT_INT, 0) // 0 means no specific default; ceph will use size-size/2
OPTION(osd_pool_default_pg_num, OPT_INT, 8) // number of PGs for new pools. Configure in global or mon section of ceph.conf
OPTION(osd_pool_default_pgp_num, OPT_INT, 8) // number of PGs for placement purposes. Should be equal to pg_num
-OPTION(osd_pool_default_erasure_code_directory, OPT_STR, CEPH_PKGLIBDIR"/erasure-code") // default for the erasure-code-directory=XXX property of osd pool create
OPTION(osd_pool_default_erasure_code_profile,
OPT_STR,
"plugin=jerasure "
}
int ErasureCodePluginRegistry::factory(const std::string &plugin_name,
+ const std::string &directory,
ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss)
plugin = get(plugin_name);
if (plugin == 0) {
loading = true;
- assert(profile.count("directory") != 0);
- int r = load(plugin_name, profile.find("directory")->second, &plugin, ss);
+ int r = load(plugin_name, directory, &plugin, ss);
loading = false;
if (r != 0)
return r;
}
}
- int r = plugin->factory(profile, erasure_code, ss);
+ int r = plugin->factory(directory, profile, erasure_code, ss);
if (r)
return r;
if (profile != (*erasure_code)->get_profile()) {
library(0) {}
virtual ~ErasureCodePlugin() {}
- virtual int factory(ErasureCodeProfile &profile,
+ virtual int factory(const std::string &directory,
+ ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss) = 0;
};
}
int factory(const std::string &plugin,
+ const std::string &directory,
ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss);
public:
ErasureCodeIsaTableCache tcache;
- virtual int factory(ErasureCodeProfile &profile,
+ virtual int factory(const std::string &directory,
+ ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss)
{
class ErasureCodePluginJerasure : public ErasureCodePlugin {
public:
- virtual int factory(ErasureCodeProfile &profile,
+ virtual int factory(const std::string& directory,
+ ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss) {
ErasureCodeJerasure *interface;
class ErasureCodePluginSelectJerasure : public ErasureCodePlugin {
public:
- virtual int factory(ErasureCodeProfile &profile,
+ virtual int factory(const std::string &directory,
+ ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss) {
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
dout(10) << "jerasure-variant "
<< profile.find("jerasure-variant")->second << dendl;
ret = instance.factory(name + "_" + profile.find("jerasure-variant")->second,
+ directory,
profile, erasure_code, ss);
} else {
string variant = get_variant();
dout(10) << variant << " plugin" << dendl;
- ret = instance.factory(name + "_" + variant, profile, erasure_code, ss);
+ ret = instance.factory(name + "_" + variant, directory,
+ profile, erasure_code, ss);
}
return ret;
}
if (layer.profile.find("directory") == layer.profile.end())
layer.profile["directory"] = directory;
int err = registry.factory(layer.profile["plugin"],
+ directory,
layer.profile,
&layer.erasure_code,
ss);
};
vector<Step> ruleset_steps;
- ErasureCodeLrc() :
- chunk_count(0), data_chunk_count(0), ruleset_root("default")
+ ErasureCodeLrc(const std::string &dir)
+ : directory(dir),
+ chunk_count(0), data_chunk_count(0), ruleset_root("default")
{
ruleset_steps.push_back(Step("chooseleaf", "host", 0));
}
class ErasureCodePluginLrc : public ErasureCodePlugin {
public:
- virtual int factory(ErasureCodeProfile &profile,
+ virtual int factory(const std::string &directory,
+ ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss) {
ErasureCodeLrc *interface;
- interface = new ErasureCodeLrc();
+ interface = new ErasureCodeLrc(directory);
assert(profile.count("directory") != 0);
int r = interface->init(profile, ss);
if (r) {
class ErasureCodePluginSelectShec : public ErasureCodePlugin {
public:
- virtual int factory(ErasureCodeProfile &profile,
+ virtual int factory(const std::string &directory,
+ ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss) {
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
dout(10) << "shec-variant "
<< profile.find("shec-variant")->second << dendl;
ret = instance.factory(name + "_" + profile.find("shec-variant")->second,
+ directory,
profile, erasure_code, ss);
} else {
string variant = get_variant();
dout(10) << variant << " plugin" << dendl;
- ret = instance.factory(name + "_" + variant, profile, erasure_code, ss);
+ ret = instance.factory(name + "_" + variant, directory,
+ profile, erasure_code, ss);
}
return ret;
}
public:
ErasureCodeShecTableCache tcache;
- virtual int factory(ErasureCodeProfile &profile,
+ virtual int factory(const std::string &directory,
+ ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss) {
ErasureCodeShec *interface;
ErasureCodeInterfaceRef erasure_code;
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
ErasureCodeProfile::const_iterator plugin = profile.find("plugin");
- int err = instance.factory(plugin->second, profile, &erasure_code, ss);
+ int err = instance.factory(plugin->second,
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, ss);
if (err)
return err;
return erasure_code->init(profile, ss);
return -EINVAL;
}
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
- return instance.factory(plugin->second, profile, erasure_code, ss);
+ return instance.factory(plugin->second,
+ g_conf->erasure_code_dir,
+ profile, erasure_code, ss);
}
int OSDMonitor::check_cluster_features(uint64_t features,
if ((*erasure_code_profile_map).count("directory") == 0)
(*erasure_code_profile_map)["directory"] =
- g_conf->osd_pool_default_erasure_code_directory;
+ g_conf->erasure_code_dir;
return 0;
}
*ss,
&profile_map);
profile_map["directory"] =
- cct->_conf->osd_pool_default_erasure_code_directory;
+ cct->_conf->erasure_code_dir;
return r;
}
stringstream ss;
ceph::ErasureCodePluginRegistry::instance().factory(
profile.find("plugin")->second,
+ g_conf->erasure_code_dir,
profile,
&ec_impl,
&ss);
CEPH_ARGS+=" --mon-host=$MONA"
CEPH_ARGS+=" --log-file=$DIR/\$name.log"
CEPH_ARGS+=" --pid-file=$DIR/\$name.pidfile"
-CEPH_ARGS+=" --osd-pool-default-erasure-code-directory=.libs"
+CEPH_ARGS+=" --erasure-code-dir=.libs"
CEPH_ARGS+=" --auth-supported=none"
CEPH_ARGS+=" --osd-journal-size=100"
CEPH_DISK_ARGS=
class ErasureCodePluginExample : public ErasureCodePlugin {
public:
- virtual int factory(ErasureCodeProfile &profile,
+ virtual int factory(const std::string &directory,
+ ErasureCodeProfile &profile,
ErasureCodeInterfaceRef *erasure_code,
ostream *ss)
{
#include "erasure-code/ErasureCode.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
class ErasureCodeTest : public ErasureCode {
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
#include "erasure-code/isa/xor_op.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
ErasureCodeIsaTableCache tcache;
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
#include "erasure-code/jerasure/ErasureCodeJerasure.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
template <typename T>
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
#include "erasure-code/lrc/ErasureCodeLrc.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
TEST(ErasureCodeLrc, parse_ruleset)
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
EXPECT_EQ("default", lrc.ruleset_root);
EXPECT_EQ("host", lrc.ruleset_steps.front().type);
}
}
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
EXPECT_EQ(0, lrc.create_ruleset("rule1", *c, &cerr));
ErasureCodeProfile profile;
TEST(ErasureCodeLrc, parse_kml)
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
EXPECT_EQ(0, lrc.parse_kml(profile, &cerr));
profile["k"] = "4";
TEST(ErasureCodeLrc, layers_description)
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
json_spirit::mArray description;
TEST(ErasureCodeLrc, layers_parse)
{
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
const char *description_string ="[ 0 ]";
}
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
const char *description_string ="[ [ 0 ] ]";
}
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
const char *description_string ="[ [ \"\", 0 ] ]";
// profile.
//
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
const char *description_string ="[ [ \"\", { \"a\": \"b\" }, \"ignored\" ] ]";
// profile.
//
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
const char *description_string ="[ [ \"\", \"a=b c=d\" ] ]";
TEST(ErasureCodeLrc, layers_sanity_checks)
{
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["mapping"] =
"__DDD__DD";
EXPECT_EQ(0, lrc.init(profile, &cerr));
}
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
const char *description_string =
"[ "
EXPECT_EQ(ERROR_LRC_MAPPING, lrc.init(profile, &cerr));
}
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["mapping"] = "";
const char *description_string =
EXPECT_EQ(ERROR_LRC_LAYERS_COUNT, lrc.init(profile, &cerr));
}
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["directory"] = ".libs";
profile["mapping"] =
TEST(ErasureCodeLrc, layers_init)
{
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
const char *description_string =
TEST(ErasureCodeLrc, init)
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["mapping"] =
"__DDD__DD";
TEST(ErasureCodeLrc, init_kml)
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["k"] = "4";
profile["m"] = "2";
{
// trivial : no erasures, the minimum is want_to_read
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["mapping"] =
"__DDD__DD";
}
// locally repairable erasure
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["mapping"] =
"__DDD__DD_";
}
// implicit parity required
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["mapping"] =
"__DDD__DD";
TEST(ErasureCodeLrc, encode_decode)
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["mapping"] =
"__DD__DD";
TEST(ErasureCodeLrc, encode_decode_2)
{
- ErasureCodeLrc lrc;
+ ErasureCodeLrc lrc(g_conf->erasure_code_dir);
ErasureCodeProfile profile;
profile["mapping"] =
"DD__DD__";
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
#include "erasure-code/ErasureCodePlugin.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
class ErasureCodePluginRegistryTest : public ::testing::Test {
profile["directory"] = ".libs";
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
ErasureCodeInterfaceRef erasure_code;
- instance.factory("hangs", profile, &erasure_code, &cerr);
+ instance.factory("hangs",
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, &cerr);
return NULL;
}
};
ErasureCodeInterfaceRef erasure_code;
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(-EIO, instance.factory("invalid", profile, &erasure_code, &cerr));
+ EXPECT_EQ(-EIO, instance.factory("invalid",
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, &cerr));
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(-EXDEV, instance.factory("missing_version", profile,
+ EXPECT_EQ(-EXDEV, instance.factory("missing_version",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(-ENOENT, instance.factory("missing_entry_point", profile,
+ EXPECT_EQ(-ENOENT, instance.factory("missing_entry_point",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(-ESRCH, instance.factory("fail_to_initialize", profile,
+ EXPECT_EQ(-ESRCH, instance.factory("fail_to_initialize",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(-EBADF, instance.factory("fail_to_register", profile,
+ EXPECT_EQ(-EBADF, instance.factory("fail_to_register",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(0, instance.factory("example", profile, &erasure_code, &cerr));
+ EXPECT_EQ(0, instance.factory("example",
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, &cerr));
EXPECT_TRUE(erasure_code.get());
ErasureCodePlugin *plugin = 0;
{
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
#include "erasure-code/ErasureCodePlugin.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
TEST(ErasureCodePlugin, factory)
{
ErasureCodeInterfaceRef erasure_code;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(-EIO, instance.factory("no-isa", profile,
- &erasure_code, &cerr));
+ EXPECT_EQ(-EIO, instance.factory("no-isa",
+ g_conf->erasure_code_dir,
+ profile,
+ &erasure_code, &cerr));
EXPECT_FALSE(erasure_code);
}
const char *techniques[] = {
ErasureCodeInterfaceRef erasure_code;
profile["technique"] = *technique;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(0, instance.factory("isa", profile,
+ EXPECT_EQ(0, instance.factory("isa",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_TRUE(erasure_code.get());
}
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
#include "erasure-code/ErasureCodePlugin.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
TEST(ErasureCodePlugin, factory)
{
ErasureCodeInterfaceRef erasure_code;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(-ENOENT, instance.factory("jerasure", profile,
+ EXPECT_EQ(-ENOENT, instance.factory("jerasure",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_FALSE(erasure_code);
}
profile["directory"] = ".libs";
profile["technique"] = *technique;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(0, instance.factory("jerasure", profile,
+ EXPECT_EQ(0, instance.factory("jerasure",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_TRUE(erasure_code.get());
}
ErasureCodeInterfaceRef erasure_code;
int sse4_side_effect = -444;
- EXPECT_EQ(sse4_side_effect, instance.factory("jerasure", profile,
+ EXPECT_EQ(sse4_side_effect, instance.factory("jerasure",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
}
// pclmul is missing, load the SSE3 plugin
ErasureCodeInterfaceRef erasure_code;
int sse3_side_effect = -333;
- EXPECT_EQ(sse3_side_effect, instance.factory("jerasure", profile,
+ EXPECT_EQ(sse3_side_effect, instance.factory("jerasure",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
}
// pclmul and sse3 are missing, load the generic plugin
ErasureCodeInterfaceRef erasure_code;
int generic_side_effect = -111;
- EXPECT_EQ(generic_side_effect, instance.factory("jerasure", profile,
+ EXPECT_EQ(generic_side_effect, instance.factory("jerasure",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
}
// neon is set, load the neon plugin
ErasureCodeInterfaceRef erasure_code;
int generic_side_effect = -555;
- EXPECT_EQ(generic_side_effect, instance.factory("jerasure", profile,
+ EXPECT_EQ(generic_side_effect, instance.factory("jerasure",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
}
//
ErasureCodeInterfaceRef erasure_code;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(0, instance.factory("jerasure_" + *sse_variant, profile,
+ EXPECT_EQ(0, instance.factory("jerasure_" + *sse_variant,
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_TRUE(erasure_code.get());
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
#include "erasure-code/ErasureCodePlugin.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
TEST(ErasureCodePlugin, factory)
profile["layers"] = "[ [ \"DDc\", \"\" ] ]";
ErasureCodeInterfaceRef erasure_code;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(0, instance.factory("lrc", profile, &erasure_code, &cerr));
+ EXPECT_EQ(0, instance.factory("lrc",
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, &cerr));
EXPECT_TRUE(erasure_code.get());
}
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
#include "erasure-code/ErasureCodePlugin.h"
#include "common/ceph_argparse.h"
#include "global/global_context.h"
+#include "common/config.h"
#include "gtest/gtest.h"
TEST(ErasureCodePlugin, factory)
{
ErasureCodeInterfaceRef erasure_code;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(0, instance.factory("shec", profile,
- &erasure_code, &cerr));
+ EXPECT_EQ(0, instance.factory("shec",
+ g_conf->erasure_code_dir,
+ profile,
+ &erasure_code, &cerr));
EXPECT_TRUE(erasure_code.get());
}
const char *techniques[] = {
profile["directory"] = ".libs";
profile["technique"] = *technique;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(0, instance.factory("shec", profile,
+ EXPECT_EQ(0, instance.factory("shec",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_TRUE(erasure_code.get());
}
ErasureCodeInterfaceRef erasure_code;
int sse4_side_effect = -444;
- EXPECT_EQ(sse4_side_effect, instance.factory("shec", profile,
+ EXPECT_EQ(sse4_side_effect, instance.factory("shec",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
}
// pclmul is missing, load the SSE3 plugin
ErasureCodeInterfaceRef erasure_code;
int sse3_side_effect = -333;
- EXPECT_EQ(sse3_side_effect, instance.factory("shec", profile,
+ EXPECT_EQ(sse3_side_effect, instance.factory("shec",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
}
// pclmul and sse3 are missing, load the generic plugin
ErasureCodeInterfaceRef erasure_code;
int generic_side_effect = -111;
- EXPECT_EQ(generic_side_effect, instance.factory("shec", profile,
+ EXPECT_EQ(generic_side_effect, instance.factory("shec",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
}
// neon is set, load the neon plugin
ErasureCodeInterfaceRef erasure_code;
int generic_side_effect = -555;
- EXPECT_EQ(generic_side_effect, instance.factory("shec", profile,
+ EXPECT_EQ(generic_side_effect, instance.factory("shec",
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
}
//
ErasureCodeInterfaceRef erasure_code;
EXPECT_FALSE(erasure_code);
- EXPECT_EQ(0, instance.factory("shec_" + *sse_variant, profile,
+ EXPECT_EQ(0, instance.factory("shec_" + *sse_variant,
+ g_conf->erasure_code_dir,
+ profile,
&erasure_code, &cerr));
EXPECT_TRUE(erasure_code.get());
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
r = RUN_ALL_TESTS();
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
create_table_shec432();
global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0);
common_init_finish(g_ceph_context);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
+
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
ErasureCodePlugin *plugin = 0;
Mutex::Locker l(instance.lock);
stringstream ss;
- int code = instance.load(vm["plugin_exists"].as<string>(), profile["directory"], &plugin, &ss);
+ int code = instance.load(vm["plugin_exists"].as<string>(),
+ g_conf->erasure_code_dir, &plugin, &ss);
if (code)
cerr << ss.str() << endl;
return code;
}
int code = instance.factory(profile["plugin"],
+ g_conf->erasure_code_dir,
profile,
&erasure_code, &cerr);
if (code)
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
ErasureCodeInterfaceRef erasure_code;
stringstream messages;
- int code = instance.factory(plugin, profile, &erasure_code, &messages);
+ int code = instance.factory(plugin,
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, &messages);
if (code) {
cerr << messages.str() << endl;
return code;
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
ErasureCodeInterfaceRef erasure_code;
stringstream messages;
- int code = instance.factory(plugin, profile, &erasure_code, &messages);
+ int code = instance.factory(plugin,
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, &messages);
if (code) {
cerr << messages.str() << endl;
return code;
CINIT_FLAG_NO_DEFAULT_CONFIG_FILE);
common_init_finish(g_ceph_context);
g_ceph_context->_conf->apply_changes(NULL);
+ g_conf->set_val("erasure_code_dir", ".libs", false, false);
if (vm.count("help")) {
cout << desc << std::endl;
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
ErasureCodeInterfaceRef erasure_code;
stringstream messages;
- int code = instance.factory(plugin, profile, &erasure_code, &messages);
+ int code = instance.factory(plugin,
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, &messages);
if (code) {
cerr << messages.str() << endl;
return code;
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
ErasureCodeInterfaceRef erasure_code;
stringstream messages;
- int code = instance.factory(plugin, profile, &erasure_code, &messages);
+ int code = instance.factory(plugin,
+ g_conf->erasure_code_dir,
+ profile, &erasure_code, &messages);
if (code) {
cerr << messages.str() << endl;
return code;
./ceph-mon \
--id $MON_ID \
--fsid $fsid \
- --osd-pool-default-erasure-code-directory=.libs \
+ --erasure-code-dir=.libs \
--mkfs \
--mon-data=$MON_DIR \
--mon-initial-members=$MON_ID \
--chdir= \
--mon-osd-full-ratio=.99 \
--mon-data-avail-crit=1 \
- --osd-pool-default-erasure-code-directory=.libs \
+ --erasure-code-dir=.libs \
--mon-data=$MON_DIR \
--log-file=$MON_DIR/log \
--mon-cluster-log-file=$MON_DIR/log \
--id $MON_ID \
--mon-osd-full-ratio=.99 \
--mon-data-avail-crit=1 \
- --osd-pool-default-erasure-code-directory=.libs \
+ --erasure-code-dir=.libs \
--mon-data=$MON_DIR \
--extract-monmap $MON_DIR/monmap
--id $MON_ID \
--mon-osd-full-ratio=.99 \
--mon-data-avail-crit=1 \
- --osd-pool-default-erasure-code-directory=.libs \
+ --erasure-code-dir=.libs \
--mkfs \
--mon-data=$toodeep 2>&1 | tee $DIR/makedir.log
grep 'toodeep.*No such file' $DIR/makedir.log > /dev/null
mon osd full ratio = .99
mon data avail warn = 10
mon data avail crit = 1
- osd pool default erasure code directory = $EC_PATH
+ erasure code dir = $EC_PATH
osd pool default erasure code profile = plugin=jerasure technique=reed_sol_van k=2 m=1 ruleset-failure-domain=osd
rgw frontends = fastcgi, civetweb port=$CEPH_RGW_PORT
rgw dns name = localhost