···88 Capnp_rpc_unix.with_cap_exn client f
991010let pp_name ppf name = Fmt.pf ppf "%a" Fmt.(styled `Bold string) name
1111-let pp_entry ppf entry = pp_name ppf entry.Storage.name
1111+1212+let pp_entry ppf { Storage.name; file } =
1313+ Fmt.pf ppf "%a:%a" pp_name name Capability.pp file
12141315let ls net () uri =
1416 connect net uri @@ fun dir ->
+9-24
mvp/ocaml/client/storage.ml
···2323 let open API.Client.Directory.Create in
2424 let request, params = Capability.Request.create Params.init_pointer in
2525 Params.name_set params name;
2626- let results = Capability.call_for_value_exn t method_id request in
2727- match Results.file_get results with
2828- | Some file -> file
2929- | None -> failwith "Storage.create: no file returned"
2626+ Capability.call_for_caps t method_id request Results.file_get_pipelined
30273128let open_ t name =
3229 let open API.Client.Directory.Open in
···4744 let results = Capability.call_for_value_exn t method_id request in
4845 Stdint.Int64.of_uint64 (Results.size_get results)
49464747+let opt_set f params = function
4848+ | None -> ()
4949+ | Some n -> f params (Stdint.Int64.to_uint64 n)
5050+5051let read ?off ?len t =
5152 let open API.Client.File.Read in
5253 let request, params = Capability.Request.create Params.init_pointer in
5353- let () =
5454- match off with
5555- | None -> ()
5656- | Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
5757- in
5858- let () =
5959- match len with
6060- | None -> ()
6161- | Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
6262- in
5454+ opt_set Params.off_set params off;
5555+ opt_set Params.len_set params len;
6356 let results = Capability.call_for_value_exn t method_id request in
6457 Results.data_get results
65586659let write ?off ?len t d =
6760 let open API.Client.File.Write in
6861 let request, params = Capability.Request.create Params.init_pointer in
6969- let () =
7070- match off with
7171- | None -> ()
7272- | Some off -> Params.off_set params (Stdint.Int64.to_uint64 off)
7373- in
7474- let () =
7575- match len with
7676- | None -> ()
7777- | Some len -> Params.len_set params (Stdint.Int64.to_uint64 len)
7878- in
6262+ opt_set Params.off_set params off;
6363+ opt_set Params.len_set params len;
7964 Params.data_set params d;
8065 Capability.call_for_unit_exn t method_id request
+2-2
mvp/ocaml/server/directory.ml
···11open Capnp_rpc.Std
22module API = Schema.Storage.MakeRPC (Capnp_rpc)
3344-let local dir =
44+let local sr dir =
55 let module Directory = API.Service.Directory in
66- Directory.local
66+ Capnp_rpc.Persistence.with_sturdy_ref sr Directory.local
77 @@ object
88 inherit Directory.service
99
···5566let serve () config =
77 Switch.run @@ fun sw ->
88+ let make_sturdy = Capnp_rpc_unix.Vat_config.sturdy_uri config in
99+ let services = Restorer.Table.create ~sw make_sturdy in
1010+ let restore = Restorer.of_table services in
811 let root_id = Capnp_rpc_unix.Vat_config.derived_id config "root" in
99- let root = Impl.root () in
1010- let restore = Restorer.single root_id (Directory.local root) in
1212+ let root =
1313+ let sr = Capnp_rpc_net.Restorer.Table.sturdy_ref services root_id in
1414+ Directory.local sr (Impl.root ())
1515+ in
1616+ Restorer.Table.add services root_id root;
1117 let vat = Capnp_rpc_unix.serve ~sw ~restore config in
1218 match Capnp_rpc_unix.Cap_file.save_service vat root_id cap_file with
1319 | Error (`Msg m) -> failwith m