added resolver_cache_timeout setting (#1878)

added resolver_cache_timeout setting
This commit is contained in:
Alden Torres 2017-04-04 18:23:37 -04:00 committed by Arvid Norberg
parent 7c35c2270f
commit 45bea967c2
10 changed files with 38 additions and 2 deletions

View File

@ -1,3 +1,4 @@
* added resolver_cache_timeout setting for internal host name resolver
* make parse_magnet_uri take a string_view instead of std::string
* deprecate add_torrent_params::url field. use parse_magnet_uri instead
* optimize download queue management

View File

@ -704,6 +704,7 @@ namespace libtorrent
void update_auto_sequential();
void update_max_failcount();
void update_close_file_interval();
void update_resolver_cache_timeout();
void update_upnp();
void update_natpmp();

View File

@ -45,7 +45,6 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/socket.hpp"
#include "libtorrent/resolver_interface.hpp"
#include "libtorrent/address.hpp"
#include "libtorrent/time.hpp"
namespace libtorrent
{
@ -59,6 +58,8 @@ struct TORRENT_EXTRA_EXPORT resolver final : resolver_interface
virtual void abort() override;
virtual void set_cache_timeout(seconds timeout) override;
private:
void on_lookup(error_code const& ec, tcp::resolver::iterator i

View File

@ -38,6 +38,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/error_code.hpp"
#include "libtorrent/address.hpp"
#include "libtorrent/time.hpp"
namespace libtorrent
{
@ -62,6 +63,9 @@ struct TORRENT_EXTRA_EXPORT resolver_interface
, callback_t const& h) = 0;
virtual void abort() = 0;
virtual void set_cache_timeout(seconds timeout) = 0;
protected:
~resolver_interface() {}
};

View File

@ -1632,6 +1632,11 @@ namespace libtorrent
// given time.
max_web_seed_connections,
// the number of seconds before the internal host name resolver
// considers a cache value timed out, negative values are interpreted
// as zero.
resolver_cache_timeout,
max_int_setting_internal
};

View File

@ -132,4 +132,12 @@ namespace libtorrent
{
m_resolver.cancel();
}
void resolver::set_cache_timeout(seconds timeout)
{
if (timeout >= seconds(0))
m_timeout = timeout;
else
m_timeout = seconds(0);
}
}

View File

@ -625,6 +625,7 @@ namespace aux {
update_connections_limit();
update_unchoke_limit();
update_disk_threads();
update_resolver_cache_timeout();
update_upnp();
update_natpmp();
update_lsd();
@ -5087,6 +5088,12 @@ namespace aux {
m_close_file_timer.async_wait(make_tick_handler(std::bind(&session_impl::on_close_file, this, _1)));
}
void session_impl::update_resolver_cache_timeout()
{
int const timeout = m_settings.get_int(settings_pack::resolver_cache_timeout);
m_host_resolver.set_cache_timeout(seconds(timeout));
}
void session_impl::update_proxy()
{
for (auto& i : m_listen_sockets)

View File

@ -335,6 +335,7 @@ namespace libtorrent
SET(web_seed_name_lookup_retry, 1800, nullptr),
SET(close_file_interval, CLOSE_FILE_INTERVAL, &session_impl::update_close_file_interval),
SET(max_web_seed_connections, 3, nullptr),
SET(resolver_cache_timeout, 1200, &session_impl::update_resolver_cache_timeout),
}});
#undef SET

View File

@ -58,6 +58,7 @@ TORRENT_TEST(session)
settings_pack sett = settings();
sett.set_int(settings_pack::num_optimistic_unchoke_slots, 10);
sett.set_int(settings_pack::unchoke_slots_limit, 10);
sett.set_int(settings_pack::resolver_cache_timeout, 1000);
ses.apply_settings(sett);
@ -90,6 +91,11 @@ TORRENT_TEST(session)
ses.apply_settings(sett);
TEST_CHECK(ses.get_settings().get_int(settings_pack::unchoke_slots_limit) == 8);
TEST_EQUAL(ses.get_settings().get_int(settings_pack::resolver_cache_timeout), 1000);
sett.set_int(settings_pack::resolver_cache_timeout, 1001);
ses.apply_settings(sett);
TEST_EQUAL(ses.get_settings().get_int(settings_pack::resolver_cache_timeout), 1001);
// make sure the destructor waits properly
// for the asynchronous call to set the alert
// mask completes, before it goes on to destruct

View File

@ -253,5 +253,7 @@ TORRENT_TEST(settings_pack_abi)
TEST_EQUAL(settings_pack::aio_threads, settings_pack::int_type_base + 104);
TEST_EQUAL(settings_pack::max_http_recv_buffer_size, settings_pack::int_type_base + 115);
TEST_EQUAL(settings_pack::web_seed_name_lookup_retry, settings_pack::int_type_base + 128);
TEST_EQUAL(settings_pack::close_file_interval, settings_pack::int_type_base + 129);
TEST_EQUAL(settings_pack::max_web_seed_connections, settings_pack::int_type_base + 130);
TEST_EQUAL(settings_pack::resolver_cache_timeout, settings_pack::int_type_base + 131);
}