T MakeCall()

in aws_common/include/aws_common/sdk_utils/throttling_manager.h [48:76]


  T MakeCall(std::function<T(const U & request)> api, const U & api_param, std::string api_name,
             ErrorArgs... error_on_throttling_args) const
  {
    if (0 == max_api_tps_.count(api_name)) {
      return api(api_param);
    }
    /* Min delta is 1s / TPS, e.g. 5 TPS -> 200ms wait time between calls */
    auto min_delta_allowed = std::chrono::duration_cast<std::chrono::milliseconds>(
                               std::chrono::seconds(1) / max_api_tps_.at(api_name))
                               .count();
    std::lock_guard<std::mutex> lock(api_call_time_mutex_);
    {
      if (0 == last_call_time_per_api_.count(api_name)) {
        last_call_time_per_api_.insert(std::make_pair(
          api_name, std::chrono::time_point<std::chrono::steady_clock>(std::chrono::seconds(0))));
      }
      auto now = std::chrono::steady_clock::now();
      auto delta_in_ms = std::chrono::duration_cast<std::chrono::milliseconds>(
                           now - last_call_time_per_api_.at(api_name))
                           .count();
      if (delta_in_ms >= min_delta_allowed) {
        last_call_time_per_api_.at(api_name) = now;
        return api(api_param);
      } else {
        T outcome(Aws::Client::AWSError<E>(error_on_throttling_args...));
        return outcome;
      }
    }
  }