diff --git a/ocaml/xapi/storage_migrate.ml b/ocaml/xapi/storage_migrate.ml index 2686208d73..6f153515ed 100644 --- a/ocaml/xapi/storage_migrate.ml +++ b/ocaml/xapi/storage_migrate.ml @@ -1320,7 +1320,7 @@ let pre_deactivate_hook ~dbg:_ ~dp:_ ~sr ~vdi = s.failed <- true ) -let post_detach_hook ~sr ~vdi ~dp:_ = +let post_deactivate_hook ~sr ~vdi ~dp:_ = let open State.Send_state in let id = State.mirror_id_of (sr, vdi) in State.find_active_local_mirror id diff --git a/ocaml/xapi/storage_smapiv1_wrapper.ml b/ocaml/xapi/storage_smapiv1_wrapper.ml index fbb30a2177..f71e2b21d9 100644 --- a/ocaml/xapi/storage_smapiv1_wrapper.ml +++ b/ocaml/xapi/storage_smapiv1_wrapper.ml @@ -422,10 +422,10 @@ functor | Vdi_automaton.Deactivate -> Storage_migrate.pre_deactivate_hook ~dbg ~dp ~sr ~vdi ; Impl.VDI.deactivate context ~dbg ~dp ~sr ~vdi ~vm ; + Storage_migrate.post_deactivate_hook ~sr ~vdi ~dp ; vdi_t | Vdi_automaton.Detach -> Impl.VDI.detach context ~dbg ~dp ~sr ~vdi ~vm ; - Storage_migrate.post_detach_hook ~sr ~vdi ~dp ; vdi_t in Sr.add_or_replace vdi new_vdi_t sr_t ; diff --git a/ocaml/xenopsd/lib/xenops_server.ml b/ocaml/xenopsd/lib/xenops_server.ml index bdab2c0e91..e3f0a77f5e 100644 --- a/ocaml/xenopsd/lib/xenops_server.ml +++ b/ocaml/xenopsd/lib/xenops_server.ml @@ -2732,23 +2732,6 @@ and perform_exn ?result (op : operation) (t : Xenops_task.task_handle) : unit = ) ; debug "VM.migrate: Synchronisation point 1" in - let pause_src_vm () = - debug - "VM.migrate: pause src vm before allowing destination to proceed" ; - (* cleanup tmp src VM *) - let atomics = - [ - VM_hook_script_stable - ( id - , Xenops_hooks.VM_pre_destroy - , Xenops_hooks.reason__suspend - , new_src_id - ) - ] - @ atomics_of_operation (VM_shutdown (new_src_id, None)) - in - perform_atomics atomics t - in let final_handshake () = Handshake.send vm_fd Handshake.Success ; debug "VM.migrate: Synchronisation point 3" ; @@ -2789,10 +2772,7 @@ and perform_exn ?result (op : operation) (t : Xenops_task.task_handle) : unit = the main VM migration sequence. *) match VGPU_DB.ids id with | [] -> - first_handshake () ; - save () ; - pause_src_vm () ; - final_handshake () + first_handshake () ; save () ; final_handshake () | (_vm_id, dev_id) :: _ -> let url = make_url "/migrate/vgpu/" @@ -2809,12 +2789,20 @@ and perform_exn ?result (op : operation) (t : Xenops_task.task_handle) : unit = first_handshake () ; save ~vgpu_fd:(FD vgpu_fd) () ) ; - pause_src_vm () ; final_handshake () ) ; - let cleanup_src_vm () = - let atomics = - [ + (* cleanup tmp src VM *) + let atomics = + [ + VM_hook_script_stable + ( id + , Xenops_hooks.VM_pre_destroy + , Xenops_hooks.reason__suspend + , new_src_id + ) + ] + @ atomics_of_operation (VM_shutdown (new_src_id, None)) + @ [ VM_hook_script_stable ( id , Xenops_hooks.VM_post_destroy @@ -2823,10 +2811,8 @@ and perform_exn ?result (op : operation) (t : Xenops_task.task_handle) : unit = ) ; VM_remove new_src_id ] - in - perform_atomics atomics t in - cleanup_src_vm () + perform_atomics atomics t | VM_receive_memory { vmr_id= id