mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 15:00:12 +00:00
ubik: SDISK_Begin no quorum, wrong db, no transaction
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 d47beca132
)
Reviewed-on: http://gerrit.openafs.org/11773
Reviewed-by: Chas Williams <3chas3@gmail.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
This commit is contained in:
parent
3da7b78ea9
commit
09c1b9d5cf
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user