]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD::calc_priors_during: handle CRUSH_ITEM_NONE correctly
authorSamuel Just <sam.just@inktank.com>
Tue, 3 Jun 2014 23:14:15 +0000 (16:14 -0700)
committerSamuel Just <sam.just@inktank.com>
Wed, 25 Jun 2014 18:30:12 +0000 (11:30 -0700)
Fixes: #8507
Signed-off-by: Samuel Just <sam.just@inktank.com>
(cherry picked from commit 0bd6f6797c69af9aff851033c57c42121671c684)

Conflicts:
src/osd/OSD.cc

src/osd/OSD.cc

index 6f3c36f92821c1558083092c44d0d2e6d9e73f7a..418c1887e1195ca0a64db0e5a441a49c48453be6 100644 (file)
@@ -2505,21 +2505,25 @@ void OSD::calc_priors_during(
     oldmap->pg_to_acting_osds(pgid.pgid, acting);
     dout(20) << "  " << pgid << " in epoch " << e << " was " << acting << dendl;
     int up = 0;
+    int actual_osds = 0;
     for (unsigned i=0; i<acting.size(); i++) {
-      if (osdmap->is_up(acting[i])) {
-       if (acting[i] != whoami) {
-         pset.insert(
-           pg_shard_t(
-             acting[i],
-             osdmap->pg_is_ec(pgid.pgid) ? i : ghobject_t::NO_SHARD));
+      if (acting[i] != CRUSH_ITEM_NONE) {
+       if (osdmap->is_up(acting[i])) {
+         if (acting[i] != whoami) {
+           pset.insert(
+             pg_shard_t(
+               acting[i],
+               osdmap->pg_is_ec(pgid.pgid) ? shard_id_t(i) : ghobject_t::NO_SHARD));
+         }
+         up++;
        }
-       up++;
+       actual_osds++;
       }
     }
-    if (!up && !acting.empty()) {
+    if (!up && actual_osds) {
       // sucky.  add down osds, even tho we can't reach them right now.
       for (unsigned i=0; i<acting.size(); i++) {
-       if (acting[i] != whoami) {
+       if (acting[i] != whoami && acting[i] != CRUSH_ITEM_NONE) {
          pset.insert(
            pg_shard_t(
              acting[i],