Skip to content

Commit 7fe7c20

Browse files
committed
Revert "Rewrite update_vm_links"
This reverts commit a4f516f. Signed-off-by: Changlei Li <changlei.li@cloud.com>
1 parent a785717 commit 7fe7c20

1 file changed

Lines changed: 29 additions & 19 deletions

File tree

ocaml/xapi/import.ml

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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. *)
21072106
let 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

21282138
let check_references ~__context (table : table) =
21292139
let is_export_reference r =

0 commit comments

Comments
 (0)