From: Loic Dachary Date: Mon, 3 Mar 2014 13:36:50 +0000 (+0100) Subject: mon: create crush_ruleset_create_erasure helper X-Git-Tag: v0.79~136^2~30 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6a16eac7fe10fa2780a35fae2b4f6043a9fd71cb;p=ceph.git mon: create crush_ruleset_create_erasure helper Move the code bloc verbatim, from "osd crush rule create-erasure" to the new crush_ruleset_create_erasure() method helper. This step helps separate the code changes from the code moving around unmodified. Signed-off-by: Loic Dachary --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 7733809ffbdf..beb92a9a3203 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2807,6 +2807,44 @@ int OSDMonitor::prepare_new_pool(MPoolOp *m) properties, pg_pool_t::TYPE_REPLICATED, ss); } +int OSDMonitor::crush_ruleset_create_erasure(const string &name, + const map &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 &properties, ErasureCodeInterfaceRef *erasure_code, stringstream &ss) @@ -3860,43 +3898,12 @@ bool OSDMonitor::prepare_command_impl(MMonCommand *m, vector 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 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)); diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 8a87374739b0..4734549f6347 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -240,6 +240,10 @@ private: 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 &properties, + int *ruleset, + stringstream &ss); int get_erasure_code(const map &properties, ErasureCodeInterfaceRef *erasure_code, stringstream &ss);