Skip to content

Commit 9f45b71

Browse files
committed
Adding image_format to receive_start and receive_start2
Signed-off-by: Guillaume <[email protected]>
1 parent 6e8bb65 commit 9f45b71

File tree

8 files changed

+102
-53
lines changed

8 files changed

+102
-53
lines changed

ocaml/xapi-idl/storage/storage_interface.ml

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,8 @@ let string_of_vdi_info (x : vdi_info) = Jsonrpc.to_string (rpc_of vdi_info x)
251251
"datapaths". *)
252252
type dp = string [@@deriving rpcty]
253253

254+
type image_format = string [@@deriving rpcty]
255+
254256
type sock_path = string [@@deriving rpcty]
255257

256258
type dp_stat_t = {
@@ -277,6 +279,8 @@ type probe_result =
277279
module Mirror = struct
278280
type id = string [@@deriving rpcty]
279281

282+
type image_format = string [@@deriving rpcty]
283+
280284
type state = Receiving | Sending | Copying [@@deriving rpcty]
281285

282286
type t = {source_vdi: Vdi.t; dest_vdi: Vdi.t; state: state list; failed: bool}
@@ -998,6 +1002,7 @@ module StorageAPI (R : RPC) = struct
9981002
)
9991003

10001004
module MIRROR = struct
1005+
let image_format_p = Param.mk ~name:"image_format" image_format
10011006
let mirror_vm_p = Param.mk ~name:"mirror_vm" Vm.t
10021007

10031008
let copy_vm_p = Param.mk ~name:"copy_vm" Vm.t
@@ -1009,6 +1014,7 @@ module StorageAPI (R : RPC) = struct
10091014
(dbg_p
10101015
@-> sr_p
10111016
@-> vdi_p
1017+
@-> image_format_p
10121018
@-> dp_p
10131019
@-> mirror_vm_p
10141020
@-> copy_vm_p
@@ -1034,27 +1040,35 @@ module StorageAPI (R : RPC) = struct
10341040
Use the receive_start2 function instead.
10351041
*)
10361042
let receive_start =
1043+
let image_format_p =
1044+
Param.mk ~name:"image_format" Mirror.image_format
1045+
in
10371046
let similar_p = Param.mk ~name:"similar" Mirror.similars in
10381047
let result = Param.mk ~name:"result" Mirror.mirror_receive_result in
10391048
declare "DATA.MIRROR.receive_start" []
10401049
(dbg_p
10411050
@-> sr_p
10421051
@-> VDI.vdi_info_p
10431052
@-> id_p
1053+
@-> image_format_p
10441054
@-> similar_p
10451055
@-> returning result err
10461056
)
10471057

