From 8edafd92c0ec5b31aff7f86b73f954a04d0f17d4 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Mon, 17 Aug 2009 12:23:57 -0400 Subject: [PATCH] Updates to Jake's RTT based server ranking (Gerrit 317) Remove check on powerStateSuspend in cm_Daemon() Update the server Reference lists if the ranking changes. Change-Id: Id290e0f98c616a12f4f8b1746dca58ad7a0f06ce Reviewed-on: http://gerrit.openafs.org/729 Tested-by: Jeffrey Altman Reviewed-by: Jacob Thebault-Spieker Reviewed-by: Jeffrey Altman --- src/WINNT/afsd/cm_daemon.c | 2 +- src/WINNT/afsd/cm_server.c | 30 ++++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/WINNT/afsd/cm_daemon.c b/src/WINNT/afsd/cm_daemon.c index e71fbbe7e..48c859d54 100644 --- a/src/WINNT/afsd/cm_daemon.c +++ b/src/WINNT/afsd/cm_daemon.c @@ -519,7 +519,7 @@ void cm_Daemon(long parm) lastServerRankCheck = now; osi_Log0(afsd_logp, "cm_Daemon RankServer"); cm_RankUpServers(); - if(daemon_ShutdownFlag == 1 || powerStateSuspended) + if(daemon_ShutdownFlag == 1) break; now = osi_Time(); } diff --git a/src/WINNT/afsd/cm_server.c b/src/WINNT/afsd/cm_server.c index 33ff2dc8b..fa7802869 100644 --- a/src/WINNT/afsd/cm_server.c +++ b/src/WINNT/afsd/cm_server.c @@ -57,6 +57,7 @@ cm_RankServer(cm_server_t * tsp) afs_int32 code = 0; /* start with "success" */ struct rx_debugPeer tpeer; afs_uint16 port; + afs_uint16 newRank; switch(tsp->type) { case CM_SERVER_VLDB: @@ -77,12 +78,33 @@ cm_RankServer(cm_server_t * tsp) if(code == 0) { if((tsp->flags & CM_SERVERFLAG_PREF_SET)) - tsp->ipRank = tsp->adminRank + ((int)(623 * log(tpeer.rtt) / 10) * - 10 + 5); + newRank = tsp->adminRank + + ((int)(623 * log(tpeer.rtt) / 10) * 10 + 5); else /* rank has not been set by admin, derive rank from rtt */ - tsp->ipRank = (int)(7200 * log(tpeer.rtt) / 5000) * 5000 + 5000; + newRank = (int)(7200 * log(tpeer.rtt) / 5000) * 5000 + 5000; - tsp->ipRank += (rand() & 0x000f); /* randomize */ + newRank += (rand() & 0x000f); /* randomize */ + + if (abs(newRank - tsp->ipRank) > 0xf) { + tsp->ipRank = newRank; + + lock_ReleaseMutex(&tsp->mx); + switch (tsp->type) { + case CM_SERVER_FILE: + /* + * find volumes which might have RO copy + * on server and change the ordering of + * their RO list + */ + cm_ChangeRankVolume(tsp); + break; + case CM_SERVER_VLDB: + /* set preferences for an existing vlserver */ + cm_ChangeRankCellVLServer(tsp); + break; + } + lock_ObtainMutex(&tsp->mx); + } } return code; -- 2.39.5