diff options
author | Simon Rettberg | 2019-08-18 20:54:17 +0200 |
---|---|---|
committer | Simon Rettberg | 2019-08-18 20:54:17 +0200 |
commit | 61913e7277e7c1c8f7a6573c2e3676a3fb0e70c2 (patch) | |
tree | 2f6957b2e724f6b19d934159d111a985bfa08576 /src/server/altservers.c | |
parent | [SERVER] net.c: Minor reordering (diff) | |
download | dnbd3-61913e7277e7c1c8f7a6573c2e3676a3fb0e70c2.tar.gz dnbd3-61913e7277e7c1c8f7a6573c2e3676a3fb0e70c2.tar.xz dnbd3-61913e7277e7c1c8f7a6573c2e3676a3fb0e70c2.zip |
[SERVER] altservers: Don't run check if <= 1 alt server available
Diffstat (limited to 'src/server/altservers.c')
-rw-r--r-- | src/server/altservers.c | 15 |
1 files changed, 11 insertions, 4 deletions
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; |