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 <jaltman@secure-endpoints.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>
(cherry picked from commit 33526acb56c1794838c6a8c02e9b8f5022a04ac1)

Change-Id: If0318faf99f2a7582c93f74f3fc210c0c02fbaf7
Reviewed-on: http://gerrit.openafs.org/8001
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
This commit is contained in:
Simon Wilkinson 2011-11-24 17:43:45 +00:00 committed by Derrick Brashear
parent 56ed9bd7f6
commit 78d2ac3c04
4 changed files with 20 additions and 19 deletions

View File

@ -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) */

View File

@ -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);

View File

@ -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);

View File

@ -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 */