10481058
(** Called on the receiving end to prepare for receipt of the storage. This
10491059
function should be used in conjunction with [receive_finalize2]*)
10501060
let receive_start2 =
1061+
let image_format_p =
1062+
Param.mk ~name:"image_format" Mirror.image_format
1063+
in
10511064
let similar_p = Param.mk ~name:"similar" Mirror.similars in
10521065
let result = Param.mk ~name:"result" Mirror.mirror_receive_result in
10531066
declare "DATA.MIRROR.receive_start2" []
10541067
(dbg_p
10551068
@-> sr_p
10561069
@-> VDI.vdi_info_p
10571070
@-> id_p
1071+
@-> image_format_p
10581072
@-> similar_p
10591073
@-> vm_p
10601074
@-> returning result err
@@ -1420,6 +1434,7 @@ module type Server_impl = sig
14201434
-> dbg:debug_info
14211435
-> sr:sr
14221436
-> vdi:vdi
1437+
-> image_format: string
14231438
-> dp:dp
14241439
-> mirror_vm:vm
14251440
-> copy_vm:vm
@@ -1438,6 +1453,7 @@ module type Server_impl = sig
14381453
-> sr:sr
14391454
-> vdi_info:vdi_info
14401455
-> id:Mirror.id
1456+
-> image_format:Mirror.image_format
14411457
-> similar:Mirror.similars
14421458
-> Mirror.mirror_receive_result
14431459

@@ -1447,6 +1463,7 @@ module type Server_impl = sig
14471463
-> sr:sr
14481464
-> vdi_info:vdi_info
14491465
-> id:Mirror.id
1466+
-> image_format:Mirror.image_format
14501467
-> similar:Mirror.similars
14511468
-> vm:vm
14521469
-> Mirror.mirror_receive_result
@@ -1633,17 +1650,20 @@ module Server (Impl : Server_impl) () = struct
16331650
Impl.DATA.copy () ~dbg ~sr ~vdi ~vm ~url ~dest ~verify_dest
16341651
) ;
16351652
S.DATA.MIRROR.start
1636-
(fun dbg sr vdi dp mirror_vm copy_vm url dest verify_dest ->
1637-
Impl.DATA.MIRROR.start () ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url
1653+
(fun dbg sr vdi image_format dp mirror_vm copy_vm url dest verify_dest ->
1654+
Impl.DATA.MIRROR.start () ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url
16381655
~dest ~verify_dest
16391656
) ;
16401657
S.DATA.MIRROR.stop (fun dbg id -> Impl.DATA.MIRROR.stop () ~dbg ~id) ;
16411658
S.DATA.MIRROR.stat (fun dbg id -> Impl.DATA.MIRROR.stat () ~dbg ~id) ;
1642-
S.DATA.MIRROR.receive_start (fun dbg sr vdi_info id similar ->
1643-
Impl.DATA.MIRROR.receive_start () ~dbg ~sr ~vdi_info ~id ~similar
1659+
S.DATA.MIRROR.receive_start (fun dbg sr vdi_info id image_format similar ->
1660+
Impl.DATA.MIRROR.receive_start () ~dbg ~sr ~vdi_info ~id ~image_format
1661+
~similar
16441662
) ;
1645-
S.DATA.MIRROR.receive_start2 (fun dbg sr vdi_info id similar vm ->
1646-
Impl.DATA.MIRROR.receive_start2 () ~dbg ~sr ~vdi_info ~id ~similar ~vm
1663+
S.DATA.MIRROR.receive_start2
1664+
(fun dbg sr vdi_info id image_format similar vm ->
1665+
Impl.DATA.MIRROR.receive_start2 () ~dbg ~sr ~vdi_info ~id ~image_format
1666+
~similar ~vm
16471667
) ;
16481668
S.DATA.MIRROR.receive_cancel (fun dbg id ->
16491669
Impl.DATA.MIRROR.receive_cancel () ~dbg ~id

ocaml/xapi-idl/storage/storage_skeleton.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,17 @@ module DATA = struct
157157
module MIRROR = struct
158158
(** [start task sr vdi url sr2] creates a VDI in remote [url]'s [sr2] and
159159
writes data synchronously. It returns the id of the VDI.*)
160-
let start ctx ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url ~dest =
160+
let start ctx ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url ~dest =
161161
u "DATA.MIRROR.start"
162162

163163
let stop ctx ~dbg ~id = u "DATA.MIRROR.stop"
164164

165165
let stat ctx ~dbg ~id = u "DATA.MIRROR.stat"
166166

167-
let receive_start ctx ~dbg ~sr ~vdi_info ~id ~similar =
167+
let receive_start ctx ~dbg ~sr ~vdi_info ~id ~image_format ~similar =
168168
u "DATA.MIRROR.receive_start"
169169

170-
let receive_start2 ctx ~dbg ~sr ~vdi_info ~id ~similar ~vm =
170+
let receive_start2 ctx ~dbg ~sr ~vdi_info ~id ~image_format ~similar ~vm =
171171
u "DATA.MIRROR.receive_start2"
172172

173173
let receive_finalize ctx ~dbg ~id = u "DATA.MIRROR.receive_finalize"

ocaml/xapi-storage-cli/main.ml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,10 @@ let mirror_start common_opts sr vdi dp url dest verify_dest =
322322
let dp = get_opt dp "Need a local data path" in
323323
let url = get_opt url "Need a URL" in
324324
let dest = get_opt dest "Need a destination SR" in
325+
(* TODO: add image_format as a parameter of the CLI *)
326+
let image_format = "" in
325327
let task =
326-
Client.DATA.MIRROR.start dbg sr vdi dp mirror_vm copy_vm url
328+
Client.DATA.MIRROR.start dbg sr vdi image_format dp mirror_vm copy_vm url
327329
(Storage_interface.Sr.of_string dest)
328330
verify_dest
329331
in

ocaml/xapi/storage_migrate.ml

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ module MigrateLocal = struct
721721
| e ->
722722
raise (Storage_error (Internal_error (Printexc.to_string e)))
723723

724-
let start ~task ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url ~dest ~verify_dest
724+
let start ~task ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url ~dest ~verify_dest
725725
=
726726
SXM.info
727727
"%s sr:%s vdi:%s dp: %s mirror_vm: %s copy_vm: %s url:%s dest:%s \
@@ -786,8 +786,10 @@ module MigrateLocal = struct
786786
)
787787
) ;
788788
let (Mirror.Vhd_mirror result) =
789-
Remote.DATA.MIRROR.receive_start2 dbg dest local_vdi mirror_id similars
790-
mirror_vm
789+
(* TODO: Get the real image format... *)
790+
let image_format = "vhd" in
791+
Remote.DATA.MIRROR.receive_start2 dbg dest local_vdi mirror_id
792+
image_format similars mirror_vm
791793
in
792794
(* Enable mirroring on the local machine *)
793795
let mirror_dp = result.Mirror.mirror_datapath in
@@ -1122,7 +1124,7 @@ end
11221124
(** module [MigrateRemote] is similar to [MigrateLocal], but most of these functions
11231125
tend to be executed on the receiver side. *)
11241126
module MigrateRemote = struct
1125-
let receive_start_common ~dbg ~sr ~vdi_info ~id ~similar ~vm =
1127+
let receive_start_common ~dbg ~sr ~vdi_info ~id ~image_format ~similar ~vm =
11261128
let on_fail : (unit -> unit) list ref = ref [] in
11271129
let vdis = Local.SR.scan dbg sr in
11281130
(* We drop cbt_metadata VDIs that do not have any actual data *)
@@ -1183,9 +1185,19 @@ module MigrateRemote = struct
11831185
vdi_info.virtual_size new_size
11841186
) ;
11851187
vdi_clone
1186-
| None ->
1188+
| None -> (
11871189
debug "Creating a blank remote VDI <2>" ;
1188-
Local.VDI.create dbg sr vdi_info
1190+
debug "image_format is set to <%s>" image_format ;
1191+
match image_format with
1192+
| "" ->
1193+
Local.VDI.create dbg sr vdi_info
1194+
| _ ->
1195+
Local.VDI.create dbg sr
1196+
{
1197+
vdi_info with
1198+
sm_config= ("type", image_format) :: vdi_info.sm_config
1199+
}
1200+
)
11891201
in
11901202
debug "Parent disk content_id=%s" parent.content_id ;
11911203
State.add id
@@ -1221,11 +1233,12 @@ module MigrateRemote = struct
12211233
!on_fail ;
12221234
raise e
12231235

1224-
let receive_start ~dbg ~sr ~vdi_info ~id ~similar =
1225-
receive_start_common ~dbg ~sr ~vdi_info ~id ~similar ~vm:(Vm.of_string "0")
1236+
let receive_start ~dbg ~sr ~vdi_info ~id ~image_format ~similar =
1237+
receive_start_common ~dbg ~sr ~vdi_info ~id ~image_format ~similar
1238+
~vm:(Vm.of_string "0")
12261239

1227-
let receive_start2 ~dbg ~sr ~vdi_info ~id ~similar ~vm =
1228-
receive_start_common ~dbg ~sr ~vdi_info ~id ~similar ~vm
1240+
let receive_start2 ~dbg ~sr ~vdi_info ~id ~image_format ~similar ~vm =
1241+
receive_start_common ~dbg ~sr ~vdi_info ~image_format ~id ~similar ~vm
12291242

12301243
let receive_finalize ~dbg ~id =
12311244
let recv_state = State.find_active_receive_mirror id in
@@ -1446,9 +1459,9 @@ let copy ~dbg ~sr ~vdi ~vm ~url ~dest ~verify_dest =
14461459
~dest ~verify_dest
14471460
)
14481461

