This repository was archived by the owner on Dec 8, 2021. It is now read-only.

Description
Setting the per-rpc deadline is sufficiently orthogonal to the purview of the RetryPolicy to merit a separate interface. Something like
class OperationDeadlinePolicy {
public:
virtual std::unique_ptr<OperationDeadlinePolicy> clone() const = 0;
virtual std::chrono::system_clock::time_point Deadline() = 0;
};
template<typename Clock = DefaultClock>
class DefaultOperationDeadlinePolicy : public OperationDeadlinePolicy {
public:
template<typename Rep = int64_t, Period = std::milli>
DefaultOperationDeadlinePolicy(std::chrono::duration<Rep, Period> rpc_duration,
Clock c = Clock{}) :
duration_(std::chrono::duration_cast<std::chrono::milliseconds>(rpc_duration)),
c_(std::move(c)) {}
std::chrono::system_clock::time_point Deadline() override {
return c_.now() + duration_;
}
private:
std::chrono::milliseconds const duration_;
Clock c_;
};