diff options
author | Sage Weil <sage@inktank.com> | 2013-05-29 13:15:41 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-05-29 22:43:49 -0700 |
commit | 04aa2b5edf72eb59a5dc688475df59dda25a3cac (patch) | |
tree | 68dedfd2cf7756ba55db4501e4162be7c953aba4 /src | |
parent | 28ea184d3a37fa8d878c82571ae64607c6717b43 (diff) | |
download | ceph-04aa2b5edf72eb59a5dc688475df59dda25a3cac.tar.gz |
osd: distinguish between definitely healthy and definitely not unhealthy
is_unhealthy() will assume they are healthy for some period after we
send our first ping attempt. is_healthy() is now a strict check that we
know they are healthy.
Switch the failure report check to use is_unhealthy(); use is_healthy()
everywhere else, including the waiting-for-healthy pre-boot checks.
Signed-off-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/osd/OSD.cc | 2 | ||||
-rw-r--r-- | src/osd/OSD.h | 18 |
2 files changed, 12 insertions, 8 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 0e65172723c..f08a63a8ae3 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2592,7 +2592,7 @@ void OSD::heartbeat_check() << " last_rx_back " << p->second.last_rx_back << " last_rx_front " << p->second.last_rx_front << dendl; - if (!p->second.is_healthy(cutoff)) { + if (p->second.is_unhealthy(cutoff)) { if (p->second.last_rx_back == utime_t() || p->second.last_rx_front == utime_t()) { derr << "heartbeat_check: no reply from osd." << p->first diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 4eb7c9f330a..50f7c9c073d 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -704,15 +704,19 @@ private: utime_t last_rx_back; ///< last time we got a ping reply on the back side epoch_t epoch; ///< most recent epoch we wanted this peer - bool is_healthy(utime_t cutoff) { + bool is_unhealthy(utime_t cutoff) { return - (last_rx_front > cutoff || - (last_rx_front == utime_t() && (last_tx == utime_t() || - first_tx > cutoff))) && - (last_rx_back > cutoff || - (last_rx_back == utime_t() && (last_tx == utime_t() || - first_tx > cutoff))); + ! ((last_rx_front > cutoff || + (last_rx_front == utime_t() && (last_tx == utime_t() || + first_tx > cutoff))) && + (last_rx_back > cutoff || + (last_rx_back == utime_t() && (last_tx == utime_t() || + first_tx > cutoff)))); + } + bool is_healthy(utime_t cutoff) { + return last_rx_front > cutoff && last_rx_back > cutoff; } + }; /// state attached to outgoing heartbeat connections struct HeartbeatSession : public RefCountedObject { |