1449-
let start ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url ~dest ~verify_dest =
1462+
let start ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url ~dest ~verify_dest =
14501463
with_task_and_thread ~dbg (fun task ->
1451-
MigrateLocal.start ~task ~dbg:dbg.Debug_info.log ~sr ~vdi ~dp ~mirror_vm
1464+
MigrateLocal.start ~task ~dbg:dbg.Debug_info.log ~sr ~vdi ~image_format ~dp ~mirror_vm
14521465
~copy_vm ~url ~dest ~verify_dest
14531466
)
14541467

ocaml/xapi/storage_mux.ml

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -836,15 +836,15 @@ module Mux = struct
836836
with_dbg ~name:"DATA.copy" ~dbg @@ fun dbg -> Storage_migrate.copy ~dbg
837837

838838
module MIRROR = struct
839-
let start () ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url ~dest ~verify_dest
839+
let start () ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url ~dest ~verify_dest
840840
=
841841
with_dbg ~name:"DATA.MIRROR.start" ~dbg @@ fun di ->
842842
info
843-
"%s dbg:%s sr: %s vdi: %s dp:%s mirror_vm: %s copy_vm: %s url: %s \
843+
"%s dbg:%s sr: %s vdi: %s image_format: %s dp: %s mirror_vm: %s copy_vm: %s url: %s \
844844
dest sr: %s verify_dest: %B"
845-
__FUNCTION__ dbg (s_of_sr sr) (s_of_vdi vdi) dp (s_of_vm mirror_vm)
845+
__FUNCTION__ dbg (s_of_sr sr) (s_of_vdi vdi) image_format dp (s_of_vm mirror_vm)
846846
(s_of_vm copy_vm) url (s_of_sr dest) verify_dest ;
847-
Storage_migrate.start ~dbg:di ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url
847+
Storage_migrate.start ~dbg:di ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url
848848
~dest ~verify_dest
849849

