]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
ubik: SDISK_Begin no quorum, wrong db, no transaction
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 22 Jan 2015 06:14:28 +0000 (01:14 -0500)
committerStephan Wiesand <stephan.wiesand@desy.de>
Wed, 15 Apr 2015 14:20:22 +0000 (10:20 -0400)
When processing an DISK_Begin RPC verify that there is an active quorum
and that the local database is current.  Otherwise, fail the RPC with
a UNOQUORUM error.

The returned error must be UNOQUORUM instead of USYNC becase the returned
error code will be returned by the coordinator's ContactQuorum_iterate()
to the client that triggered the write transaction.  Most ubik clients
will only retry if the error is UNOQUORUM.

FIXES 131997

Change-Id: Icaa30e6aca82e7e7d33e9171a4f023970aba61df
Reviewed-on: http://gerrit.openafs.org/11689
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Daria Brashear <shadow@your-file-system.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Jeffrey Hutzelman <jhutz@cmu.edu>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
(cherry picked from commit d47beca13236c64ed935fabeff9d1001e8a8871f)
Reviewed-on: http://gerrit.openafs.org/11773
Reviewed-by: Chas Williams <3chas3@gmail.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
src/ubik/remote.c

index 6dabe61c008f58a84eede5019f7e4b3130689960..11bf375faad4b48e8cb9a4d150d06d9737c5abc8 100644 (file)
@@ -71,6 +71,10 @@ SDISK_Begin(struct rx_call *rxcall, struct ubik_tid *atid)
        return code;
     }
     DBHOLD(ubik_dbase);
+    if (urecovery_AllBetter(ubik_dbase, 0) == 0) {
+       code = UNOQUORUM;
+       goto out;
+    }
     urecovery_CheckTid(atid);
     if (ubik_currentTrans) {
        /* If the thread is not waiting for lock - ok to end it */
@@ -89,6 +93,7 @@ SDISK_Begin(struct rx_call *rxcall, struct ubik_tid *atid)
        ubik_currentTrans->tid.epoch = atid->epoch;
        ubik_currentTrans->tid.counter = atid->counter;
     }
+  out:
     DBRELE(ubik_dbase);
     return code;
 }