Skip to content

Commit 9c10c00

Browse files
author
David Scott
committed
Convert epoch_begin to Datapath.open, epoch_end to Datapath.close
This allows datapath plugins to be clever, creating temporary linked clones on local storage or enabling caching. Signed-off-by: David Scott <[email protected]>
1 parent fab9d51 commit 9c10c00

File tree

1 file changed

+25
-4
lines changed

1 file changed

+25
-4
lines changed

main.ml

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -569,16 +569,37 @@ let process root_dir name x =
569569
let args = Args.VDI.Epoch_begin.request_of_rpc args in
570570
Attached_SRs.find args.Args.VDI.Epoch_begin.sr
571571
>>= fun sr ->
572-
(* FIXME: will some backends do this in special ways?
573-
See [djs55/xapi-storage#19] *)
572+
(* Discover the URIs using Volume.stat *)
573+
stat root_dir name
574+
args.Args.VDI.Epoch_begin.dbg
575+
sr
576+
args.Args.VDI.Epoch_begin.vdi
577+
>>= fun (datapath, uri, domain) ->
578+
let persistent = args.Args.VDI.Epoch_begin.persistent in
579+
let args = Storage.Datapath.Types.Datapath.Open.In.make
580+
args.Args.VDI.Epoch_begin.dbg
581+
uri persistent in
582+
let args = Storage.Datapath.Types.Datapath.Open.In.rpc_of_t args in
583+
fork_exec_rpc root_dir (script root_dir name (`Datapath datapath) "Datapath.open") args Storage.Datapath.Types.Datapath.Open.Out.t_of_rpc
584+
>>= fun () ->
574585
Deferred.Result.return (R.success (Args.VDI.Epoch_begin.rpc_of_response ()))
575586
| { R.name = "VDI.epoch_end"; R.params = [ args ] } ->
576587
let open Deferred.Result.Monad_infix in
577588
let args = Args.VDI.Epoch_end.request_of_rpc args in
578589
Attached_SRs.find args.Args.VDI.Epoch_end.sr
579590
>>= fun sr ->
580-
(* FIXME: will some backends do this in special ways?
581-
See [djs55/xapi-storage#19] *)
591+
(* Discover the URIs using Volume.stat *)
592+
stat root_dir name
593+
args.Args.VDI.Epoch_end.dbg
594+
sr
595+
args.Args.VDI.Epoch_end.vdi
596+
>>= fun (datapath, uri, domain) ->
597+
let args = Storage.Datapath.Types.Datapath.Close.In.make
598+
args.Args.VDI.Epoch_end.dbg
599+
uri in
600+
let args = Storage.Datapath.Types.Datapath.Close.In.rpc_of_t args in
601+
fork_exec_rpc root_dir (script root_dir name (`Datapath datapath) "Datapath.close") args Storage.Datapath.Types.Datapath.Close.Out.t_of_rpc
602+
>>= fun () ->
582603
Deferred.Result.return (R.success (Args.VDI.Epoch_end.rpc_of_response ()))
583604

584605
| { R.name = name } ->

0 commit comments

Comments
 (0)