#include "common/config.h"
#include "common/Formatter.h"
#include "include/ceph_features.h"
-
+#include "include/str_map.h"
+#include "erasure-code/ErasureCodePlugin.h"
#include "common/code_environment.h"
#define dout_subsys ceph_subsys_osd
erasure_code_profile_map["directory"] =
cct->_conf->osd_pool_default_erasure_code_directory;
set_erasure_code_profile("default", erasure_code_profile_map);
+
+ map<string,string>::const_iterator plugin =
+ erasure_code_profile_map.find("plugin");
+ if (plugin == erasure_code_profile_map.end()) {
+ ss << "cannot determine the erasure code plugin"
+ << " because there is no 'plugin' entry in the erasure_code_profile "
+ << erasure_code_profile_map;
+ return -EINVAL;
+ }
+ ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
+ ErasureCodeInterfaceRef erasure_code;
+ r = instance.factory(plugin->second, erasure_code_profile_map,
+ &erasure_code, ss);
+ if (r)
+ return r;
+
+ r = erasure_code->create_ruleset("erasure-code", *crush, &ss);
+ if (r < 0)
+ return r;
+
return r;
}