@@ -1000,37 +1000,70 @@ module StorageAPI (R : RPC) = struct
10001000 @-> returning result_p err
10011001 )
10021002
1003+ (* * [import_activate dbg dp sr vdi vm] returns a server socket address to
1004+ which a fd can be passed via SCM_RIGHTS for mirroring purposes.*)
1005+ let import_activate =
1006+ declare " DATA.import_activate" []
1007+ (dbg_p
1008+ @-> dp_p
1009+ @-> sr_p
1010+ @-> vdi_p
1011+ @-> vm_p
1012+ @-> returning sock_path_p err
1013+ )
1014+
1015+ (* * [get_nbd_server dbg dp sr vdi vm] returns the address of a generic nbd
1016+ server that can be connected to. Depending on the backend, this will either
1017+ be a nbd server backed by tapdisk or qemu-dp. Note this is different
1018+ from [import_activate] as the returned server does not accept fds. *)
1019+ let get_nbd_server =
1020+ declare " DATA.get_nbd_server" []
1021+ (dbg_p
1022+ @-> dp_p
1023+ @-> sr_p
1024+ @-> vdi_p
1025+ @-> vm_p
1026+ @-> returning sock_path_p err
1027+ )
1028+
10031029 module MIRROR = struct
10041030 let mirror_vm_p = Param. mk ~name: " mirror_vm" Vm. t
10051031
10061032 let copy_vm_p = Param. mk ~name: " copy_vm" Vm. t
10071033
1008- (* * [start task sr vdi url sr2] creates a VDI in remote [url]'s [sr2] and
1009- writes data synchronously. It returns the id of the VDI.*)
1010- let start =
1011- declare " DATA.MIRROR.start" []
1034+ let live_vm_p = Param. mk ~name: " live_vm" Vm. t
1035+
1036+ let id_p = Param. mk ~name: " id" Mirror. id
1037+
1038+ (* * [send_start dbg dp task src_sr vdi mirror_vm mirror_id local_vdi copy_vm
1039+ live_vm url remote_mirror dest_sr verify_dest]
1040+ takes the remote mirror [remote_mirror] prepared by the destination host
1041+ and initiates the mirroring of [vdi] from the source *)
1042+ let send_start =
1043+ let recv_result_p =
1044+ Param. mk ~name: " recv_result" Mirror. mirror_receive_result
1045+ in
1046+ let local_vdi_p = Param. mk ~name: " local_vdi" vdi_info in
1047+ let src_sr_p = Param. mk ~name: " src_sr" Sr. t in
1048+ let dest_sr_p = Param. mk ~name: " dest_sr" Sr. t in
1049+ declare " DATA.MIRROR.send_start" []
10121050 (dbg_p
1013- @-> sr_p
1014- @-> vdi_p
10151051 @-> dp_p
1052+ @-> task_id_p
1053+ @-> src_sr_p
1054+ @-> vdi_p
10161055 @-> mirror_vm_p
1056+ @-> id_p
1057+ @-> local_vdi_p
10171058 @-> copy_vm_p
1059+ @-> live_vm_p
10181060 @-> url_p
1019- @-> dest_p
1061+ @-> recv_result_p
1062+ @-> dest_sr_p
10201063 @-> verify_dest_p
1021- @-> returning task_id_p err
1064+ @-> returning unit_p err
10221065 )
10231066
1024- let id_p = Param. mk ~name: " id" Mirror. id
1025-
1026- (* * [stop task sr vdi] stops mirroring local [vdi] *)
1027- let stop =
1028- declare " DATA.MIRROR.stop" [] (dbg_p @-> id_p @-> returning unit_p err)
1029-
1030- let stat =
1031- let result_p = Param. mk ~name: " result" Mirror. t in
1032- declare " DATA.MIRROR.stat" [] (dbg_p @-> id_p @-> returning result_p err)
1033-
10341067 (* * Called on the receiving end
10351068 @deprecated This function is deprecated, and is only here to keep backward
10361069 compatibility with old xapis that call Remote.DATA.MIRROR.receive_start during SXM.
@@ -1085,38 +1118,6 @@ module StorageAPI (R : RPC) = struct
10851118 let receive_cancel =
10861119 declare " DATA.MIRROR.receive_cancel" []
10871120 (dbg_p @-> id_p @-> returning unit_p err)
1088-
1089- let list =
1090- let result_p =
1091- Param. mk ~name: " mirrors" TypeCombinators. (list (pair Mirror. (id, t)))
1092- in
1093- declare " DATA.MIRROR.list" [] (dbg_p @-> returning result_p err)
1094-
1095- (* * [import_activate dbg dp sr vdi vm] returns a server socket address to
1096- which a fd can be passed via SCM_RIGHTS for mirroring purposes.*)
1097- let import_activate =
1098- declare " DATA.MIRROR.import_activate" []
1099- (dbg_p
1100- @-> dp_p
1101- @-> sr_p
1102- @-> vdi_p
1103- @-> vm_p
1104- @-> returning sock_path_p err
1105- )
1106-
1107- (* * [get_nbd_server dbg dp sr vdi vm] returns the address of a generic nbd
1108- server that can be connected to. Depending on the backend, this will either
1109- be a nbd server backed by tapdisk or qemu-dp. Note this is different
1110- from [import_activate] as the returned server does not accept fds. *)
1111- let get_nbd_server =
1112- declare " DATA.MIRROR.get_nbd_server" []
1113- (dbg_p
1114- @-> dp_p
1115- @-> sr_p
1116- @-> vdi_p
1117- @-> vm_p
1118- @-> returning sock_path_p err
1119- )
11201121 end
11211122 end
11221123
@@ -1164,22 +1165,23 @@ end
11641165module type MIRROR = sig
11651166 type context = unit
11661167
1167- val start :
1168+ val send_start :
11681169 context
11691170 -> dbg :debug_info
1171+ -> task_id :Task .id
1172+ -> dp :dp
11701173 -> sr :sr
11711174 -> vdi :vdi
1172- -> dp :dp
11731175 -> mirror_vm :vm
1176+ -> mirror_id :Mirror .id
1177+ -> local_vdi :vdi_info
11741178 -> copy_vm :vm
1179+ -> live_vm :vm
11751180 -> url :string
1176- -> dest :sr
1181+ -> remote_mirror :Mirror .mirror_receive_result
1182+ -> dest_sr :sr
11771183 -> verify_dest :bool
1178- -> Task .id
1179-
1180- val stop : context -> dbg :debug_info -> id :Mirror .id -> unit
1181-
1182- val stat : context -> dbg :debug_info -> id :Mirror .id -> Mirror .t
1184+ -> unit
11831185
11841186 val receive_start :
11851187 context
@@ -1205,14 +1207,6 @@ module type MIRROR = sig
12051207 val receive_finalize2 : context -> dbg :debug_info -> id :Mirror .id -> unit
12061208
12071209 val receive_cancel : context -> dbg :debug_info -> id :Mirror .id -> unit
1208-
1209- val list : context -> dbg :debug_info -> (Mirror .id * Mirror .t ) list
1210-
1211- val import_activate :
1212- context -> dbg :debug_info -> dp :dp -> sr :sr -> vdi :vdi -> vm :vm -> sock_path
1213-
1214- val get_nbd_server :
1215- context -> dbg :debug_info -> dp :dp -> sr :sr -> vdi :vdi -> vm :vm -> sock_path
12161210end
12171211
12181212module type Server_impl = sig
@@ -1471,6 +1465,24 @@ module type Server_impl = sig
14711465 -> verify_dest :bool
14721466 -> Task .id
14731467
1468+ val import_activate :
1469+ context
1470+ -> dbg :debug_info
1471+ -> dp :dp
1472+ -> sr :sr
1473+ -> vdi :vdi
1474+ -> vm :vm
1475+ -> sock_path
1476+
1477+ val get_nbd_server :
1478+ context
1479+ -> dbg :debug_info
1480+ -> dp :dp
1481+ -> sr :sr
1482+ -> vdi :vdi
1483+ -> vm :vm
1484+ -> sock_path
1485+
14741486 module MIRROR : MIRROR
14751487 end
14761488
@@ -1627,13 +1639,27 @@ module Server (Impl : Server_impl) () = struct
16271639 S.DATA. copy (fun dbg sr vdi vm url dest verify_dest ->
16281640 Impl.DATA. copy () ~dbg ~sr ~vdi ~vm ~url ~dest ~verify_dest
16291641 ) ;
1630- S.DATA.MIRROR. start
1631- (fun dbg sr vdi dp mirror_vm copy_vm url dest verify_dest ->
1632- Impl.DATA.MIRROR. start () ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url
1633- ~dest ~verify_dest
1642+ S.DATA.MIRROR. send_start
1643+ (fun
1644+ dbg
1645+ task_id
1646+ dp
1647+ sr
1648+ vdi
1649+ mirror_vm
1650+ mirror_id
1651+ local_vdi
1652+ copy_vm
1653+ live_vm
1654+ url
1655+ remote_mirror
1656+ dest_sr
1657+ verify_dest
1658+ ->
1659+ Impl.DATA.MIRROR. send_start () ~dbg ~task_id ~dp ~sr ~vdi ~mirror_vm
1660+ ~mirror_id ~local_vdi ~copy_vm ~live_vm ~url ~remote_mirror ~dest_sr
1661+ ~verify_dest
16341662 ) ;
1635- S.DATA.MIRROR. stop (fun dbg id -> Impl.DATA.MIRROR. stop () ~dbg ~id ) ;
1636- S.DATA.MIRROR. stat (fun dbg id -> Impl.DATA.MIRROR. stat () ~dbg ~id ) ;
16371663 S.DATA.MIRROR. receive_start (fun dbg sr vdi_info id similar ->
16381664 Impl.DATA.MIRROR. receive_start () ~dbg ~sr ~vdi_info ~id ~similar
16391665 ) ;
@@ -1649,12 +1675,11 @@ module Server (Impl : Server_impl) () = struct
16491675 S.DATA.MIRROR. receive_finalize2 (fun dbg id ->
16501676 Impl.DATA.MIRROR. receive_finalize2 () ~dbg ~id
16511677 ) ;
1652- S.DATA.MIRROR. list (fun dbg -> Impl.DATA.MIRROR. list () ~dbg ) ;
1653- S.DATA.MIRROR. import_activate (fun dbg dp sr vdi vm ->
1654- Impl.DATA.MIRROR. import_activate () ~dbg ~dp ~sr ~vdi ~vm
1678+ S.DATA. import_activate (fun dbg dp sr vdi vm ->
1679+ Impl.DATA. import_activate () ~dbg ~dp ~sr ~vdi ~vm
16551680 ) ;
1656- S.DATA.MIRROR. get_nbd_server (fun dbg dp sr vdi vm ->
1657- Impl.DATA.MIRROR. get_nbd_server () ~dbg ~dp ~sr ~vdi ~vm
1681+ S.DATA. get_nbd_server (fun dbg dp sr vdi vm ->
1682+ Impl.DATA. get_nbd_server () ~dbg ~dp ~sr ~vdi ~vm
16581683 ) ;
16591684 S.Policy. get_backend_vm (fun dbg vm sr vdi ->
16601685 Impl.Policy. get_backend_vm () ~dbg ~vm ~sr ~vdi
0 commit comments