summaryrefslogtreecommitdiffstats
path: root/src/server/altservers.c
diff options
context:
space:
mode:
authorSimon Rettberg2019-08-18 20:54:17 +0200
committerSimon Rettberg2019-08-18 20:54:17 +0200
commit61913e7277e7c1c8f7a6573c2e3676a3fb0e70c2 (patch)
tree2f6957b2e724f6b19d934159d111a985bfa08576 /src/server/altservers.c
parent[SERVER] net.c: Minor reordering (diff)
downloaddnbd3-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.c15
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;