850850
let stop () ~dbg ~id =
@@ -862,26 +862,31 @@ module Mux = struct
862862
info "%s dbg: %s mirror_id: %s" __FUNCTION__ di.log id ;
863863
Storage_migrate.stat ~dbg:di.log ~id
864864

865-
let receive_start () ~dbg ~sr ~vdi_info ~id ~similar =
865+
let receive_start () ~dbg ~sr ~vdi_info ~id ~image_format ~similar =
866866
with_dbg ~name:"DATA.MIRROR.receive_start" ~dbg @@ fun di ->
867-
info "%s dbg: %s sr: %s vdi_info: %s mirror_id: %s similar: %s"
867+
info
868+
"%s dbg: %s sr: %s vdi_info: %s mirror_id: %s image_format: %s \
869+
similar: %s"
868870
__FUNCTION__ dbg (s_of_sr sr)
869871
(string_of_vdi_info vdi_info)
870-
id
872+
id image_format
871873
(String.concat ";" similar) ;
872-
Storage_migrate.receive_start ~dbg:di.log ~sr ~vdi_info ~id ~similar
874+
Storage_migrate.receive_start ~dbg:di.log ~sr ~vdi_info ~id
875+
~image_format ~similar
873876

874-
let receive_start2 () ~dbg ~sr ~vdi_info ~id ~similar ~vm =
877+
let receive_start2 () ~dbg ~sr ~vdi_info ~id ~image_format ~similar ~vm =
875878
with_dbg ~name:"DATA.MIRROR.receive_start2" ~dbg @@ fun di ->
876-
info "%s dbg: %s sr: %s vdi_info: %s mirror_id: %s similar: %s vm: %s"
879+
info
880+
"%s dbg: %s sr: %s vdi_info: %s mirror_id: %s image_format: %s \
881+
similar: %s vm: %s"
877882
__FUNCTION__ dbg (s_of_sr sr)
878883
(string_of_vdi_info vdi_info)
879-
id
884+
id image_format
880885
(String.concat ";" similar)
881886
(s_of_vm vm) ;
882887
info "%s dbg:%s" __FUNCTION__ dbg ;
883-
Storage_migrate.receive_start2 ~dbg:di.log ~sr ~vdi_info ~id ~similar
884-
~vm
888+
Storage_migrate.receive_start2 ~dbg:di.log ~sr ~vdi_info ~id
889+
~image_format ~similar ~vm
885890

