(trunk libT) #3219 "Don't scrape paused torrents" -- allow this as a 'hidden' option in settings.json, but don't add it to the GUI or to RPC.

This commit is contained in:
Jordan Lee 2011-07-23 17:14:12 +00:00
parent 4cdb84aa0d
commit 3928a9d8e9
4 changed files with 27 additions and 11 deletions

View File

@ -313,16 +313,24 @@ typedef struct tr_tier
tr_tier;
static time_t
get_next_scrape_time( int interval )
get_next_scrape_time( const tr_session * session, const tr_tier * tier, int interval )
{
time_t ret;
const time_t now = tr_time( );
/* Maybe don't scrape paused torrents */
if( !tier->isRunning && !session->scrapePausedTorrents )
ret = 0;
/* Add the interval, and then increment to the nearest 10th second.
* The latter step is to increase the odds of several torrents coming
* due at the same time to improve multiscrape. */
ret = now + interval;
while( ret % 10 ) ++ret;
else {
ret = now + interval;
while( ret % 10 )
++ret;
}
return ret;
}
@ -338,7 +346,7 @@ tierConstruct( tr_tier * tier, tr_torrent * tor )
tier->scrapeIntervalSec = DEFAULT_SCRAPE_INTERVAL_SEC;
tier->announceIntervalSec = DEFAULT_ANNOUNCE_INTERVAL_SEC;
tier->announceMinIntervalSec = DEFAULT_ANNOUNCE_MIN_INTERVAL_SEC;
tier->scrapeAt = get_next_scrape_time( tr_cryptoWeakRandInt( 180 ) );
tier->scrapeAt = get_next_scrape_time( tor->session, tier, tr_cryptoWeakRandInt( 180 ) );
tier->tor = tor;
}
@ -1109,7 +1117,7 @@ on_announce_done( const tr_announce_response * response,
sizeof( tier->lastAnnounceStr ) );
tier->isRunning = data->isRunningOnSuccess;
tier->scrapeAt = get_next_scrape_time( tier->scrapeIntervalSec );
tier->scrapeAt = get_next_scrape_time( announcer->session, tier, tier->scrapeIntervalSec );
tier->lastScrapeTime = now;
tier->lastScrapeSucceeded = true;
tier->lastAnnounceSucceeded = true;
@ -1201,7 +1209,7 @@ tierAnnounce( tr_announcer * announcer, tr_tier * tier )
***/
static void
on_scrape_error( tr_tier * tier, const char * errmsg )
on_scrape_error( tr_session * session, tr_tier * tier, const char * errmsg )
{
int interval;
@ -1222,7 +1230,7 @@ on_scrape_error( tr_tier * tier, const char * errmsg )
dbgmsg( tier, "Retrying scrape in %zu seconds.", (size_t)interval );
tr_torinf( tier->tor, "Retrying scrape in %zu seconds.", (size_t)interval );
tier->lastScrapeSucceeded = false;
tier->scrapeAt = get_next_scrape_time( interval );
tier->scrapeAt = get_next_scrape_time( session, tier, interval );
}
static tr_tier *
@ -1285,15 +1293,15 @@ on_scrape_done( const tr_scrape_response * response, void * vsession )
if( !response->did_connect )
{
on_scrape_error( tier, _( "Could not connect to tracker" ) );
on_scrape_error( session, tier, _( "Could not connect to tracker" ) );
}
else if( response->did_timeout )
{
on_scrape_error( tier, _( "Tracker did not respond" ) );
on_scrape_error( session, tier, _( "Tracker did not respond" ) );
}
else if( response->errmsg )
{
on_scrape_error( tier, response->errmsg );
on_scrape_error( session, tier, response->errmsg );
}
else
{
@ -1302,7 +1310,7 @@ on_scrape_done( const tr_scrape_response * response, void * vsession )
tier->lastScrapeSucceeded = true;
tier->scrapeIntervalSec = MAX( DEFAULT_SCRAPE_INTERVAL_SEC,
response->min_request_interval );
tier->scrapeAt = get_next_scrape_time( tier->scrapeIntervalSec );
tier->scrapeAt = get_next_scrape_time( session, tier, tier->scrapeIntervalSec );
tr_tordbg( tier->tor, "Scrape successful. Rescraping in %d seconds.",
tier->scrapeIntervalSec );

View File

@ -342,6 +342,7 @@ tr_sessionGetDefaultSettings( tr_benc * d )
tr_bencDictAddBool( d, TR_PREFS_KEY_RPC_WHITELIST_ENABLED, true );
tr_bencDictAddInt ( d, TR_PREFS_KEY_RPC_PORT, atoi( TR_DEFAULT_RPC_PORT_STR ) );
tr_bencDictAddStr ( d, TR_PREFS_KEY_RPC_URL, TR_DEFAULT_RPC_URL_STR );
tr_bencDictAddBool( d, TR_PREFS_KEY_SCRAPE_PAUSED_TORRENTS, true );
tr_bencDictAddStr ( d, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_FILENAME, "" );
tr_bencDictAddBool( d, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_ENABLED, false );
tr_bencDictAddBool( d, TR_PREFS_KEY_ALT_SPEED_ENABLED, false );
@ -406,6 +407,7 @@ tr_sessionGetSettings( tr_session * s, struct tr_benc * d )
tr_bencDictAddStr ( d, TR_PREFS_KEY_RPC_USERNAME, tr_sessionGetRPCUsername( s ) );
tr_bencDictAddStr ( d, TR_PREFS_KEY_RPC_WHITELIST, tr_sessionGetRPCWhitelist( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_RPC_WHITELIST_ENABLED, tr_sessionGetRPCWhitelistEnabled( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_SCRAPE_PAUSED_TORRENTS, s->scrapePausedTorrents );
tr_bencDictAddBool( d, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_ENABLED, tr_sessionIsTorrentDoneScriptEnabled( s ) );
tr_bencDictAddStr ( d, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_FILENAME, tr_sessionGetTorrentDoneScript( s ) );
tr_bencDictAddBool( d, TR_PREFS_KEY_ALT_SPEED_ENABLED, tr_sessionUsesAltSpeed( s ) );
@ -886,6 +888,10 @@ sessionSetImpl( void * vdata )
if( tr_bencDictFindStr( settings, TR_PREFS_KEY_SCRIPT_TORRENT_DONE_FILENAME, &str ) )
tr_sessionSetTorrentDoneScript( session, str );
if( tr_bencDictFindBool( settings, TR_PREFS_KEY_SCRAPE_PAUSED_TORRENTS, &boolVal ) )
session->scrapePausedTorrents = boolVal;
data->done = true;
}

View File

@ -107,6 +107,7 @@ struct tr_session
bool isIncompleteDirEnabled;
bool pauseAddedTorrent;
bool deleteSourceTorrent;
bool scrapePausedTorrents;
tr_benc removedTorrents;

View File

@ -201,6 +201,7 @@ const char* tr_getDefaultDownloadDir( void );
#define TR_PREFS_KEY_RPC_USERNAME "rpc-username"
#define TR_PREFS_KEY_RPC_URL "rpc-url"
#define TR_PREFS_KEY_RPC_WHITELIST_ENABLED "rpc-whitelist-enabled"
#define TR_PREFS_KEY_SCRAPE_PAUSED_TORRENTS "scrape-paused-torrents-enabled"
#define TR_PREFS_KEY_SCRIPT_TORRENT_DONE_FILENAME "script-torrent-done-filename"
#define TR_PREFS_KEY_SCRIPT_TORRENT_DONE_ENABLED "script-torrent-done-enabled"
#define TR_PREFS_KEY_RPC_WHITELIST "rpc-whitelist"