From cf2594618186846e4e412e51fe866d282e8b8941 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Mon, 3 Mar 2014 15:12:53 +0100 Subject: [PATCH] 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 --- src/mon/OSDMonitor.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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)); -- 2.47.3