nghttpx: Use gRPC's exponential backoff algorithm
This commit is contained in:
parent
46514074a4
commit
ea5f424dec
|
@ -45,8 +45,12 @@ bool ConnectBlocker::blocked() const { return ev_is_active(&timer_); }
|
||||||
|
|
||||||
void ConnectBlocker::on_success() { fail_count_ = 0; }
|
void ConnectBlocker::on_success() { fail_count_ = 0; }
|
||||||
|
|
||||||
|
// Use the similar backoff algorithm described in
|
||||||
|
// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md
|
||||||
namespace {
|
namespace {
|
||||||
constexpr size_t MAX_BACKOFF_EXP = 10;
|
constexpr size_t MAX_BACKOFF_EXP = 10;
|
||||||
|
constexpr auto MULTIPLIER = 1.6;
|
||||||
|
constexpr auto JITTER = 0.2;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void ConnectBlocker::on_failure() {
|
void ConnectBlocker::on_failure() {
|
||||||
|
@ -56,9 +60,10 @@ void ConnectBlocker::on_failure() {
|
||||||
|
|
||||||
++fail_count_;
|
++fail_count_;
|
||||||
|
|
||||||
auto max_backoff = (1 << std::min(MAX_BACKOFF_EXP, fail_count_)) - 1;
|
auto base_backoff = pow(MULTIPLIER, std::min(MAX_BACKOFF_EXP, fail_count_));
|
||||||
auto dist = std::uniform_int_distribution<>(0, max_backoff);
|
auto dist = std::uniform_real_distribution<>(-JITTER * base_backoff,
|
||||||
auto backoff = dist(gen_);
|
JITTER * base_backoff);
|
||||||
|
auto backoff = base_backoff + dist(gen_);
|
||||||
|
|
||||||
LOG(WARN) << "Could not connect " << fail_count_
|
LOG(WARN) << "Could not connect " << fail_count_
|
||||||
<< " times in a row; sleep for " << backoff << " seconds";
|
<< " times in a row; sleep for " << backoff << " seconds";
|
||||||
|
|
Loading…
Reference in New Issue