From 78d2ac3c0494fbc690a0ec5a0e36c2b2e4998296 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Thu, 24 Nov 2011 17:43:45 +0000 Subject: [PATCH] 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. Reviewed-on: http://gerrit.openafs.org/6116 Reviewed-by: Jeffrey Altman Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear (cherry picked from commit 33526acb56c1794838c6a8c02e9b8f5022a04ac1) Change-Id: If0318faf99f2a7582c93f74f3fc210c0c02fbaf7 Reviewed-on: http://gerrit.openafs.org/8001 Reviewed-by: Derrick Brashear Tested-by: BuildBot --- src/afs/afs_analyze.c | 4 ++-- src/afs/afs_prototypes.h | 4 ++-- src/afs/afs_server.c | 21 +++++++++++---------- src/afs/afs_util.c | 10 +++++----- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/afs/afs_analyze.c b/src/afs/afs_analyze.c index d7a6961de5..80d50efafe 100644 --- a/src/afs/afs_analyze.c +++ b/src/afs/afs_analyze.c @@ -604,7 +604,7 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn, */ goto out; } - markeddown = afs_ServerDown(sa); + markeddown = afs_ServerDown(sa, acode); ForceNewConnections(sa); /**multi homed clients lock:afs_xsrvAddr? */ if (aerrP) (aerrP->err_Server)++; @@ -730,7 +730,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 9266c336e0..bc72ad8467 100644 --- a/src/afs/afs_prototypes.h +++ b/src/afs/afs_prototypes.h @@ -851,7 +851,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, @@ -997,7 +997,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 bff196954a..1f553cdcfb 100644 --- a/src/afs/afs_server.c +++ b/src/afs/afs_server.c @@ -238,7 +238,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; @@ -248,10 +248,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 */ @@ -318,7 +318,7 @@ CheckVLServer(struct srvAddr *sa, struct vrequest *areq) if (tc->srvr == sa) { afs_MarkServerUpOrDown(sa, 0); print_internet_address("afs: volume location server ", sa, - " is back up", 2); + " is back up", 2, code); } } @@ -539,7 +539,8 @@ CkSrv_MarkUpDown(struct afs_conn **conns, int nconns, afs_int32 *results) if (( results[i] >= 0 ) && (sa->sa_flags & SRVADDR_ISDOWN) && (tc->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); @@ -553,7 +554,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 */ } } @@ -667,19 +668,19 @@ CkSrv_SetTime(struct rx_connection **rxconns, int nconns, int nservers, afs_strcat(msgbuf, ", via "); print_internet_address(msgbuf, sa, "); clock is still fast.", - 0); + 0, 0); } else { afs_strcat(msgbuf, afs_cv2string(&tbuffer[CVBS], delta)); afs_strcat(msgbuf, " seconds (via "); - print_internet_address(msgbuf, sa, ").", 0); + print_internet_address(msgbuf, sa, ").", 0, 0); } } else { strcpy(msgbuf, "afs: setting clock ahead "); afs_strcat(msgbuf, afs_cv2string(&tbuffer[CVBS], -delta)); afs_strcat(msgbuf, " seconds (via "); - print_internet_address(msgbuf, sa, ").", 0); + print_internet_address(msgbuf, sa, ").", 0, 0); } /* We're only going to set it once; why bother looping? */ break; @@ -1808,7 +1809,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->srvr); + afs_ServerDown(tc->srvr, code); ForceNewConnections(tc->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 e05448155e..d3244991db 100644 --- a/src/afs/afs_util.c +++ b/src/afs/afs_util.c @@ -196,7 +196,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"; @@ -216,12 +216,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 */