]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: crush_ruleset_create_erasure set ruleset
authorLoic Dachary <loic@dachary.org>
Mon, 3 Mar 2014 13:52:20 +0000 (14:52 +0100)
committerLoic Dachary <loic@dachary.org>
Mon, 17 Mar 2014 08:48:02 +0000 (09:48 +0100)
Use get_rule_id() instead of rule_exists() to test the existence of a
ruleset and preserve the ruleset.

Signed-off-by: Loic Dachary <loic@dachary.org>
src/mon/OSDMonitor.cc

index 7654000e621eb6f4f168bc0a3b717feaaa657537..7a7f731cab4b4cc01ab7e9be04d812e228ba66bd 100644 (file)
@@ -2812,13 +2812,15 @@ int OSDMonitor::crush_ruleset_create_erasure(const string &name,
                                             int *ruleset,
                                             stringstream &ss)
 {
-    if (osdmap.crush->rule_exists(name))
+    *ruleset = osdmap.crush->get_rule_id(name);
+    if (*ruleset != -ENOENT)
       return -EEXIST;
 
     CrushWrapper newcrush;
     _get_pending_crush(newcrush);
 
-    if (newcrush.rule_exists(name)) {
+    *ruleset = newcrush.get_rule_id(name);
+    if (*ruleset != -ENOENT) {
       return -EALREADY;
     } else {
       ErasureCodeInterfaceRef erasure_code;
@@ -2832,6 +2834,7 @@ int OSDMonitor::crush_ruleset_create_erasure(const string &name,
       erasure_code.reset();
       if (rule < 0)
        return rule;
+      *ruleset = rule;
       pending_inc.crush.clear();
       newcrush.encode(pending_inc.crush);
       return 0;