]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: update mon(peon)'s down_pending_out when osd up 11946/head
authorDong Wu <archer.wudong@gmail.com>
Thu, 27 Oct 2016 03:02:36 +0000 (11:02 +0800)
committerNathan Cutler <ncutler@suse.com>
Wed, 16 Nov 2016 17:46:43 +0000 (18:46 +0100)
Fixes: http://tracker.ceph.com/issues/17719
Signed-off-by: Dong Wu <archer.wudong@gmail.com>
(cherry picked from commit 664254a17afbad86983ea5b5b8d385662d89e65e)

Conflicts:
    src/mon/OSDMonitor.cc (auto declaration for variable "found" is a C++11ism,
        replace with the full verbose C++98 type)

src/mon/OSDMonitor.cc

index a006dbde648ffa319ed8b831cb50e735b3968f6b..7c847a610d2ca6ba938c61840bf10006419ebb3c 100644 (file)
@@ -274,12 +274,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;
+    map<int,utime_t>::iterator 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);
       }
     }
   }