Ticket #71: r546_ticket71.patch

File r546_ticket71.patch, 2.5 KB (added by brent, 16 years ago)

(3rd try) Adds min interval support, changes inter-interval tracker stress, removes 10 min upper limit on interval.

  • libtransmission/tracker.c

     
    3535    char           stopped;
    3636
    3737    int            interval;
     38    int            min_interval;
    3839    int            seeders;
    3940    int            leechers;
    4041    int            hasManyPeers;
     
    8081    tc->started  = 1;
    8182
    8283    tc->interval = 300;
     84    tc->min_interval = 0;
    8385    tc->seeders  = -1;
    8486    tc->leechers = -1;
    8587
     
    133135       the tracker a bit until we get a decent number of peers */
    134136    if( tc->hasManyPeers )
    135137    {
    136         if( tc->tor->peerCount < 5 && now > tc->dateOk + 10000 )
    137         {
    138             return 1;
     138        /* If there is a min interval specified, respect it */
     139        if( tc->min_interval > 0 ){
     140                        if( tc->tor->peerCount < 30 && now > tc->dateOk + 1000 * tc->min_interval )
     141                        {
     142                                return 1;
     143                        }
     144        }
     145        /* Gentle hammering */
     146        else {
     147                        if( tc->tor->peerCount < 10 && now > tc->dateOk + 60000 )
     148                        {
     149                                return 1;
     150                        }
     151                        if( tc->tor->peerCount < 20 && now > tc->dateOk + 120000 )
     152                        {
     153                                return 1;
     154                        }                       
    139155        }
    140         if( tc->tor->peerCount < 10 && now > tc->dateOk + 20000 )
    141         {
    142             return 1;
    143         }
    144         if( tc->tor->peerCount < 15 && now > tc->dateOk + 30000 )
    145         {
    146             return 1;
    147         }
    148156    }
    149157
    150158    return 0;
     
    483491
    484492    if( !tc->interval )
    485493    {
    486         /* Get the tracker interval, ignore it if it is not between
    487            10 sec and 5 mins */
     494        /* Get the tracker interval, ignore it if it is under
     495           10 sec */
    488496        if( !( beFoo = tr_bencDictFind( &beAll, "interval" ) ) ||
    489497            !( beFoo->type & TYPE_INT ) )
    490498        {
     
    493501        }
    494502
    495503        tc->interval = beFoo->val.i;
    496         tc->interval = MIN( tc->interval, 300 );
     504        //tc->interval = MIN( tc->interval, 300 );
    497505        tc->interval = MAX( 10, tc->interval );
    498506
    499507        tr_inf( "Tracker: interval = %d seconds", tc->interval );
    500508    }
    501509
     510        /* Get min interval */
     511        if( ( beFoo = tr_bencDictFind( &beAll, "min interval" ) ) &&
     512                ( beFoo->type & TYPE_INT ) )
     513        {
     514                 tc->min_interval = beFoo->val.i;
     515                 tr_inf( "Tracker: min interval = %d seconds", tc->min_interval );
     516                 //interval should not be less than min_interval
     517                 tc->interval = MAX( tc->min_interval, tc->interval );
     518        }           
     519
    502520    if( ( beFoo = tr_bencDictFind( &beAll, "complete" ) ) &&
    503521        ( beFoo->type & TYPE_INT ) )
    504522    {