# HG changeset patch # User David Scott # Date 1267532349 0 # Node ID 1d2ea496a8f4aa0a2abfc2575a918403c3e9c172 # Parent 71512f4d5c67ea581ec04b72134b1db5b7af4271 CA-38375: make absolutely sure that every VM has a VM_metrics record: an assumption made by other parts of the code. Signed-off-by: David Scott diff -r 71512f4d5c67 -r 1d2ea496a8f4 ocaml/xapi/dbsync_master.ml --- a/ocaml/xapi/dbsync_master.ml Wed Feb 24 12:18:25 2010 +0000 +++ b/ocaml/xapi/dbsync_master.ml Tue Mar 02 12:19:09 2010 +0000 @@ -188,6 +188,30 @@ let clear_uncooperative_flags_noexn __context = Helpers.log_exn_continue "clearing uncooperative flags" clear_uncooperative_flags __context +let ensure_vm_metrics_records_exist __context = + List.iter (fun vm -> + let m = Db.VM.get_metrics ~__context ~self:vm in + if not(Db.is_valid_ref m) then begin + info "Regenerating missing VM_metrics record for VM %s" (Ref.string_of vm); + let m = Ref.make () in + let uuid = Uuid.to_string (Uuid.make_uuid ()) in + Db.VM_metrics.create ~__context ~ref:m ~uuid + ~vCPUs_number:0L + ~vCPUs_utilisation:[] ~memory_actual:0L + ~vCPUs_CPU:[] + ~vCPUs_params:[] + ~vCPUs_flags:[] + ~start_time:Date.never + ~install_time:Date.never + ~state: [] + ~last_updated:(Date.of_float 0.) + ~other_config:[]; + Db.VM.set_metrics ~__context ~self:vm ~value:m + end + ) (Db.VM.get_all __context) + +let ensure_vm_metrics_records_exist_noexn __context = Helpers.log_exn_continue "ensuring VM_metrics flags exist" ensure_vm_metrics_records_exist __context + (* Update the database to reflect current state. Called for both start of day and after an agent restart. *) let update_env __context = @@ -218,5 +242,7 @@ create_missing_vlan_records ~__context; create_tools_sr_noexn __context; - clear_uncooperative_flags_noexn __context + clear_uncooperative_flags_noexn __context; + + ensure_vm_metrics_records_exist_noexn __context