From 04a484a4d5800c9bcf9805d3e87ed0c8dee01c9a Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Sun, 10 Aug 2014 17:06:33 +0200 Subject: [PATCH] erasure-code: OSDMonitor::crush_ruleset_create_erasure needs ruleset When OSDMonitor::crush_ruleset_create_erasure checks the ruleset for existence, it must convert the ruleid into a ruleset before assigning it back to the *ruleset parameter. http://tracker.ceph.com/issues/9044 Fixes: #9044 Signed-off-by: Loic Dachary --- src/erasure-code/ErasureCodeInterface.h | 2 +- src/mon/OSDMonitor.cc | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/erasure-code/ErasureCodeInterface.h b/src/erasure-code/ErasureCodeInterface.h index 328e323546e44..499cfc96ddc6c 100644 --- a/src/erasure-code/ErasureCodeInterface.h +++ b/src/erasure-code/ErasureCodeInterface.h @@ -167,7 +167,7 @@ namespace ceph { * @param [in] name of the ruleset to create * @param [in] crush crushmap in which the ruleset is created * @param [out] ss contains informative messages when an error occurs - * @return **0** on success or a negative errno on error. + * @return a ruleset on success or a negative errno on error. */ virtual int create_ruleset(const string &name, CrushWrapper &crush, diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index c8e1e9bc0fd84..3b6de571be32e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3067,15 +3067,18 @@ int OSDMonitor::crush_ruleset_create_erasure(const string &name, int *ruleset, stringstream &ss) { - *ruleset = osdmap.crush->get_rule_id(name); - if (*ruleset != -ENOENT) + int ruleid = osdmap.crush->get_rule_id(name); + if (ruleid != -ENOENT) { + *ruleset = osdmap.crush->get_rule_mask_ruleset(ruleid); return -EEXIST; + } CrushWrapper newcrush; _get_pending_crush(newcrush); - *ruleset = newcrush.get_rule_id(name); - if (*ruleset != -ENOENT) { + ruleid = newcrush.get_rule_id(name); + if (ruleid != -ENOENT) { + *ruleset = newcrush.get_rule_mask_ruleset(ruleid); return -EALREADY; } else { ErasureCodeInterfaceRef erasure_code; -- 2.39.5