forked from premiere/premiere-libtorrent
make tracker back-off configurable
This commit is contained in:
parent
4ef441f9ca
commit
418c1e8190
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
0.16 release
|
0.16 release
|
||||||
|
|
||||||
|
* make tracker back-off configurable
|
||||||
* don't restart the swarm after downloading metadata from magnet links
|
* don't restart the swarm after downloading metadata from magnet links
|
||||||
* lower the default tracker retry intervals
|
* lower the default tracker retry intervals
|
||||||
* support banning web seeds sending corrupt data
|
* support banning web seeds sending corrupt data
|
||||||
|
|
|
@ -170,6 +170,8 @@ void bind_session_settings()
|
||||||
.def_readwrite("enable_incoming_tcp", &session_settings::enable_incoming_tcp)
|
.def_readwrite("enable_incoming_tcp", &session_settings::enable_incoming_tcp)
|
||||||
.def_readwrite("enable_outgoing_utp", &session_settings::enable_outgoing_utp)
|
.def_readwrite("enable_outgoing_utp", &session_settings::enable_outgoing_utp)
|
||||||
.def_readwrite("enable_incoming_utp", &session_settings::enable_incoming_utp)
|
.def_readwrite("enable_incoming_utp", &session_settings::enable_incoming_utp)
|
||||||
|
.def_readwrite("ssl_listen", &session_settings::ssl_listen)
|
||||||
|
.def_readwrite("tracker_backoff", &session_settings::tracker_backoff)
|
||||||
;
|
;
|
||||||
|
|
||||||
enum_<proxy_settings::proxy_type>("proxy_type")
|
enum_<proxy_settings::proxy_type>("proxy_type")
|
||||||
|
|
|
@ -4299,6 +4299,8 @@ struct session_settings
|
||||||
bool lock_files;
|
bool lock_files;
|
||||||
|
|
||||||
int ssl_listen;
|
int ssl_listen;
|
||||||
|
|
||||||
|
int tracker_backoff;
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<p><tt class="docutils literal"><span class="pre">version</span></tt> is automatically set to the libtorrent version you're using
|
<p><tt class="docutils literal"><span class="pre">version</span></tt> is automatically set to the libtorrent version you're using
|
||||||
|
@ -5037,6 +5039,14 @@ no SSL listen port is opened. Otherwise a socket is opened on this port. This
|
||||||
setting is only taken into account when opening the regular listen port, and
|
setting is only taken into account when opening the regular listen port, and
|
||||||
won't re-open the listen socket simply by changing this setting.</p>
|
won't re-open the listen socket simply by changing this setting.</p>
|
||||||
<p>It defaults to port 4433.</p>
|
<p>It defaults to port 4433.</p>
|
||||||
|
<p><tt class="docutils literal"><span class="pre">tracker_backoff</span></tt> determines how aggressively to back off from retrying
|
||||||
|
failing trackers. This value determines <em>x</em> in the following formula, determining
|
||||||
|
the number of seconds to wait until the next retry:</p>
|
||||||
|
<blockquote>
|
||||||
|
delay = 5 + 5 * x / 100 * fails^2</blockquote>
|
||||||
|
<p>It defaults to 250.</p>
|
||||||
|
<p>This setting may be useful to make libtorrent more or less aggressive in hitting
|
||||||
|
trackers.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="pe-settings">
|
<div class="section" id="pe-settings">
|
||||||
|
@ -6248,7 +6258,7 @@ struct peer_disconnected_alert: peer_alert
|
||||||
<div class="section" id="invalid-request-alert">
|
<div class="section" id="invalid-request-alert">
|
||||||
<h2>invalid_request_alert</h2>
|
<h2>invalid_request_alert</h2>
|
||||||
<p>This is a debug alert that is generated by an incoming invalid piece request.
|
<p>This is a debug alert that is generated by an incoming invalid piece request.
|
||||||
<tt class="docutils literal"><span class="pre">Ïp</span></tt> is the address of the peer and the <tt class="docutils literal"><span class="pre">request</span></tt> is the actual incoming
|
<tt class="docutils literal"><span class="pre">ìp</span></tt> is the address of the peer and the <tt class="docutils literal"><span class="pre">request</span></tt> is the actual incoming
|
||||||
request from the peer.</p>
|
request from the peer.</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
struct invalid_request_alert: peer_alert
|
struct invalid_request_alert: peer_alert
|
||||||
|
@ -7835,13 +7845,13 @@ std::string error_code_to_string(boost::system::error_code const& ec)
|
||||||
static const char const* swedish[] =
|
static const char const* swedish[] =
|
||||||
{
|
{
|
||||||
"inget fel",
|
"inget fel",
|
||||||
"en fil i torrenten kolliderar med en fil frÂn en annan torrent",
|
"en fil i torrenten kolliderar med en fil från en annan torrent",
|
||||||
"hash check misslyckades",
|
"hash check misslyckades",
|
||||||
"torrent filen ‰r inte en dictionary",
|
"torrent filen är inte en dictionary",
|
||||||
"'info'-nyckeln saknas eller ‰r korrupt i torrentfilen",
|
"'info'-nyckeln saknas eller är korrupt i torrentfilen",
|
||||||
"'info'-f‰ltet ‰r inte en dictionary",
|
"'info'-fältet är inte en dictionary",
|
||||||
"'piece length' f‰ltet saknas eller ‰r korrupt i torrentfilen",
|
"'piece length' fältet saknas eller är korrupt i torrentfilen",
|
||||||
"torrentfilen saknar namnf‰ltet",
|
"torrentfilen saknar namnfältet",
|
||||||
"ogiltigt namn i torrentfilen (kan vara en attack)",
|
"ogiltigt namn i torrentfilen (kan vara en attack)",
|
||||||
// ... more strings here
|
// ... more strings here
|
||||||
};
|
};
|
||||||
|
|
|
@ -4556,6 +4556,8 @@ session_settings
|
||||||
bool lock_files;
|
bool lock_files;
|
||||||
|
|
||||||
int ssl_listen;
|
int ssl_listen;
|
||||||
|
|
||||||
|
int tracker_backoff;
|
||||||
};
|
};
|
||||||
|
|
||||||
``version`` is automatically set to the libtorrent version you're using
|
``version`` is automatically set to the libtorrent version you're using
|
||||||
|
@ -5442,6 +5444,17 @@ won't re-open the listen socket simply by changing this setting.
|
||||||
|
|
||||||
It defaults to port 4433.
|
It defaults to port 4433.
|
||||||
|
|
||||||
|
``tracker_backoff`` determines how aggressively to back off from retrying
|
||||||
|
failing trackers. This value determines *x* in the following formula, determining
|
||||||
|
the number of seconds to wait until the next retry:
|
||||||
|
|
||||||
|
delay = 5 + 5 * x / 100 * fails^2
|
||||||
|
|
||||||
|
It defaults to 250.
|
||||||
|
|
||||||
|
This setting may be useful to make libtorrent more or less aggressive in hitting
|
||||||
|
trackers.
|
||||||
|
|
||||||
pe_settings
|
pe_settings
|
||||||
===========
|
===========
|
||||||
|
|
||||||
|
|
|
@ -919,6 +919,14 @@ namespace libtorrent
|
||||||
|
|
||||||
// open an ssl listen socket for ssl torrents on this port
|
// open an ssl listen socket for ssl torrents on this port
|
||||||
int ssl_listen;
|
int ssl_listen;
|
||||||
|
|
||||||
|
// this is the factor X in the formula to calculate the
|
||||||
|
// next tracker timeout:
|
||||||
|
// delay = 5 + X/100 * fails^2
|
||||||
|
// so, it's an exponential back-off, and this factor
|
||||||
|
// determines how fast the back-off happens. Default
|
||||||
|
// is 250
|
||||||
|
int tracker_backoff;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef TORRENT_DISABLE_DHT
|
#ifndef TORRENT_DISABLE_DHT
|
||||||
|
|
|
@ -63,6 +63,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace libtorrent
|
namespace libtorrent
|
||||||
{
|
{
|
||||||
class peer_connection;
|
class peer_connection;
|
||||||
|
struct session_settings;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -144,7 +145,7 @@ namespace libtorrent
|
||||||
min_announce = min_time();
|
min_announce = min_time();
|
||||||
}
|
}
|
||||||
|
|
||||||
void failed(int retry_interval = 0);
|
void failed(session_settings const& sett, int retry_interval = 0);
|
||||||
|
|
||||||
bool will_announce(ptime now) const
|
bool will_announce(ptime now) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -1276,6 +1276,7 @@ namespace libtorrent
|
||||||
, use_disk_read_ahead(true)
|
, use_disk_read_ahead(true)
|
||||||
, lock_files(false)
|
, lock_files(false)
|
||||||
, ssl_listen(4433)
|
, ssl_listen(4433)
|
||||||
|
, tracker_backoff(250)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
session_settings::~session_settings() {}
|
session_settings::~session_settings() {}
|
||||||
|
|
|
@ -441,6 +441,8 @@ namespace aux {
|
||||||
TORRENT_SETTING(integer, read_job_every)
|
TORRENT_SETTING(integer, read_job_every)
|
||||||
TORRENT_SETTING(boolean, use_disk_read_ahead)
|
TORRENT_SETTING(boolean, use_disk_read_ahead)
|
||||||
TORRENT_SETTING(boolean, lock_files)
|
TORRENT_SETTING(boolean, lock_files)
|
||||||
|
TORRENT_SETTING(integer, ssl_listen)
|
||||||
|
TORRENT_SETTING(integer, tracker_backoff)
|
||||||
};
|
};
|
||||||
|
|
||||||
#undef TORRENT_SETTING
|
#undef TORRENT_SETTING
|
||||||
|
|
|
@ -8454,7 +8454,7 @@ namespace libtorrent
|
||||||
announce_entry* ae = find_tracker(r);
|
announce_entry* ae = find_tracker(r);
|
||||||
if (ae)
|
if (ae)
|
||||||
{
|
{
|
||||||
ae->failed(retry_interval);
|
ae->failed(settings(), retry_interval);
|
||||||
ae->last_error = ec;
|
ae->last_error = ec;
|
||||||
ae->message = msg;
|
ae->message = msg;
|
||||||
int tracker_index = ae - &m_trackers[0];
|
int tracker_index = ae - &m_trackers[0];
|
||||||
|
|
|
@ -64,6 +64,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include "libtorrent/utf8.hpp"
|
#include "libtorrent/utf8.hpp"
|
||||||
#include "libtorrent/time.hpp"
|
#include "libtorrent/time.hpp"
|
||||||
#include "libtorrent/invariant_check.hpp"
|
#include "libtorrent/invariant_check.hpp"
|
||||||
|
#include "libtorrent/session_settings.hpp"
|
||||||
|
|
||||||
#if TORRENT_USE_I2P
|
#if TORRENT_USE_I2P
|
||||||
#include "libtorrent/parse_url.hpp"
|
#include "libtorrent/parse_url.hpp"
|
||||||
|
@ -470,13 +471,15 @@ namespace libtorrent
|
||||||
int announce_entry::min_announce_in() const
|
int announce_entry::min_announce_in() const
|
||||||
{ return total_seconds(min_announce - time_now()); }
|
{ return total_seconds(min_announce - time_now()); }
|
||||||
|
|
||||||
void announce_entry::failed(int retry_interval)
|
void announce_entry::failed(session_settings const& sett, int retry_interval)
|
||||||
{
|
{
|
||||||
++fails;
|
++fails;
|
||||||
// the exponential back-off ends up being:
|
// the exponential back-off ends up being:
|
||||||
// 7, 15, 27, 45, 95, 127, 165, ... seconds
|
// 7, 15, 27, 45, 95, 127, 165, ... seconds
|
||||||
|
// with the default tracker_backoff of 250
|
||||||
int delay = (std::min)(tracker_retry_delay_min + int(fails) * int(fails)
|
int delay = (std::min)(tracker_retry_delay_min + int(fails) * int(fails)
|
||||||
* tracker_retry_delay_min / 2, int(tracker_retry_delay_max));
|
* tracker_retry_delay_min * sett.tracker_backoff / 100
|
||||||
|
, int(tracker_retry_delay_max));
|
||||||
delay = (std::max)(delay, retry_interval);
|
delay = (std::max)(delay, retry_interval);
|
||||||
next_announce = time_now() + seconds(delay);
|
next_announce = time_now() + seconds(delay);
|
||||||
updating = false;
|
updating = false;
|
||||||
|
|
|
@ -400,9 +400,11 @@ int test_main()
|
||||||
// on failing announces
|
// on failing announces
|
||||||
announce_entry ae("dummy");
|
announce_entry ae("dummy");
|
||||||
int last = 0;
|
int last = 0;
|
||||||
|
session_settings sett;
|
||||||
|
sett.tracker_backoff = 250;
|
||||||
for (int i = 0; i < 10; ++i)
|
for (int i = 0; i < 10; ++i)
|
||||||
{
|
{
|
||||||
ae.failed(5);
|
ae.failed(sett, 5);
|
||||||
int delay = ae.next_announce_in();
|
int delay = ae.next_announce_in();
|
||||||
TEST_CHECK(delay > last);
|
TEST_CHECK(delay > last);
|
||||||
last = delay;
|
last = delay;
|
||||||
|
|
Loading…
Reference in New Issue