Skip to content

Commit 526ccd6

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

File tree

8 files changed

+118
-66
lines changed

8 files changed

+118
-66
lines changed

ocaml/xapi-idl/storage/storage_interface.ml

Lines changed: 28 additions & 7 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,8 @@ module StorageAPI (R : RPC) = struct
9981002
)
9991003

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

10031009
let copy_vm_p = Param.mk ~name:"copy_vm" Vm.t
@@ -1009,6 +1015,7 @@ module StorageAPI (R : RPC) = struct
10091015
(dbg_p
10101016
@-> sr_p
10111017
@-> vdi_p
1018+
@-> image_format_p
10121019
@-> dp_p
10131020
@-> mirror_vm_p
10141021
@-> copy_vm_p
@@ -1034,27 +1041,35 @@ module StorageAPI (R : RPC) = struct
10341041
Use the receive_start2 function instead.
10351042
*)
10361043
let receive_start =
1044+
let image_format_p =
1045+
Param.mk ~name:"image_format" Mirror.image_format
1046+
in
10371047
let similar_p = Param.mk ~name:"similar" Mirror.similars in
10381048
let result = Param.mk ~name:"result" Mirror.mirror_receive_result in
10391049
declare "DATA.MIRROR.receive_start" []
10401050
(dbg_p
10411051
@-> sr_p
10421052
@-> VDI.vdi_info_p
10431053
@-> id_p
1054+
@-> image_format_p
10441055
@-> similar_p
10451056
@-> returning result err
10461057
)
10471058

