summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-05-29 13:15:41 -0700
committerSage Weil <sage@inktank.com>2013-05-29 22:43:49 -0700
commit04aa2b5edf72eb59a5dc688475df59dda25a3cac (patch)
tree68dedfd2cf7756ba55db4501e4162be7c953aba4
parent28ea184d3a37fa8d878c82571ae64607c6717b43 (diff)
downloadceph-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>
-rw-r--r--src/osd/OSD.cc2
-rw-r--r--src/osd/OSD.h18
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 {