From 61913e7277e7c1c8f7a6573c2e3676a3fb0e70c2 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Sun, 18 Aug 2019 20:54:17 +0200 Subject: [SERVER] altservers: Don't run check if <= 1 alt server available --- src/server/altservers.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/server/altservers.c') diff --git a/src/server/altservers.c b/src/server/altservers.c index 3d5e71e..60c046c 100644 --- a/src/server/altservers.c +++ b/src/server/altservers.c @@ -18,7 +18,7 @@ static dnbd3_connection_t * _Atomic pending[SERVER_MAX_PENDING_ALT_CHECKS]; static dnbd3_signal_t * _Atomic runSignal = NULL; static dnbd3_alt_server_t altServers[SERVER_MAX_ALTS]; -static int numAltServers = 0; +static atomic_int numAltServers = 0; static pthread_mutex_t altServersLock; static pthread_t altThread; @@ -125,6 +125,8 @@ void altservers_findUplink(dnbd3_connection_t *uplink) { if ( uplink->shutdown ) return; + if ( uplink->fd != -1 && numAltServers <= 1 ) + return; int i; // if betterFd != -1 it means the uplink is supposed to switch to another // server. As this function here is called by the uplink thread, it can @@ -454,6 +456,13 @@ static void *altservers_main(void *data UNUSED) dnbd3_connection_t * const uplink = pending[itLink]; if ( uplink == NULL ) continue; + // First, get 4 alt servers + numAlts = altservers_getListForUplink( servers, ALTS, uplink->fd == -1 ); + // If we're already connected and only got one server anyways, there isn't much to do + if ( numAlts <= 1 && uplink->fd != -1 ) { + uplink->rttTestResult = RTT_DONTCHANGE; + continue; + } dnbd3_image_t * const image = image_lock( uplink->image ); if ( image == NULL ) { // Check again after locking mutex_lock( &uplink->rttLock ); @@ -461,13 +470,11 @@ static void *altservers_main(void *data UNUSED) assert( pending[itLink] == uplink ); pending[itLink] = NULL; mutex_unlock( &uplink->rttLock ); - logadd( LOG_DEBUG1, "Image has gone away that was queued for RTT measurement" ); + logadd( LOG_WARNING, "Image has gone away that was queued for RTT measurement" ); continue; } LOG( LOG_DEBUG2, "[%d] Running alt check", itLink ); assert( uplink->rttTestResult == RTT_INPROGRESS ); - // Now get 4 alt servers - numAlts = altservers_getListForUplink( servers, ALTS, uplink->fd == -1 ); if ( uplink->fd != -1 ) { // Add current server if not already in list found = false; -- cgit v1.2.3-55-g7522