Changeset 11730
- Timestamp:
- Jan 20, 2011, 10:51:05 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/announcer.c
r11729 r11730 308 308 int downloadCount; 309 309 int downloaderCount; 310 311 int consecutiveAnnounceFailures; 310 312 311 313 uint32_t id; … … 1095 1097 1096 1098 static int 1097 getRetryInterval( const tr_host * host ) 1098 { 1099 int interval; 1100 const int jitter = tr_cryptoWeakRandInt( 120 ); 1101 const time_t timeSinceLastSuccess = tr_time() - host->lastSuccessfulRequest; 1102 if( timeSinceLastSuccess < 15*60 ) interval = 0; 1103 else if( timeSinceLastSuccess < 30*60 ) interval = 60*4; 1104 else if( timeSinceLastSuccess < 45*60 ) interval = 60*8; 1105 else if( timeSinceLastSuccess < 60*60 ) interval = 60*16; 1106 else interval = 60*32; 1107 return interval + jitter; 1099 getRetryInterval( const tr_tracker_item * t ) 1100 { 1101 int minutes; 1102 const int jitter_seconds = tr_cryptoWeakRandInt( 120 ); 1103 1104 switch( t->consecutiveAnnounceFailures ) { 1105 case 0: minutes = 0; break; 1106 case 1: minutes = 1; break; 1107 case 2: minutes = 2; break; 1108 case 3: minutes = 4; break; 1109 case 4: minutes = 8; break; 1110 case 5: minutes = 16; break; 1111 default: minutes = 32; break; 1112 } 1113 1114 return ( minutes * 60 ) + jitter_seconds; 1108 1115 } 1109 1116 … … 1366 1373 if( responseCode == HTTP_OK ) 1367 1374 { 1375 tier->currentTracker->consecutiveAnnounceFailures = 0; 1368 1376 success = parseAnnounceResponse( tier, response, responseLen, &gotScrape ); 1369 1377 dbgmsg( tier, "success is %d", success ); … … 1391 1399 sizeof( tier->lastAnnounceStr ) ); 1392 1400 1401 ++tier->currentTracker->consecutiveAnnounceFailures; 1402 1393 1403 /* if the response is serious, *and* if the response may require 1394 1404 * human intervention, then notify the user... otherwise just log it */ … … 1416 1426 if( responseCode == 0 ) 1417 1427 { 1418 const int interval = getRetryInterval( tier->currentTracker ->host);1428 const int interval = getRetryInterval( tier->currentTracker ); 1419 1429 dbgmsg( tier, "No response from tracker... retrying in %d seconds.", interval ); 1420 1430 tier->manualAnnounceAllowedAt = ~(time_t)0; … … 1459 1469 * So we pause a bit and try again. */ 1460 1470 1461 const int interval = getRetryInterval( tier->currentTracker ->host);1471 const int interval = getRetryInterval( tier->currentTracker ); 1462 1472 tier->manualAnnounceAllowedAt = ~(time_t)0; 1463 1473 tierAddAnnounce( tier, announceEvent, now + interval ); … … 1725 1735 else 1726 1736 { 1727 const int interval = getRetryInterval( tier->currentTracker ->host);1737 const int interval = getRetryInterval( tier->currentTracker ); 1728 1738 1729 1739 /* Don't retry on a 4xx.
Note: See TracChangeset
for help on using the changeset viewer.