[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-API] [PATCH] fix an upgrade race in the Host_patch record update logic



# HG changeset patch
# User David Scott <dave.scott@xxxxxxxxxxxxx>
# Date 1264088709 0
# Node ID 22cd3f304b9e0818b80ac5a40e6d4c6438c5e58a
# Parent  d062b05c786746edc58629bf4128aa5444f853d9
CA-35549: fix a race in the Host_patch record update logic

The master checks every 30s if we've just finished a rolling upgrade by 
noticing when
all the Host.software_version:product_version strings match. It then calls a 
script

  /opt/xensource/libexec/xapi-rolling-upgrade stop

which currently deletes pool-wide patch records if all the per-host links are 
gone.
Unfortunately the dbsync code on the slave was updating the software_version 
before
deleting the per-host links, creating a race which could result in old patch 
records
lingering, confusingly around.

Signed-off-by: David Scott <dave.scott@xxxxxxxxxxxxx>

diff -r d062b05c7867 -r 22cd3f304b9e ocaml/xapi/dbsync_slave.ml
--- a/ocaml/xapi/dbsync_slave.ml        Tue Jan 19 15:17:14 2010 +0000
+++ b/ocaml/xapi/dbsync_slave.ml        Thu Jan 21 15:45:09 2010 +0000
@@ -86,6 +86,7 @@
   Xapi_globs.localhost_software_version := software_version; (* Cache this *)
 
   (* Xapi_ha_flags.resync_host_armed_flag __context host; *)
+  debug "Updating host software_version";
 
     Db.Host.set_software_version ~__context ~self:host ~value:software_version;
     Db.Host.set_API_version_major ~__context ~self:host 
~value:Xapi_globs.api_version_major;
@@ -664,11 +665,6 @@
   (* Load the host rrd *)
   Monitor_rrds.load_rrd ~__context (Helpers.get_localhost_uuid ()) true;
 
-  (* refresh host info fields *)
-  switched_sync Xapi_globs.sync_refresh_localhost_info (fun () -> 
-    refresh_localhost_info ~__context;
-  );
-
   (* maybe record host memory properties in database *)
   switched_sync Xapi_globs.sync_record_host_memory_properties (fun () ->
     record_host_memory_properties ~__context;
@@ -741,3 +737,13 @@
     if Db.Host.get_bios_strings ~__context ~self:localhost = [] then
       Bios_strings.set_host_bios_strings ~__context ~host:localhost
   );
+
+  (* CA-35549: In a pool rolling upgrade, the master will detect the end of 
upgrade when the software versions
+        of all the hosts are the same. It will then assume that (for example) 
per-host patch records have
+        been tidied up and attempt to delete orphaned pool-wide patch records. 
*)
+
+  (* refresh host info fields *)
+  switched_sync Xapi_globs.sync_refresh_localhost_info (fun () -> 
+    refresh_localhost_info ~__context;
+  );
+
diff -r d062b05c7867 -r 22cd3f304b9e scripts/xapi-rolling-upgrade-miami
--- a/scripts/xapi-rolling-upgrade-miami        Tue Jan 19 15:17:14 2010 +0000
+++ b/scripts/xapi-rolling-upgrade-miami        Thu Jan 21 15:45:09 2010 +0000
@@ -24,8 +24,6 @@
     
   ;;
   stop)
-    logger -t upgrade "Sleeping for 30s"
-    sleep 30s
     for i in $($XE sr-list other-config:xenserver_tools_sr=true params=uuid 
--minimal | sed 's/,/ /g'); do
       echo Renaming $i
       $XE sr-param-set uuid=$i name-label="XenServer Tools" 
name-description="XenServer Tools ISOs"
2 files changed, 11 insertions(+), 7 deletions(-)
ocaml/xapi/dbsync_slave.ml         |   16 +++++++++++-----
scripts/xapi-rolling-upgrade-miami |    2 --


Attachment: xen-api.hg.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.