886891
let receive_finalize () ~dbg ~id =
887892
with_dbg ~name:"DATA.MIRROR.receive_finalize" ~dbg @@ fun di ->

ocaml/xapi/storage_smapiv1.ml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,7 +1213,7 @@ module SMAPIv1 : Server_impl = struct
12131213
assert false
12141214

12151215
module MIRROR = struct
1216-
let start _context ~dbg:_ ~sr:_ ~vdi:_ ~dp:_ ~mirror_vm:_ ~copy_vm:_
1216+
let start _context ~dbg:_ ~sr:_ ~vdi:_ ~image_format:_ ~dp:_ ~mirror_vm:_ ~copy_vm:_
12171217
~url:_ ~dest:_ ~verify_dest:_ =
12181218
assert false
12191219

@@ -1223,11 +1223,12 @@ module SMAPIv1 : Server_impl = struct
12231223

12241224
let stat _context ~dbg:_ ~id:_ = assert false
12251225

1226-
let receive_start _context ~dbg:_ ~sr:_ ~vdi_info:_ ~id:_ ~similar:_ =
1226+
let receive_start _context ~dbg:_ ~sr:_ ~vdi_info:_ ~id:_ ~image_format:_
1227+
~similar:_ =
12271228
assert false
12281229

1229-
let receive_start2 _context ~dbg:_ ~sr:_ ~vdi_info:_ ~id:_ ~similar:_
1230-
~vm:_ =
1230+
let receive_start2 _context ~dbg:_ ~sr:_ ~vdi_info:_ ~id:_ ~image_format:_
1231+
~similar:_ ~vm:_ =
12311232
assert false
12321233

12331234
let receive_finalize _context ~dbg:_ ~id:_ = assert false

ocaml/xapi/storage_smapiv1_wrapper.ml

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,10 +1143,10 @@ functor
11431143
Impl.DATA.copy context ~dbg ~sr ~vdi ~vm ~url ~dest
11441144

11451145
module MIRROR = struct
1146-
let start context ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url ~dest =
1147-
info "DATA.MIRROR.start dbg:%s sr:%s vdi:%s url:%s dest:%s" dbg
1148-
(s_of_sr sr) (s_of_vdi vdi) url (s_of_sr dest) ;
1149-
Impl.DATA.MIRROR.start context ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm
1146+
let start context ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url ~dest =
1147+
info "DATA.MIRROR.start dbg:%s sr:%s vdi:%s image_format:%s url:%s dest:%s" dbg
1148+
(s_of_sr sr) (s_of_vdi vdi) image_format url (s_of_sr dest) ;
1149+
Impl.DATA.MIRROR.start context ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm
11501150
~url ~dest
11511151

