From: Marcio Barbosa Date: Mon, 21 Aug 2017 19:50:14 +0000 (-0400) Subject: ubik: update ubik_dbVersion during SDISK_SendFile X-Git-Tag: upstream/1.8.0_pre5^2~14 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=1f10f087264cb39a8354c0baf71eb1fa13071466;p=packages%2Fo%2Fopenafs.git ubik: update ubik_dbVersion during SDISK_SendFile The ubik_dbVersion global represents the sync site's database version and it is mostly used by the remote sites for sanity checks. Currently, this global is updated when database changes are made on the sync site (SDISK_Commit or SDISK_SetVersion), as well as every time we vote "yes" for the sync-site in a beacon reply. Unfortunately, ubik_dbVersion is not updated when a copy of the sync site's database is received via DISK_SendFile, and it won't get updated until our next "yes" vote. During this window, the current database version will not match ubik_dbVersion. As a result, any write transaction during this time frame will fail on the remote site in question. To fix this problem, do not wait for the next beacon packet to update ubik_dbVersion when the sync site's database is received; just update it when we get the new database. Since no write transactions are allowed while the db is transferring, ubik_dbVersion can be safely updated. Reviewed-on: https://gerrit.openafs.org/12716 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk (cherry picked from commit 50c1d1088d2adcbb37b6a9d23fdd63617b1267be) Change-Id: Icbbe9efb9c8dab9ac69237380e824d4a523a53d3 Reviewed-on: https://gerrit.openafs.org/12885 Reviewed-by: Marcio Brito Barbosa Tested-by: BuildBot Reviewed-by: Benjamin Kaduk --- diff --git a/src/ubik/remote.c b/src/ubik/remote.c index 1c5a6afb5..d3d0f138a 100644 --- a/src/ubik/remote.c +++ b/src/ubik/remote.c @@ -596,6 +596,7 @@ failed: ("Ubik: Synchronize database with server %s failed (error = %d)\n", afs_inet_ntoa_r(otherHost, hoststr), code); } else { + uvote_set_dbVersion(*avers); ubik_print("Ubik: Synchronize database completed\n"); } DBRELE(dbase);