]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG: pg down state blocked by osd.x, lost osd.x cannot solve peering stuck. 6317/head
authorchen.xiaowei <cxwshawn@gmail.com>
Tue, 20 Oct 2015 04:31:27 +0000 (12:31 +0800)
committerchen.xiaowei <cxwshawn@gmail.com>
Tue, 20 Oct 2015 04:31:29 +0000 (12:31 +0800)
Fixes #13531

Signed-off-by: Xiaowei Chen <chen.xiaowei@h3c.com>
src/osd/PG.cc

index f3faabb84d5732af13b2fd32195c27e93548edde..8cd6be3fc78a4683ad3742f24e0220d1c3c9a2b3 100644 (file)
@@ -7715,6 +7715,14 @@ bool PG::PriorSet::affected_by_map(const OSDMapRef osdmap, const PG *debug_pg) c
       dout(10) << "affected_by_map osd." << o << " no longer exists" << dendl;
       return true;
     }
+    // did a down osd in down get (re)marked as lost?
+    map<int, epoch_t>::const_iterator r = blocked_by.find(o);
+    if (r != blocked_by.end()) {
+      if (osdmap->get_info(o).lost_at != r->second) {
+  dout(10) << "affected_by_map osd." << o << " (re)marked as lost" << dendl;
+  return true;
+      }
+    } 
   }
 
   return false;