@@ -2103,27 +2103,37 @@ let update_vdi_links ~__context state =
21032103 in
21042104 List. iter go state.table
21052105
2106- (* Same as [update_vdi_links] but over VMs instead. *)
21072106let update_vm_links ~__context state =
2108- let resolve_import =
2109- let tbl = Hashtbl. create 16 in
2110- let go (_ , a , b ) = Hashtbl. replace tbl a (Ref. of_string b) in
2111- List. iter go state.table ;
2112- fun r ->
2113- Hashtbl. find_opt tbl (Ref. string_of r) |> Option. value ~default: Ref. null
2114- in
2115- let update x =
2116- let x_r = Db.VM. get_record ~__context ~self: x in
2117- let parent = resolve_import x_r.API. vM_parent in
2118- let snapshot_of = resolve_import x_r.API. vM_snapshot_of in
2119- Db.VM. set_parent ~__context ~self: x ~value: parent ;
2120- Db.VM. set_snapshot_of ~__context ~self: x ~value: snapshot_of ;
2121- Db.VM. set_is_a_snapshot ~__context ~self: x ~value: (snapshot_of <> Ref. null)
2122- in
2123- let go (cls , _ , r ) =
2124- if cls = Datamodel_common. _vm then update (Ref. of_string r)
2107+ let aux (cls , _ , ref ) =
2108+ let ref = Ref. of_string ref in
2109+ ( if
2110+ cls = Datamodel_common. _vm
2111+ && Db.VM. get_is_a_snapshot ~__context ~self: ref
2112+ then
2113+ let snapshot_of = Db.VM. get_snapshot_of ~__context ~self: ref in
2114+ if snapshot_of <> Ref. null then (
2115+ debug " lookup for snapshot_of = '%s'" (Ref. string_of snapshot_of) ;
2116+ log_reraise
2117+ (" Failed to find the VM which is snapshot of "
2118+ ^ Db.VM. get_name_label ~__context ~self: ref
2119+ )
2120+ (fun table ->
2121+ let snapshot_of = (lookup snapshot_of) table in
2122+ Db.VM. set_snapshot_of ~__context ~self: ref ~value: snapshot_of
2123+ )
2124+ state.table
2125+ )
2126+ ) ;
2127+ if cls = Datamodel_common. _vm then (
2128+ let parent = Db.VM. get_parent ~__context ~self: ref in
2129+ debug " lookup for parent = '%s'" (Ref. string_of parent) ;
2130+ try
2131+ let parent = lookup parent state.table in
2132+ Db.VM. set_parent ~__context ~self: ref ~value: parent
2133+ with _ -> debug " no parent found"
2134+ )
21252135 in
2126- List. iter go state.table
2136+ List. iter aux state.table
21272137
21282138let check_references ~__context (table : table ) =
21292139 let is_export_reference r =
0 commit comments