]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Unix CM: Log reason for marking server up or down
authorSimon Wilkinson <sxw@your-file-system.com>
Thu, 24 Nov 2011 17:43:45 +0000 (17:43 +0000)
committerDerrick Brashear <shadow@dementix.org>
Fri, 17 Aug 2012 18:16:56 +0000 (11:16 -0700)
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>
src/afs/afs_analyze.c
src/afs/afs_prototypes.h
src/afs/afs_server.c
src/afs/afs_util.c

index d7a6961de58dcaec1dca8bd679c8f6e433028d28..80d50efafe426d1459a04a953603e45d2a5a42ad 100644 (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) */
index 9266c336e0c0aa6cb4978eb304923d54601efed3..bc72ad846712dfaf2e48e2d598d0a91fe1d077fd 100644 (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);
index bff196954afb959f91000d97c689877953f35dce..1f553cdcfbfb7d924fcf9ec10edc47481dc5a160 100644 (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);
index e05448155e961fc0716869fa084b04f313436bd4..d3244991dbad257eb8e46e30f89c19c7f680a32b 100644 (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 */