Skip to content

Commit

Permalink
Change interval between warmup URL fetches
Browse files Browse the repository at this point in the history
In data reduction proxy, the prober waits a little while before
probing a proxy. This CL changes the interval between retries,
and also makes it possible to configure that interval using
field trial params.

Change-Id: I9bd4ca39759d69aff5c5658fd34678b9722b8961
Bug: 849292
Reviewed-on: https://chromium-review.googlesource.com/1195152
Reviewed-by: Scott Little <[email protected]>
Commit-Queue: Tarun Bansal <[email protected]>
Cr-Commit-Position: refs/heads/master@{#588055}
  • Loading branch information
Tarun Bansal authored and Commit Bot committed Aug 31, 2018
1 parent f919d5b commit 22730e4
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,15 @@ base::TimeDelta WarmupURLFetcher::GetFetchWaitTime() const {
DCHECK_LT(0u, previous_attempt_counts_);
DCHECK_GE(2u, previous_attempt_counts_);

if (previous_attempt_counts_ == 1)
return base::TimeDelta::FromSeconds(30);
if (previous_attempt_counts_ == 1) {
return base::TimeDelta::FromSeconds(GetFieldTrialParamByFeatureAsInt(
features::kDataReductionProxyRobustConnection,
"warmup_url_fetch_wait_timer_first_retry_seconds", 1));
}

return base::TimeDelta::FromSeconds(60);
return base::TimeDelta::FromSeconds(GetFieldTrialParamByFeatureAsInt(
features::kDataReductionProxyRobustConnection,
"warmup_url_fetch_wait_timer_second_retry_seconds", 30));
}

void WarmupURLFetcher::FetchWarmupURLNow() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "base/macros.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/test/gtest_util.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
Expand Down Expand Up @@ -71,6 +72,20 @@ class WarmupURLFetcherTest : public WarmupURLFetcher {
features::kDataReductionProxyRobustConnection, params);
}

static void InitExperimentWithFetchWaitTimeParams(
base::test::ScopedFeatureList* scoped_feature_list,
base::TimeDelta first_retry,
base::TimeDelta second_retry) {
std::map<std::string, std::string> params;
params["warmup_fetch_callback_enabled"] = "true";
params["warmup_url_fetch_wait_timer_first_retry_seconds"] =
base::IntToString(first_retry.InSeconds());
params["warmup_url_fetch_wait_timer_second_retry_seconds"] =
base::IntToString(second_retry.InSeconds());
scoped_feature_list->InitAndEnableFeatureWithParameters(
features::kDataReductionProxyRobustConnection, params);
}

base::TimeDelta GetFetchWaitTime() const override {
if (!fetch_wait_time_)
return WarmupURLFetcher::GetFetchWaitTime();
Expand Down Expand Up @@ -553,6 +568,65 @@ TEST(WarmupURLFetcherTest, TestFetchTimeoutIncreasing) {
EXPECT_EQ(http_rtt * 12, warmup_url_fetcher.GetFetchTimeout());
}

TEST(WarmupURLFetcherTest, TestFetchWaitTime) {
base::HistogramTester histogram_tester;
base::MessageLoopForIO message_loop;

std::unique_ptr<net::TestURLRequestContext> test_request_context(
new net::TestURLRequestContext(true));

test_request_context->Init();
scoped_refptr<net::URLRequestContextGetter> request_context_getter =
new net::TestURLRequestContextGetter(message_loop.task_runner(),
std::move(test_request_context));

WarmupURLFetcherTest warmup_url_fetcher(request_context_getter);
EXPECT_FALSE(warmup_url_fetcher.IsFetchInFlight());

warmup_url_fetcher.FetchWarmupURL(1);
EXPECT_EQ(base::TimeDelta::FromSeconds(1),
warmup_url_fetcher.GetFetchWaitTime());

warmup_url_fetcher.FetchWarmupURL(2);
EXPECT_EQ(base::TimeDelta::FromSeconds(30),
warmup_url_fetcher.GetFetchWaitTime());

warmup_url_fetcher.FetchWarmupURL(1);
EXPECT_EQ(base::TimeDelta::FromSeconds(1),
warmup_url_fetcher.GetFetchWaitTime());
}

TEST(WarmupURLFetcherTest, TestFetchWaitTimeWithFieldTrial) {
base::test::ScopedFeatureList scoped_feature_list;
base::TimeDelta first_retry(base::TimeDelta::FromSeconds(30));
base::TimeDelta second_retry(base::TimeDelta::FromSeconds(60));
WarmupURLFetcherTest::InitExperimentWithFetchWaitTimeParams(
&scoped_feature_list, first_retry, second_retry);

base::HistogramTester histogram_tester;
base::MessageLoopForIO message_loop;

std::unique_ptr<net::TestURLRequestContext> test_request_context(
new net::TestURLRequestContext(true));

test_request_context->Init();
scoped_refptr<net::URLRequestContextGetter> request_context_getter =
new net::TestURLRequestContextGetter(message_loop.task_runner(),
std::move(test_request_context));

WarmupURLFetcherTest warmup_url_fetcher(request_context_getter);
EXPECT_FALSE(warmup_url_fetcher.IsFetchInFlight());

warmup_url_fetcher.FetchWarmupURL(1);
EXPECT_EQ(first_retry, warmup_url_fetcher.GetFetchWaitTime());

warmup_url_fetcher.FetchWarmupURL(2);
EXPECT_EQ(second_retry, warmup_url_fetcher.GetFetchWaitTime());

warmup_url_fetcher.FetchWarmupURL(1);
EXPECT_EQ(first_retry, warmup_url_fetcher.GetFetchWaitTime());
}

TEST(WarmupURLFetcherTest, TestFetchTimeoutIncreasingWithFieldTrial) {
base::test::ScopedFeatureList scoped_feature_list;
WarmupURLFetcherTest::InitExperimentWithTimeout(&scoped_feature_list);
Expand Down

0 comments on commit 22730e4

Please sign in to comment.