]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: update mon(peon)'s down_pending_out when osd up 11664/head
authorDong Wu <archer.wudong@gmail.com>
Thu, 27 Oct 2016 03:02:36 +0000 (11:02 +0800)
committerDong Wu <archer.wudong@gmail.com>
Thu, 27 Oct 2016 08:12:56 +0000 (16:12 +0800)
Fixes: http://tracker.ceph.com/issues/17719
Signed-off-by: Dong Wu <archer.wudong@gmail.com>
src/mon/OSDMonitor.cc

index ef0d87a9be4e3b9a2e1acfe7fc48ecdc293f330d..ec68a66facb14750a8a40f32dfbd8bb2540cd8c2 100644 (file)
@@ -287,12 +287,19 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
   }
 
   for (int o = 0; o < osdmap.get_max_osd(); o++) {
+    if (osdmap.is_out(o))
+      continue;
+    auto found = down_pending_out.find(o);
     if (osdmap.is_down(o)) {
       // populate down -> out map
-      if (osdmap.is_in(o) &&
-         down_pending_out.count(o) == 0) {
-       dout(10) << " adding osd." << o << " to down_pending_out map" << dendl;
-       down_pending_out[o] = ceph_clock_now(g_ceph_context);
+      if (found == down_pending_out.end()) {
+        dout(10) << " adding osd." << o << " to down_pending_out map" << dendl;
+        down_pending_out[o] = ceph_clock_now(g_ceph_context);
+      }
+    } else {
+      if (found != down_pending_out.end()) {
+        dout(10) << " removing osd." << o << " from down_pending_out map" << dendl;
+        down_pending_out.erase(found);
       }
     }
   }