From 50c1d1088d2adcbb37b6a9d23fdd63617b1267be Mon Sep 17 00:00:00 2001 From: Marcio Barbosa Date: Mon, 21 Aug 2017 15:50:14 -0400 Subject: [PATCH] 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. Change-Id: Ide7a695a69cb3229ad585d9e56c5ddc2efb76dd7 Reviewed-on: https://gerrit.openafs.org/12716 Tested-by: BuildBot Reviewed-by: Mark Vitale Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk --- src/ubik/remote.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ubik/remote.c b/src/ubik/remote.c index 1c5a6afb53..d3d0f138a4 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);