// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_MODULAR_BIN_SESSIONMGR_RATE_LIMITED_RETRY_H_
#define SRC_MODULAR_BIN_SESSIONMGR_RATE_LIMITED_RETRY_H_

#include <lib/zx/time.h>

namespace modular {

// Keeps track of a retry scheme where infinite retries are allowed unless an
// operation fails many times in a short interval. This can be used to enable a
// decent user experience in the face of a flaky dependency without undue churn
// or log spamming if an unrecoverable failure has occurred.
class RateLimitedRetry {
 public:
  struct Threshold {
    unsigned int count;
    zx::duration period;
  };

  // Constructs a retry tracker where retry should occur as long as no more than
  // |count| failures have occurred within a |period|.
  //
  // As an example, an allowance of 1 failure per second will allow retries if
  // failures occur no more frequently than exactly once every second.
  RateLimitedRetry(const Threshold& threshold);

  // Call |ShouldRetry()| when the operation you are tracking fails, to
  // determine whether a retry should be attempted. Returns |false| if
  // |ShouldRetry()| has been called more than |count| times within a |period|.
  bool ShouldRetry();

 private:
  const Threshold threshold_;

  unsigned int failure_series_count_;
  zx::time failure_series_start_;
};

}  // namespace modular

#endif  // SRC_MODULAR_BIN_SESSIONMGR_RATE_LIMITED_RETRY_H_
