]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
CrushWrapper: ignore forcefeed if it does not exist
authorSamuel Just <samuel.just@dreamhost.com>
Tue, 29 Nov 2011 01:30:37 +0000 (17:30 -0800)
committerSamuel Just <samuel.just@dreamhost.com>
Thu, 1 Dec 2011 22:20:12 +0000 (14:20 -0800)
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
src/crush/CrushWrapper.h

index df62b8abcc9b4674de9e1e583f4b16c306a58e1e..67bb13e39465d42a7d6111111651ee197080b5ff 100644 (file)
@@ -114,7 +114,7 @@ public:
     build_rmaps();
     return name_rmap.count(name);
   }
-  bool item_exists(int i) {
+  bool item_exists(int i) const {
     return name_map.count(i);
   }
   int get_item_id(const char *s) {
@@ -387,10 +387,14 @@ public:
   void do_rule(int rule, int x, vector<int>& out, int maxout, int forcefeed,
               const vector<__u32>& weight) const {
     int rawout[maxout];
-    int numrep = crush_do_rule(crush, rule, x, rawout, maxout,
-                              forcefeed, &weight[0]);
-    if (numrep < 0)
-      numrep = 0;   // e.g., when forcefed device dne.
+    int numrep = -1;
+    if (item_exists(forcefeed))
+      numrep = crush_do_rule(crush, rule, x, rawout, maxout,
+                            forcefeed, &weight[0]);
+    else
+      numrep = crush_do_rule(crush, rule, x, rawout, maxout,
+                            -1, &weight[0]);
+    assert(numrep >= 0);
     out.resize(numrep);
     for (int i=0; i<numrep; i++)
       out[i] = rawout[i];