ubik: DISK_UpdateInterfaceAddr == server restart
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 11 Feb 2015 06:25:04 +0000 (01:25 -0500)
committerJeffrey Altman <jaltman@your-file-system.com>
Wed, 25 Feb 2015 16:35:38 +0000 (11:35 -0500)
If a DISK_UpdateInterfaceAddr RPC is received the server that sent
it restarted.  Force the urecovery code to verify the server state.

Change-Id: I465863dc3a52d844b56d576bd55229435556cfd6
Reviewed-on: http://gerrit.openafs.org/11738
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Daria Brashear <shadow@your-file-system.com>
Reviewed-by: Jeffrey Hutzelman <jhutz@cmu.edu>
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>

src/ubik/remote.c

index d9e1b1c..fe6ea2d 100644 (file)
@@ -679,6 +679,18 @@ SDISK_UpdateInterfaceAddr(struct rx_call *rxcall,
        ubik_print("... %s\n", afs_inet_ntoa_r(ts->addr[i], hoststr));
 
     UBIK_ADDR_UNLOCK;
+
+    /*
+     * The most likely cause of a DISK_UpdateInterfaceAddr RPC
+     * is because the server was restarted.  Reset its state
+     * so that no DISK_Begin RPCs will be issued until the
+     * known database version is current.
+     */
+    UBIK_BEACON_LOCK;
+    ts->beaconSinceDown = 0;
+    ts->currentDB = 0;
+    urecovery_LostServer(ts);
+    UBIK_BEACON_UNLOCK;
     return 0;
 }