]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: add the get_crush_ruleset helper
authorLoic Dachary <loic-201408@dachary.org>
Tue, 16 Sep 2014 09:27:54 +0000 (11:27 +0200)
committerLoic Dachary <loic-201408@dachary.org>
Tue, 16 Sep 2014 09:27:54 +0000 (11:27 +0200)
By factoring a code snippet from prepare_pool_crush_ruleset with no
modification.

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

index 25a5bc7fc05cf612a65a395014d572bb8e309ec0..b2fda0e0df76bac773b230cb785f9ce68db6a425 100644 (file)
@@ -3405,27 +3405,7 @@ int OSDMonitor::prepare_pool_crush_ruleset(const unsigned pool_type,
            return *crush_ruleset;
          }
        } else {
-         int ret;
-         ret = osdmap.crush->get_rule_id(ruleset_name);
-         if (ret != -ENOENT) {
-           // found it, use it
-           *crush_ruleset = ret;
-         } else {
-           CrushWrapper newcrush;
-           _get_pending_crush(newcrush);
-
-           ret = newcrush.get_rule_id(ruleset_name);
-           if (ret != -ENOENT) {
-             // found it, wait for it to be proposed
-             dout(20) << "prepare_pool_crush_ruleset: ruleset "
-                  << ruleset_name << " is pending, try again" << dendl;
-             return -EAGAIN;
-           } else {
-             //Cannot find it , return error
-             ss << "Specified ruleset " << ruleset_name << " doesn't exist";
-             return ret;
-           }
-         }
+         return get_crush_ruleset(ruleset_name, crush_ruleset, ss);
        }
       }
       break;
@@ -3464,6 +3444,35 @@ int OSDMonitor::prepare_pool_crush_ruleset(const unsigned pool_type,
 
   return 0;
 }
+
+int OSDMonitor::get_crush_ruleset(const string &ruleset_name,
+                                 int *crush_ruleset,
+                                 stringstream &ss)
+{
+  int ret;
+  ret = osdmap.crush->get_rule_id(ruleset_name);
+  if (ret != -ENOENT) {
+    // found it, use it
+    *crush_ruleset = ret;
+  } else {
+    CrushWrapper newcrush;
+    _get_pending_crush(newcrush);
+
+    ret = newcrush.get_rule_id(ruleset_name);
+    if (ret != -ENOENT) {
+      // found it, wait for it to be proposed
+      dout(20) << __func__ << ": ruleset " << ruleset_name
+              << " try again" << dendl;
+      return -EAGAIN;
+    } else {
+      //Cannot find it , return error
+      ss << "specified ruleset " << ruleset_name << " doesn't exist";
+      return ret;
+    }
+  }
+  return 0;
+}
+
 /**
  * @param name The name of the new pool
  * @param auid The auid of the pool owner. Can be -1
index e28efba40229f2f87b79503752cdc056703b7a5e..44aa02f6fc12044cc2337858306e7fd752844fee 100644 (file)
@@ -257,6 +257,9 @@ private:
                                   const string &profile,
                                   int *ruleset,
                                   stringstream &ss);
+  int get_crush_ruleset(const string &ruleset_name,
+                       int *crush_ruleset,
+                       stringstream &ss);
   int get_erasure_code(const string &erasure_code_profile,
                       ErasureCodeInterfaceRef *erasure_code,
                       stringstream &ss) const;