
This provides a simple way to implement exponential backoff using a do while loop. Usage example (also see the change to LockFileManager.cpp): ``` ExponentialBackoff Backoff(10s); do { if (tryToDoSomething()) return ItWorked; } while (Backoff.waitForNextAttempt()); return Timeout; ``` Abstracting this out of `LockFileManager` as the module build daemon will need it.
32 lines
992 B
C++
32 lines
992 B
C++
//===- unittests/ExponentialBackoffTest.cpp -------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/ExponentialBackoff.h"
|
|
#include "gtest/gtest.h"
|
|
#include <chrono>
|
|
|
|
using namespace llvm;
|
|
using namespace std::chrono_literals;
|
|
|
|
namespace {
|
|
|
|
TEST(ExponentialBackoffTest, Timeout) {
|
|
auto Start = std::chrono::steady_clock::now();
|
|
// Use short enough times that this test runs quickly.
|
|
ExponentialBackoff Backoff(100ms, 1ms, 10ms);
|
|
do {
|
|
} while (Backoff.waitForNextAttempt());
|
|
auto Duration = std::chrono::steady_clock::now() - Start;
|
|
EXPECT_GE(Duration, 100ms);
|
|
}
|
|
|
|
// Testing individual wait duration is omitted as those tests would be
|
|
// non-deterministic.
|
|
|
|
} // end anonymous namespace
|