diff options
author | Simon Rettberg | 2017-11-08 16:57:08 +0100 |
---|---|---|
committer | Simon Rettberg | 2017-11-08 16:57:08 +0100 |
commit | 57d333b8d7b77be83872ad39007940bb93e2cfa0 (patch) | |
tree | 4c0be45516d6df6481c0f9f73f9442c3a6cd4c0f /src/server/altservers.c | |
parent | [SERVER] rpc: Add q=logfile, q=altservers and q=config to /query (diff) | |
download | dnbd3-57d333b8d7b77be83872ad39007940bb93e2cfa0.tar.gz dnbd3-57d333b8d7b77be83872ad39007940bb93e2cfa0.tar.xz dnbd3-57d333b8d7b77be83872ad39007940bb93e2cfa0.zip |
[SERVER] altservers: Short timeout during RTT measurement, round request range
Rounding to 4k so caching works efficiently
This should now close #3231
Diffstat (limited to 'src/server/altservers.c')
-rw-r--r-- | src/server/altservers.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/server/altservers.c b/src/server/altservers.c index d0bb206..27fb27e 100644 --- a/src/server/altservers.c +++ b/src/server/altservers.c @@ -451,6 +451,7 @@ static void *altservers_main(void *data UNUSED) logadd( LOG_DEBUG1, "Image has gone away that was queued for RTT measurement\n" ); continue; } + logadd( LOG_DEBUG2, "Running altcheck for '%s:%d'", image->name, (int)image->rid ); assert( uplink->rttTestResult == RTT_INPROGRESS ); // Now get 4 alt servers numAlts = altservers_getListForUplink( servers, ALTS, uplink->fd == -1 ); @@ -474,7 +475,7 @@ static void *altservers_main(void *data UNUSED) usleep( 1000 ); // Wait a very short moment for the network to recover (we might be doing lots of measurements...) // Connect clock_gettime( BEST_CLOCK_SOURCE, &start ); - int sock = sock_connect( &servers[itAlt], 750, _uplinkTimeout ); + int sock = sock_connect( &servers[itAlt], 750, 1000 ); if ( sock < 0 ) continue; // Select image ++++++++++++++++++++++++++++++ if ( !dnbd3_select_image( sock, image->name, image->rid, SI_SERVER_FLAGS ) ) { @@ -560,6 +561,7 @@ static void *altservers_main(void *data UNUSED) if ( bestSock != -1 && (uplink->fd == -1 || (bestRtt < 10000000 && RTT_THRESHOLD_FACTOR(currentRtt) > bestRtt)) ) { // yep logadd( LOG_DEBUG1, "Change @ %s - best: %luµs, current: %luµs\n", image->name, bestRtt, currentRtt ); + sock_setTimeout( bestSock, _uplinkTimeout ); spin_lock( &uplink->rttLock ); uplink->betterFd = bestSock; uplink->betterServer = servers[bestIndex]; |