# HG changeset patch # User David Scott # Date 1259595426 0 # Node ID 0ce8573e2051c86469d7dbcb9144609229929f29 # Parent 867e4af3bc75bd8d1c28ed2e8eebb36b7116edf0 CA-35165: Avoid generating scary-looking exceptions in the startup code: avoid attempting to resynchronise the state of VBDs or VIFs if they are missing (or empty); also silence the setting of the unco-operative flags. Signed-off-by: David Scott diff -r 867e4af3bc75 -r 0ce8573e2051 ocaml/xapi/dbsync_slave.ml --- a/ocaml/xapi/dbsync_slave.ml Mon Nov 30 15:37:05 2009 +0000 +++ b/ocaml/xapi/dbsync_slave.ml Mon Nov 30 15:37:06 2009 +0000 @@ -382,14 +382,16 @@ List.iter (fun vbd -> try - Events.Resync.vbd ~__context token vmref vbd + if Db.is_valid_ref vbd && not (Db.VBD.get_empty ~__context ~self:vbd) + then Events.Resync.vbd ~__context token vmref vbd with e -> warn "Caught error resynchronising VBD: %s" (ExnHelper.string_of_exn e)) vm_vbds; let vm_vifs = vmrec.API.vM_VIFs in List.iter (fun vif -> try - Events.Resync.vif ~__context token vmref vif + if Db.is_valid_ref vif + then Events.Resync.vif ~__context token vmref vif with e -> warn "Caught error resynchronising VIF: %s" (ExnHelper.string_of_exn e)) vm_vifs ) () in diff -r 867e4af3bc75 -r 0ce8573e2051 ocaml/xapi/helpers.ml --- a/ocaml/xapi/helpers.ml Mon Nov 30 15:37:05 2009 +0000 +++ b/ocaml/xapi/helpers.ml Mon Nov 30 15:37:06 2009 +0000 @@ -903,11 +903,15 @@ List.iter (fun k -> if not (List.mem k valid_keys) then Hashtbl.remove table k) keys let set_vm_uncooperative ~__context ~self ~value = - info "VM %s uncooperative <- %b" (Ref.string_of self) value; - begin - try - Db.VM.remove_from_other_config ~__context ~self ~key:"uncooperative" - with _ -> () - end; - Db.VM.add_to_other_config ~__context ~self ~key:"uncooperative" ~value:(string_of_bool value) - + let current_value = + let oc = Db.VM.get_other_config ~__context ~self in + List.mem_assoc "uncooperative" oc && (bool_of_string (List.assoc "uncooperative" oc)) in + if value <> current_value then begin + info "VM %s uncooperative <- %b" (Ref.string_of self) value; + begin + try + Db.VM.remove_from_other_config ~__context ~self ~key:"uncooperative" + with _ -> () + end; + Db.VM.add_to_other_config ~__context ~self ~key:"uncooperative" ~value:(string_of_bool value) + end