10481059
(** Called on the receiving end to prepare for receipt of the storage. This
10491060
function should be used in conjunction with [receive_finalize2]*)
10501061
let receive_start2 =
1062+
let image_format_p =
1063+
Param.mk ~name:"image_format" Mirror.image_format
1064+
in
10511065
let similar_p = Param.mk ~name:"similar" Mirror.similars in
10521066
let result = Param.mk ~name:"result" Mirror.mirror_receive_result in
10531067
declare "DATA.MIRROR.receive_start2" []
10541068
(dbg_p
10551069
@-> sr_p
10561070
@-> VDI.vdi_info_p
10571071
@-> id_p
1072+
@-> image_format_p
10581073
@-> similar_p
10591074
@-> vm_p
10601075
@-> returning result err
@@ -1420,6 +1435,7 @@ module type Server_impl = sig
14201435
-> dbg:debug_info
14211436
-> sr:sr
14221437
-> vdi:vdi
1438+
-> image_format:string
14231439
-> dp:dp
14241440
-> mirror_vm:vm
14251441
-> copy_vm:vm
@@ -1438,6 +1454,7 @@ module type Server_impl = sig
14381454
-> sr:sr
14391455
-> vdi_info:vdi_info
14401456
-> id:Mirror.id
1457+
-> image_format:Mirror.image_format
14411458
-> similar:Mirror.similars
14421459
-> Mirror.mirror_receive_result
14431460

@@ -1447,6 +1464,7 @@ module type Server_impl = sig
14471464
-> sr:sr
14481465
-> vdi_info:vdi_info
14491466
-> id:Mirror.id
1467+
-> image_format:Mirror.image_format
14501468
-> similar:Mirror.similars
14511469
-> vm:vm
14521470
-> Mirror.mirror_receive_result
@@ -1633,17 +1651,20 @@ module Server (Impl : Server_impl) () = struct
16331651
Impl.DATA.copy () ~dbg ~sr ~vdi ~vm ~url ~dest ~verify_dest
16341652
) ;
16351653
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
1638-
~dest ~verify_dest
1654+
(fun dbg sr vdi image_format dp mirror_vm copy_vm url dest verify_dest ->
1655+
Impl.DATA.MIRROR.start () ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm
1656+
~copy_vm ~url ~dest ~verify_dest
16391657
) ;
16401658
S.DATA.MIRROR.stop (fun dbg id -> Impl.DATA.MIRROR.stop () ~dbg ~id) ;
16411659
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
1660+
S.DATA.MIRROR.receive_start (fun dbg sr vdi_info id image_format similar ->
1661+
Impl.DATA.MIRROR.receive_start () ~dbg ~sr ~vdi_info ~id ~image_format
1662+
~similar
16441663
) ;
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
1664+
S.DATA.MIRROR.receive_start2
1665+
(fun dbg sr vdi_info id image_format similar vm ->
1666+
Impl.DATA.MIRROR.receive_start2 () ~dbg ~sr ~vdi_info ~id ~image_format
1667+
~similar ~vm
16471668
) ;
16481669
S.DATA.MIRROR.receive_cancel (fun dbg id ->
16491670
Impl.DATA.MIRROR.receive_cancel () ~dbg ~id

ocaml/xapi-idl/storage/storage_skeleton.ml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,18 @@ 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
161+
=
161162
u "DATA.MIRROR.start"
162163

163164
let stop ctx ~dbg ~id = u "DATA.MIRROR.stop"
164165

165166
let stat ctx ~dbg ~id = u "DATA.MIRROR.stat"
166167

167-
let receive_start ctx ~dbg ~sr ~vdi_info ~id ~similar =
168+
let receive_start ctx ~dbg ~sr ~vdi_info ~id ~image_format ~similar =
168169
u "DATA.MIRROR.receive_start"
169170

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

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

ocaml/xapi-storage-cli/main.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,11 @@ 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
329+
url
327330
(Storage_interface.Sr.of_string dest)
328331
verify_dest
329332
in

ocaml/xapi/storage_migrate.ml

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -721,8 +721,8 @@ 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
725-
=
724+
let start ~task ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url ~dest
725+
~verify_dest =
726726
SXM.info
727727
"%s sr:%s vdi:%s dp: %s mirror_vm: %s copy_vm: %s url:%s dest:%s \
728728
verify_dest:%B"
@@ -786,8 +786,8 @@ 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+
Remote.DATA.MIRROR.receive_start2 dbg dest local_vdi mirror_id
790+
image_format similars mirror_vm
791791
in
792792
(* Enable mirroring on the local machine *)
793793
let mirror_dp = result.Mirror.mirror_datapath in
@@ -1122,7 +1122,7 @@ end
11221122
(** module [MigrateRemote] is similar to [MigrateLocal], but most of these functions
11231123
tend to be executed on the receiver side. *)
11241124
module MigrateRemote = struct
1125-
let receive_start_common ~dbg ~sr ~vdi_info ~id ~similar ~vm =
1125+
let receive_start_common ~dbg ~sr ~vdi_info ~id ~image_format ~similar ~vm =
11261126
let on_fail : (unit -> unit) list ref = ref [] in
11271127
let vdis = Local.SR.scan dbg sr in
11281128
(* We drop cbt_metadata VDIs that do not have any actual data *)
@@ -1183,9 +1183,19 @@ module MigrateRemote = struct
11831183
vdi_info.virtual_size new_size
11841184
) ;
11851185
vdi_clone
1186-
| None ->
1186+
| None -> (
11871187
debug "Creating a blank remote VDI <2>" ;
1188-
Local.VDI.create dbg sr vdi_info
1188+
debug "image_format is set to <%s>" image_format ;
1189+
match image_format with
1190+
| "" ->
1191+
Local.VDI.create dbg sr vdi_info
1192+
| _ ->
1193+
Local.VDI.create dbg sr
1194+
{
1195+
vdi_info with
1196+
sm_config= ("type", image_format) :: vdi_info.sm_config
1197+
}
1198+
)
11891199
in
11901200
debug "Parent disk content_id=%s" parent.content_id ;
11911201
State.add id
@@ -1221,11 +1231,12 @@ module MigrateRemote = struct
12211231
!on_fail ;
12221232
raise e
12231233

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")
1234+
let receive_start ~dbg ~sr ~vdi_info ~id ~image_format ~similar =
1235+
receive_start_common ~dbg ~sr ~vdi_info ~id ~image_format ~similar
1236+
~vm:(Vm.of_string "0")
12261237

1227-
let receive_start2 ~dbg ~sr ~vdi_info ~id ~similar ~vm =
1228-
receive_start_common ~dbg ~sr ~vdi_info ~id ~similar ~vm
1238+
let receive_start2 ~dbg ~sr ~vdi_info ~id ~image_format ~similar ~vm =
1239+
receive_start_common ~dbg ~sr ~vdi_info ~image_format ~id ~similar ~vm
12291240

12301241
let receive_finalize ~dbg ~id =
12311242
let recv_state = State.find_active_receive_mirror id in
@@ -1446,10 +1457,11 @@ let copy ~dbg ~sr ~vdi ~vm ~url ~dest ~verify_dest =
14461457
~dest ~verify_dest
14471458
)
14481459

1449-
let start ~dbg ~sr ~vdi ~dp ~mirror_vm ~copy_vm ~url ~dest ~verify_dest =
1460+
let start ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url ~dest
1461+
~verify_dest =
14501462
with_task_and_thread ~dbg (fun task ->
1451-
MigrateLocal.start ~task ~dbg:dbg.Debug_info.log ~sr ~vdi ~dp ~mirror_vm
1452-
~copy_vm ~url ~dest ~verify_dest
1463+
MigrateLocal.start ~task ~dbg:dbg.Debug_info.log ~sr ~vdi ~image_format
1464+
~dp ~mirror_vm ~copy_vm ~url ~dest ~verify_dest
14531465
)
14541466

