From: Loic Dachary Date: Mon, 3 Mar 2014 14:12:53 +0000 (+0100) Subject: mon: create-erasure uses crush_ruleset_create_erasure X-Git-Tag: v0.79~136^2~23 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cf2594618186846e4e412e51fe866d282e8b8941;p=ceph.git mon: create-erasure uses crush_ruleset_create_erasure Create the ruleset and branch depending on the result: * If it succeeds, wait * If it already exists and is pending (-EALREADY), wait * If it already exists (-EEXIST), return immediately * If it fails for other reasons, return immediately Add an informative message when it succeeds. Signed-off-by: Loic Dachary --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index ad4df2b093b6..9c7df9bde238 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3900,6 +3900,27 @@ bool OSDMonitor::prepare_command_impl(MMonCommand *m, if (err) goto reply; + int ruleset; + err = crush_ruleset_create_erasure(name, properties_map, &ruleset, ss); + if (err < 0) { + switch(err) { + case -EEXIST: // return immediately + ss << "rule " << name << " already exists"; + err = 0; + goto reply; + break; + case -EALREADY: // wait for pending to be proposed + ss << "rule " << name << " already exists"; + err = 0; + break; + default: // non recoverable error + goto reply; + break; + } + } else { + ss << "created ruleset " << name << " at " << ruleset; + } + getline(ss, rs); wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_last_committed() + 1));