From 33526acb56c1794838c6a8c02e9b8f5022a04ac1 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Thu, 24 Nov 2011 17:43:45 +0000 Subject: [PATCH 1/1] Unix CM: Log reason for marking server up or down When we mark a server up or down also log the error code that says why we did so, for help in debugging connection issues. Change-Id: I1a14434607499c9932e23724b8e403442dc400c7 Reviewed-on: http://gerrit.openafs.org/6116 Reviewed-by: Jeffrey Altman Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/afs_analyze.c | 4 ++-- src/afs/afs_prototypes.h | 4 ++-- src/afs/afs_server.c | 15 ++++++++------- src/afs/afs_util.c | 10 +++++----- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/afs/afs_analyze.c b/src/afs/afs_analyze.c index 6bec02d..8a417ff 100644 --- a/src/afs/afs_analyze.c +++ b/src/afs/afs_analyze.c @@ -530,7 +530,7 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn, */ goto out; } - afs_ServerDown(sa); + afs_ServerDown(sa, acode); ForceNewConnections(sa); /**multi homed clients lock:afs_xsrvAddr? */ if (aerrP) (aerrP->err_Server)++; @@ -650,7 +650,7 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn, } /* check for ubik errors; treat them like crashed servers */ else if (acode >= ERROR_TABLE_BASE_U && acode < ERROR_TABLE_BASE_U + 255) { - afs_ServerDown(sa); + afs_ServerDown(sa, acode); if (aerrP) (aerrP->err_Server)++; shouldRetry = 1; /* retryable (maybe one is working) */ diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h index 945cfe5..46f2c76 100644 --- a/src/afs/afs_prototypes.h +++ b/src/afs/afs_prototypes.h @@ -865,7 +865,7 @@ extern struct server *afs_GetServer(afs_uint32 * aserver, afs_int32 nservers, extern void afs_GetCapabilities(struct server *ts); extern void ForceAllNewConnections(void); extern void afs_MarkServerUpOrDown(struct srvAddr *sa, int a_isDown); -extern afs_int32 afs_ServerDown(struct srvAddr *sa); +extern afs_int32 afs_ServerDown(struct srvAddr *sa, int code); extern void afs_CountServers(void); extern void afs_CheckServers(int adown, struct cell *acellp); extern void afs_LoopServers(int adown, struct cell *acellp, int vlalso, @@ -1027,7 +1027,7 @@ extern char *afs_strrchr(char *s, int c); #endif extern char *afs_strdup(char *s); extern void print_internet_address(char *preamble, struct srvAddr *sa, - char *postamble, int flag); + char *postamble, int flag, int code); extern afs_int32 afs_data_pointer_to_int32(const void *p); extern void afs_CheckLocks(void); diff --git a/src/afs/afs_server.c b/src/afs/afs_server.c index 3f4e8d2..b654015 100644 --- a/src/afs/afs_server.c +++ b/src/afs/afs_server.c @@ -230,7 +230,7 @@ afs_MarkServerUpOrDown(struct srvAddr *sa, int a_isDown) afs_int32 -afs_ServerDown(struct srvAddr *sa) +afs_ServerDown(struct srvAddr *sa, int code) { struct server *aserver = sa->server; @@ -240,10 +240,10 @@ afs_ServerDown(struct srvAddr *sa) afs_MarkServerUpOrDown(sa, SRVR_ISDOWN); if (sa->sa_portal == aserver->cell->vlport) print_internet_address - ("afs: Lost contact with volume location server ", sa, "", 1); + ("afs: Lost contact with volume location server ", sa, "", 1, code); else print_internet_address("afs: Lost contact with file server ", sa, "", - 1); + 1, code); return 1; } /*ServerDown */ @@ -309,7 +309,7 @@ CheckVLServer(struct srvAddr *sa, struct vrequest *areq) if (tc->parent->srvr == sa) { afs_MarkServerUpOrDown(sa, 0); print_internet_address("afs: volume location server ", sa, - " is back up", 2); + " is back up", 2, code); } } @@ -530,7 +530,8 @@ CkSrv_MarkUpDown(struct afs_conn **conns, int nconns, afs_int32 *results) if (( results[i] >= 0 ) && (sa->sa_flags & SRVADDR_ISDOWN) && (tc->parent->srvr == sa)) { /* server back up */ - print_internet_address("afs: file server ", sa, " is back up", 2); + print_internet_address("afs: file server ", sa, " is back up", 2, + results[i]); ObtainWriteLock(&afs_xserver, 244); ObtainWriteLock(&afs_xsrvAddr, 245); @@ -544,7 +545,7 @@ CkSrv_MarkUpDown(struct afs_conn **conns, int nconns, afs_int32 *results) } else { if (results[i] < 0) { /* server crashed */ - afs_ServerDown(sa); + afs_ServerDown(sa, results[i]); ForceNewConnections(sa); /* multi homed clients */ } } @@ -1558,7 +1559,7 @@ afs_GetCapabilities(struct server *ts) ObtainWriteLock(&afs_xserver, 723); /* we forced a conn above; important we mark it down if needed */ if ((code < 0) && (code != RXGEN_OPCODE)) { - afs_ServerDown(tc->parent->srvr); + afs_ServerDown(tc->parent->srvr, code); ForceNewConnections(tc->parent->srvr); /* multi homed clients */ } afs_PutConn(tc, rxconn, SHARED_LOCK); diff --git a/src/afs/afs_util.c b/src/afs/afs_util.c index 6b4cf19..90696f1 100644 --- a/src/afs/afs_util.c +++ b/src/afs/afs_util.c @@ -194,7 +194,7 @@ afs_strdup(char *s) void print_internet_address(char *preamble, struct srvAddr *sa, char *postamble, - int flag) + int flag, int code) { struct server *aserver = sa->server; char *ptr = "\n"; @@ -214,12 +214,12 @@ print_internet_address(char *preamble, struct srvAddr *sa, char *postamble, " (multi-homed address; other same-host interfaces may still be down)\n"; } } - afs_warn("%s%d.%d.%d.%d in cell %s%s%s", preamble, (address >> 24), + afs_warn("%s%d.%d.%d.%d in cell %s%s (code %d)%s", preamble, (address >> 24), (address >> 16) & 0xff, (address >> 8) & 0xff, (address) & 0xff, - aserver->cell->cellName, postamble, ptr); - afs_warnuser("%s%d.%d.%d.%d in cell %s%s%s", preamble, (address >> 24), + aserver->cell->cellName, postamble, code, ptr); + afs_warnuser("%s%d.%d.%d.%d in cell %s%s (code %d)%s", preamble, (address >> 24), (address >> 16) & 0xff, (address >> 8) & 0xff, - (address) & 0xff, aserver->cell->cellName, postamble, ptr); + (address) & 0xff, aserver->cell->cellName, postamble, code, ptr); } /*print_internet_address */ -- 1.9.4