From: xie xingguo Date: Mon, 25 Apr 2016 07:43:03 +0000 (+0800) Subject: mon/OSDMonitor: avoid potential expensive grace calculation X-Git-Tag: v10.2.1~51 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b0543fdfdebc6766fe927b4cc34a4369e7f86544;p=ceph.git mon/OSDMonitor: avoid potential expensive grace calculation The grace calculation during check_failure() is now very complicated and time-consuming. Therefore we shall skip this when it is possible. Signed-off-by: xie xingguo (cherry picked from commit 3557903d5d57642179b2ae137bedc389974b1956) --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index ca825bff39c2..43e529afba72 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1707,6 +1707,13 @@ void OSDMonitor::check_failures(utime_t now) bool OSDMonitor::check_failure(utime_t now, int target_osd, failure_info_t& fi) { + // already pending failure? + if (pending_inc.new_state.count(target_osd) && + pending_inc.new_state[target_osd] & CEPH_OSD_UP) { + dout(10) << " already pending failure" << dendl; + return true; + } + set reporters_by_subtree; string reporter_subtree_level = g_conf->mon_osd_reporter_subtree_level; utime_t orig_grace(g_conf->osd_heartbeat_grace, 0); @@ -1762,14 +1769,6 @@ bool OSDMonitor::check_failure(utime_t now, int target_osd, failure_info_t& fi) << " + " << peer_grace << "), max_failed_since " << max_failed_since << dendl; - // already pending failure? - if (pending_inc.new_state.count(target_osd) && - pending_inc.new_state[target_osd] & CEPH_OSD_UP) { - dout(10) << " already pending failure" << dendl; - return true; - } - - if (failed_for >= grace && (int)reporters_by_subtree.size() >= g_conf->mon_osd_min_down_reporters) { dout(1) << " we have enough reporters to mark osd." << target_osd