1
#include "source/extensions/common/wasm/remote_async_datasource.h"
2

            
3
#include "envoy/config/core/v3/base.pb.h"
4

            
5
#include "source/common/config/utility.h"
6

            
7
#include "fmt/format.h"
8

            
9
namespace Envoy {
10

            
11
// Default Parameters of the jittered backoff strategy.
12
static constexpr uint32_t RetryInitialDelayMilliseconds = 1000;
13
static constexpr uint32_t RetryMaxDelayMilliseconds = 10 * 1000;
14
static constexpr uint32_t RetryCount = 1;
15

            
16
RemoteAsyncDataProvider::RemoteAsyncDataProvider(
17
    Upstream::ClusterManager& cm, Init::Manager& manager,
18
    const envoy::config::core::v3::RemoteDataSource& source, Event::Dispatcher& dispatcher,
19
    Random::RandomGenerator& random, bool allow_empty, AsyncDataSourceCb&& callback)
20
39
    : allow_empty_(allow_empty), callback_(std::move(callback)),
21
39
      fetcher_(std::make_unique<Config::DataFetcher::RemoteDataFetcher>(cm, source.http_uri(),
22
39
                                                                        source.sha256(), *this)),
23
39
      init_target_("RemoteAsyncDataProvider", [this]() { start(); }),
24
      retries_remaining_(
25
39
          PROTOBUF_GET_WRAPPED_OR_DEFAULT(source.retry_policy(), num_retries, RetryCount)) {
26

            
27
39
  auto strategy_or_error = Config::Utility::prepareJitteredExponentialBackOffStrategy(
28
39
      source, random, RetryInitialDelayMilliseconds, RetryMaxDelayMilliseconds);
29
39
  THROW_IF_NOT_OK_REF(strategy_or_error.status());
30
38
  backoff_strategy_ = std::move(strategy_or_error.value());
31

            
32
42
  retry_timer_ = dispatcher.createTimer([this]() -> void { start(); });
33

            
34
38
  manager.add(init_target_);
35
38
}
36

            
37
} // namespace Envoy