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>
Wed, 14 Dec 2011 14:06:48 +0000 (06:06 -0800)
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 <jaltman@secure-endpoints.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: Derrick Brashear <shadow@dementix.org>

src/afs/afs_analyze.c
src/afs/afs_prototypes.h
src/afs/afs_server.c
src/afs/afs_util.c

index 6bec02d..8a417ff 100644 (file)
@@ -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) */
index 945cfe5..46f2c76 100644 (file)
@@ -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);
index 3f4e8d2..b654015 100644 (file)
@@ -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);
index 6b4cf19..90696f1 100644 (file)
@@ -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 */