14551467
(* XXX: PR-1255: copy the xenopsd 'raise Exception' pattern *)

ocaml/xapi/storage_mux.ml

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -836,16 +836,16 @@ 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
840-
=
839+
let start () ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm ~url
840+
~dest ~verify_dest =
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 \
844-
dest sr: %s verify_dest: %B"
845-
__FUNCTION__ dbg (s_of_sr sr) (s_of_vdi vdi) dp (s_of_vm mirror_vm)
846-
(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
848-
~dest ~verify_dest
843+
"%s dbg:%s sr: %s vdi: %s image_format: %s dp: %s mirror_vm: %s \
844+
copy_vm: %s url: %s dest sr: %s verify_dest: %B"
845+
__FUNCTION__ dbg (s_of_sr sr) (s_of_vdi vdi) image_format dp
846+
(s_of_vm mirror_vm) (s_of_vm copy_vm) url (s_of_sr dest) verify_dest ;
847+
Storage_migrate.start ~dbg:di ~sr ~vdi ~image_format ~dp ~mirror_vm
848+
~copy_vm ~url ~dest ~verify_dest
849849

850850
let stop () ~dbg ~id =
851851
with_dbg ~name:"DATA.MIRROR.stop" ~dbg @@ fun di ->
@@ -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: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,8 +1213,8 @@ 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:_
1217-
~url:_ ~dest:_ ~verify_dest:_ =
1216+
let start _context ~dbg:_ ~sr:_ ~vdi:_ ~image_format:_ ~dp:_ ~mirror_vm:_
1217+
~copy_vm:_ ~url:_ ~dest:_ ~verify_dest:_ =
12181218
assert false
12191219

12201220
let stop _context ~dbg:_ ~id:_ = assert false
@@ -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: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,11 +1143,14 @@ 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
1150-
~url ~dest
1146+
let start context ~dbg ~sr ~vdi ~image_format ~dp ~mirror_vm ~copy_vm
1147+
~url ~dest =
1148+
info
1149+
"DATA.MIRROR.start dbg:%s sr:%s vdi:%s image_format:%s url:%s \
1150+
dest:%s"
1151+
dbg (s_of_sr sr) (s_of_vdi vdi) image_format url (s_of_sr dest) ;
1152+
Impl.DATA.MIRROR.start context ~dbg ~sr ~vdi ~image_format ~dp
1153+
~mirror_vm ~copy_vm ~url ~dest
11511154

11521155
let stop context ~dbg ~id =
11531156
info "DATA.MIRROR.stop dbg:%s id:%s" dbg id ;
@@ -1161,20 +1164,26 @@ functor
11611164
info "DATA.MIRROR.stat dbg:%s id:%s" dbg id ;
11621165
Impl.DATA.MIRROR.stat context ~dbg ~id
11631166

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
1167+
let receive_start context ~dbg ~sr ~vdi_info ~id ~image_format ~similar
1168+
=
1169+
info
1170+
"DATA.MIRROR.receive_start dbg:%s sr:%s id:%s image_format:%s \
1171+
similar:[%s]"
1172+
dbg (s_of_sr sr) id image_format
11671173
(String.concat "," similar) ;
1168-
Impl.DATA.MIRROR.receive_start context ~dbg ~sr ~vdi_info ~id ~similar
1174+
Impl.DATA.MIRROR.receive_start context ~dbg ~sr ~vdi_info ~id
1175+
~image_format ~similar
11691176

1170-
let receive_start2 context ~dbg ~sr ~vdi_info ~id ~similar ~vm =
1177+
let receive_start2 context ~dbg ~sr ~vdi_info ~id ~image_format ~similar
1178+
~vm =
11711179
info
1172-
"DATA.MIRROR.receive_start2 dbg:%s sr:%s id:%s similar:[%s] vm:%s"
1173-
dbg (s_of_sr sr) id
1180+
"DATA.MIRROR.receive_start2 dbg:%s sr:%s id:%s image_format:%s \
1181+
similar:[%s] vm:%s"
1182+
dbg (s_of_sr sr) id image_format
11741183
(String.concat "," similar)
11751184
(s_of_vm vm) ;
11761185
Impl.DATA.MIRROR.receive_start2 context ~dbg ~sr ~vdi_info ~id
1177-
~similar ~vm
1186+
~image_format ~similar ~vm
11781187

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

0 commit comments

Comments
 (0)