11521152
let stop context ~dbg ~id =
@@ -1161,20 +1161,26 @@ functor
11611161
info "DATA.MIRROR.stat dbg:%s id:%s" dbg id ;
11621162
Impl.DATA.MIRROR.stat context ~dbg ~id
11631163

1164-
let receive_start context ~dbg ~sr ~vdi_info ~id ~similar =
1165-
info "DATA.MIRROR.receive_start dbg:%s sr:%s id:%s similar:[%s]" dbg
1166-
(s_of_sr sr) id
1164+
let receive_start context ~dbg ~sr ~vdi_info ~id ~image_format ~similar
1165+
=
1166+
info
1167+
"DATA.MIRROR.receive_start dbg:%s sr:%s id:%s image_format:%s \
1168+
similar:[%s]"
1169+
dbg (s_of_sr sr) id image_format
11671170
(String.concat "," similar) ;
1168-
Impl.DATA.MIRROR.receive_start context ~dbg ~sr ~vdi_info ~id ~similar
1171+
Impl.DATA.MIRROR.receive_start context ~dbg ~sr ~vdi_info ~id
1172+
~image_format ~similar
11691173

1170-
let receive_start2 context ~dbg ~sr ~vdi_info ~id ~similar ~vm =
1174+
let receive_start2 context ~dbg ~sr ~vdi_info ~id ~image_format ~similar
1175+
~vm =
11711176
info
1172-
"DATA.MIRROR.receive_start2 dbg:%s sr:%s id:%s similar:[%s] vm:%s"
1173-
dbg (s_of_sr sr) id
1177+
"DATA.MIRROR.receive_start2 dbg:%s sr:%s id:%s image_format:%s \
1178+
similar:[%s] vm:%s"
1179+
dbg (s_of_sr sr) id image_format
11741180
(String.concat "," similar)
11751181
(s_of_vm vm) ;
11761182
Impl.DATA.MIRROR.receive_start2 context ~dbg ~sr ~vdi_info ~id
1177-
~similar ~vm
1183+
~image_format ~similar ~vm
11781184

11791185
let receive_finalize context ~dbg ~id =
11801186
info "DATA.MIRROR.receive_finalize dbg:%s id:%s" dbg id ;

ocaml/xapi/xapi_vm_migrate.ml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,9 @@ let vdi_copy_fun __context dbg vdi_map remote is_intra_pool remote_vdis so_far
10381038
(Vm.string_of vconf.copy_vm) ;
10391039
(* Layering violation!! *)
10401040
ignore (Storage_access.register_mirror __context id) ;
1041-
SMAPI.DATA.MIRROR.start dbg vconf.sr vconf.location new_dp
1041+
(* TODO: get the real image format *)
1042+
let image_format = "qcow2" in
1043+
SMAPI.DATA.MIRROR.start dbg vconf.sr vconf.location image_format new_dp
10421044
vconf.mirror_vm vconf.copy_vm remote.sm_url dest_sr is_intra_pool
10431045
in
10441046
let mapfn x =
@@ -1843,7 +1845,7 @@ let assert_image_format_is_supported ~__context ~vdi_map ~image_format =
18431845
let assert_can_migrate ~__context ~vm ~dest ~live:_ ~vdi_map ~vif_map ~options
18441846
~vgpu_map =
18451847
let image_format = get_image_format options in
1846-
assert_image_format_is_supported ~__context ~vdi_map ~image_format;
1848+
assert_image_format_is_supported ~__context ~vdi_map ~image_format ;
18471849
Xapi_vm_helpers.assert_no_legacy_hardware ~__context ~vm ;
18481850
assert_licensed_storage_motion ~__context ;
18491851
let remote = remote_of_dest ~__context dest in

0 commit comments

Comments
 (0)