From 962b98214d0ca8e8db14ae83ccb79667ec440eac Mon Sep 17 00:00:00 2001 From: "eroman@chromium.org" Date: Sat, 17 Jul 2010 03:37:51 +0000 Subject: Add a command line flag to change the default number of parallel DNS requests issued by chrome. --host-resolver-parallelism=XXX This is a useful debugging tool, since for some users too many parallel DNS requests results in spurious DNS failures from their resolver. BUG=44489 Review URL: http://codereview.chromium.org/3019007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52802 0039d316-1c4b-4281-b951-d872f2087c98 --- net/base/host_resolver.h | 10 +++++++++- net/base/host_resolver_impl.cc | 10 +++++++--- net/proxy/proxy_script_fetcher_unittest.cc | 3 ++- net/socket/ssl_client_socket_unittest.cc | 3 ++- net/socket/ssl_test_util.cc | 3 ++- net/socket/tcp_client_socket_unittest.cc | 3 ++- net/socket/tcp_pinger_unittest.cc | 6 ++++-- net/tools/fetch/fetch_client.cc | 2 +- net/url_request/url_request_unittest.h | 6 ++++-- 9 files changed, 33 insertions(+), 13 deletions(-) (limited to 'net') diff --git a/net/base/host_resolver.h b/net/base/host_resolver.h index 1e1fb0b..895ffc2 100644 --- a/net/base/host_resolver.h +++ b/net/base/host_resolver.h @@ -131,6 +131,11 @@ class HostResolver : public base::RefCounted { // Opaque type used to cancel a request. typedef void* RequestHandle; + // This value can be passed into CreateSystemHostResolver as the + // |max_concurrent_resolves| parameter. It will select a default level of + // concurrency. + static const size_t kDefaultParallelism = 0; + // Resolves the given hostname (or IP address literal), filling out the // |addresses| object upon success. The |info.port| parameter will be set as // the sin(6)_port field of the sockaddr_in{6} struct. Returns OK if @@ -238,7 +243,10 @@ class SingleRequestHostResolver { // Creates a HostResolver implementation that queries the underlying system. // (Except if a unit-test has changed the global HostResolverProc using // ScopedHostResolverProc to intercept requests to the system). -HostResolver* CreateSystemHostResolver(); +// |max_concurrent_resolves| is how many resolve requests will be allowed to +// run in parallel. Pass HostResolver::kDefaultParallelism to choose a +// default value. +HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves); } // namespace net diff --git a/net/base/host_resolver_impl.cc b/net/base/host_resolver_impl.cc index 9b19436..ffba57f 100644 --- a/net/base/host_resolver_impl.cc +++ b/net/base/host_resolver_impl.cc @@ -52,13 +52,17 @@ HostCache* CreateDefaultCache() { } // anonymous namespace -HostResolver* CreateSystemHostResolver() { +HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves) { // Maximum of 50 concurrent threads. // TODO(eroman): Adjust this, do some A/B experiments. - static const size_t kMaxJobs = 50u; + static const size_t kDefaultMaxJobs = 50u; + + if (max_concurrent_resolves == HostResolver::kDefaultParallelism) + max_concurrent_resolves = kDefaultMaxJobs; HostResolverImpl* resolver = - new HostResolverImpl(NULL, CreateDefaultCache(), kMaxJobs); + new HostResolverImpl(NULL, CreateDefaultCache(), + max_concurrent_resolves); return resolver; } diff --git a/net/proxy/proxy_script_fetcher_unittest.cc b/net/proxy/proxy_script_fetcher_unittest.cc index c843739..e0e64c9 100644 --- a/net/proxy/proxy_script_fetcher_unittest.cc +++ b/net/proxy/proxy_script_fetcher_unittest.cc @@ -32,7 +32,8 @@ class RequestContext : public URLRequestContext { public: RequestContext() { net::ProxyConfig no_proxy; - host_resolver_ = net::CreateSystemHostResolver(); + host_resolver_ = + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism); proxy_service_ = net::ProxyService::CreateFixed(no_proxy); ssl_config_service_ = new net::SSLConfigServiceDefaults; diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc index 68016e0..2f7526a 100644 --- a/net/socket/ssl_client_socket_unittest.cc +++ b/net/socket/ssl_client_socket_unittest.cc @@ -26,7 +26,8 @@ const net::SSLConfig kDefaultSSLConfig; class SSLClientSocketTest : public PlatformTest { public: SSLClientSocketTest() - : resolver_(net::CreateSystemHostResolver()), + : resolver_(net::CreateSystemHostResolver( + net::HostResolver::kDefaultParallelism)), socket_factory_(net::ClientSocketFactory::GetDefaultFactory()) { } diff --git a/net/socket/ssl_test_util.cc b/net/socket/ssl_test_util.cc index f2999f0..4fa6b9b 100644 --- a/net/socket/ssl_test_util.cc +++ b/net/socket/ssl_test_util.cc @@ -229,7 +229,8 @@ bool TestServerLauncher::WaitToStart(const std::string& host_name, int port) { // Verify that the webserver is actually started. // Otherwise tests can fail if they run faster than Python can start. net::AddressList addr; - scoped_refptr resolver(net::CreateSystemHostResolver()); + scoped_refptr resolver( + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism)); net::HostResolver::RequestInfo info(host_name, port); int rv = resolver->Resolve(info, &addr, NULL, NULL, BoundNetLog()); if (rv != net::OK) diff --git a/net/socket/tcp_client_socket_unittest.cc b/net/socket/tcp_client_socket_unittest.cc index 52cdb88..638e887 100644 --- a/net/socket/tcp_client_socket_unittest.cc +++ b/net/socket/tcp_client_socket_unittest.cc @@ -89,7 +89,8 @@ void TCPClientSocketTest::SetUp() { listen_port_ = port; AddressList addr; - scoped_refptr resolver(CreateSystemHostResolver()); + scoped_refptr resolver( + CreateSystemHostResolver(HostResolver::kDefaultParallelism)); HostResolver::RequestInfo info("localhost", listen_port_); int rv = resolver->Resolve(info, &addr, NULL, NULL, BoundNetLog()); CHECK_EQ(rv, OK); diff --git a/net/socket/tcp_pinger_unittest.cc b/net/socket/tcp_pinger_unittest.cc index 63e0045..c415ac3 100644 --- a/net/socket/tcp_pinger_unittest.cc +++ b/net/socket/tcp_pinger_unittest.cc @@ -65,7 +65,8 @@ void TCPPingerTest::SetUp() { TEST_F(TCPPingerTest, Ping) { net::AddressList addr; - scoped_refptr resolver(net::CreateSystemHostResolver()); + scoped_refptr resolver( + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism)); net::HostResolver::RequestInfo info("localhost", listen_port_); int rv = resolver->Resolve(info, &addr, NULL, NULL, net::BoundNetLog()); @@ -78,7 +79,8 @@ TEST_F(TCPPingerTest, Ping) { TEST_F(TCPPingerTest, PingFail) { net::AddressList addr; - scoped_refptr resolver(net::CreateSystemHostResolver()); + scoped_refptr resolver( + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism)); // "Kill" "server" listen_sock_ = NULL; diff --git a/net/tools/fetch/fetch_client.cc b/net/tools/fetch/fetch_client.cc index 9e2a21c..8863dd7 100644 --- a/net/tools/fetch/fetch_client.cc +++ b/net/tools/fetch/fetch_client.cc @@ -133,7 +133,7 @@ int main(int argc, char**argv) { MessageLoop loop(MessageLoop::TYPE_IO); scoped_refptr host_resolver( - net::CreateSystemHostResolver()); + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism)); scoped_refptr proxy_service( net::ProxyService::CreateNull()); diff --git a/net/url_request/url_request_unittest.h b/net/url_request/url_request_unittest.h index 0dfa766..f8fee49 100644 --- a/net/url_request/url_request_unittest.h +++ b/net/url_request/url_request_unittest.h @@ -131,13 +131,15 @@ class TestCookiePolicy : public net::CookiePolicy { class TestURLRequestContext : public URLRequestContext { public: TestURLRequestContext() { - host_resolver_ = net::CreateSystemHostResolver(); + host_resolver_ = + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism); proxy_service_ = net::ProxyService::CreateNull(); Init(); } explicit TestURLRequestContext(const std::string& proxy) { - host_resolver_ = net::CreateSystemHostResolver(); + host_resolver_ = + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism); net::ProxyConfig proxy_config; proxy_config.proxy_rules().ParseFromString(proxy); proxy_service_ = net::ProxyService::CreateFixed(proxy_config); -- cgit v1.1