properties, pg_pool_t::TYPE_REPLICATED, ss);
}
+int OSDMonitor::crush_ruleset_create_erasure(const string &name,
+ const map<string,string> &properties,
+ int *ruleset,
+ stringstream &ss)
+{
+ if (osdmap.crush->rule_exists(name)) {
+ ss << "rule " << name << " already exists";
+ err = 0;
+ goto reply;
+ }
+
+ CrushWrapper newcrush;
+ _get_pending_crush(newcrush);
+
+ if (newcrush.rule_exists(name)) {
+ ss << "rule " << name << " already exists";
+ err = 0;
+ } else {
+ ErasureCodeInterfaceRef erasure_code;
+ err = get_erasure_code(properties_map, &erasure_code, ss);
+ if (err) {
+ ss << "failed to load plugin using properties " << properties_map;
+ goto reply;
+ }
+
+ int rule = erasure_code->create_ruleset(name, newcrush, &ss);
+ erasure_code.reset();
+ if (rule < 0) {
+ err = rule;
+ goto reply;
+ }
+ ss << "created rule " << name << " at " << rule;
+ pending_inc.crush.clear();
+ newcrush.encode(pending_inc.crush);
+ }
+
+}
+
int OSDMonitor::get_erasure_code(const map<string,string> &properties,
ErasureCodeInterfaceRef *erasure_code,
stringstream &ss)
vector<string> properties;
cmd_getval(g_ceph_context, cmdmap, "properties", properties);
- if (osdmap.crush->rule_exists(name)) {
- ss << "rule " << name << " already exists";
- err = 0;
- goto reply;
- }
-
map<string,string> properties_map;
err = prepare_pool_properties(pg_pool_t::TYPE_ERASURE,
properties, &properties_map, ss);
if (err)
goto reply;
- CrushWrapper newcrush;
- _get_pending_crush(newcrush);
-
- if (newcrush.rule_exists(name)) {
- ss << "rule " << name << " already exists";
- err = 0;
- } else {
- ErasureCodeInterfaceRef erasure_code;
- err = get_erasure_code(properties_map, &erasure_code, ss);
- if (err) {
- ss << "failed to load plugin using properties " << properties_map;
- goto reply;
- }
-
- int rule = erasure_code->create_ruleset(name, newcrush, &ss);
- erasure_code.reset();
- if (rule < 0) {
- err = rule;
- goto reply;
- }
- ss << "created rule " << name << " at " << rule;
- pending_inc.crush.clear();
- newcrush.encode(pending_inc.crush);
- }
-
getline(ss, rs);
wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs,
get_last_committed() + 1));
bool prepare_pool_op (MPoolOp *m);
bool prepare_pool_op_create (MPoolOp *m);
bool prepare_pool_op_delete(MPoolOp *m);
+ int crush_ruleset_create_erasure(const string &name,
+ const map<string,string> &properties,
+ int *ruleset,
+ stringstream &ss);
int get_erasure_code(const map<string,string> &properties,
ErasureCodeInterfaceRef *erasure_code,
stringstream &ss);