Making gray failure also monitors connection failures
This commit is contained in:
parent
c168840b54
commit
1c6dfae48e
|
|
@ -718,6 +718,7 @@ void ServerKnobs::initialize(Randomize randomize, ClientKnobs* clientKnobs, IsSi
|
|||
init( PEER_LATENCY_DEGRADATION_PERCENTILE, 0.90 );
|
||||
init( PEER_LATENCY_DEGRADATION_THRESHOLD, 0.05 );
|
||||
init( PEER_TIMEOUT_PERCENTAGE_DEGRADATION_THRESHOLD, 0.1 );
|
||||
init( PEER_DEGRADATION_CONNECTION_FAILURE_COUNT, 1 );
|
||||
|
||||
// Test harness
|
||||
init( WORKER_POLL_DELAY, 1.0 );
|
||||
|
|
|
|||
|
|
@ -660,6 +660,8 @@ public:
|
|||
double PEER_LATENCY_DEGRADATION_PERCENTILE; // The percentile latency used to check peer health.
|
||||
double PEER_LATENCY_DEGRADATION_THRESHOLD; // The latency threshold to consider a peer degraded.
|
||||
double PEER_TIMEOUT_PERCENTAGE_DEGRADATION_THRESHOLD; // The percentage of timeout to consider a peer degraded.
|
||||
int PEER_DEGRADATION_CONNECTION_FAILURE_COUNT; // The number of connection failures experienced during measurement
|
||||
// period to consider a peer degraded.
|
||||
|
||||
// Test harness
|
||||
double WORKER_POLL_DELAY;
|
||||
|
|
|
|||
|
|
@ -892,7 +892,8 @@ ACTOR Future<Void> healthMonitor(Reference<AsyncVar<Optional<ClusterControllerFu
|
|||
|
||||
if (workerInDb) {
|
||||
for (const auto& [address, peer] : allPeers) {
|
||||
if (peer->pingLatencies.getPopulationSize() < SERVER_KNOBS->PEER_LATENCY_CHECK_MIN_POPULATION) {
|
||||
if (peer->connectFailedCount == 0 &&
|
||||
peer->pingLatencies.getPopulationSize() < SERVER_KNOBS->PEER_LATENCY_CHECK_MIN_POPULATION) {
|
||||
// Ignore peers that don't have enough samples.
|
||||
// TODO(zhewu): Currently, FlowTransport latency monitor clears ping latency samples on a
|
||||
// regular
|
||||
|
|
@ -909,7 +910,8 @@ ACTOR Future<Void> healthMonitor(Reference<AsyncVar<Optional<ClusterControllerFu
|
|||
// Note that currently we are not monitor storage servers, since lagging in storage servers
|
||||
// today already can trigger server exclusion by data distributor.
|
||||
|
||||
if (peer->pingLatencies.percentile(SERVER_KNOBS->PEER_LATENCY_DEGRADATION_PERCENTILE) >
|
||||
if (peer->connectFailedCount >= SERVER_KNOBS->PEER_DEGRADATION_CONNECTION_FAILURE_COUNT ||
|
||||
peer->pingLatencies.percentile(SERVER_KNOBS->PEER_LATENCY_DEGRADATION_PERCENTILE) >
|
||||
SERVER_KNOBS->PEER_LATENCY_DEGRADATION_THRESHOLD ||
|
||||
peer->timeoutCount / (double)(peer->pingLatencies.getPopulationSize()) >
|
||||
SERVER_KNOBS->PEER_TIMEOUT_PERCENTAGE_DEGRADATION_THRESHOLD) {
|
||||
|
|
@ -926,8 +928,9 @@ ACTOR Future<Void> healthMonitor(Reference<AsyncVar<Optional<ClusterControllerFu
|
|||
.detail(
|
||||
"CheckedPercentileLatency",
|
||||
peer->pingLatencies.percentile(SERVER_KNOBS->PEER_LATENCY_DEGRADATION_PERCENTILE))
|
||||
.detail("Count", peer->pingLatencies.getPopulationSize())
|
||||
.detail("TimeoutCount", peer->timeoutCount);
|
||||
.detail("PingCount", peer->pingLatencies.getPopulationSize())
|
||||
.detail("PingTimeoutCount", peer->timeoutCount)
|
||||
.detail("ConnectionFailureCount", peer->connectFailedCount);
|
||||
|
||||
req.degradedPeers.push_back(address);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue