diff --git a/ocaml/src/alba_json.ml b/ocaml/src/alba_json.ml index 5baccb8e..e7df2e94 100644 --- a/ocaml/src/alba_json.ml +++ b/ocaml/src/alba_json.ml @@ -273,6 +273,7 @@ module Preset = struct object_checksum : object_checksum; fragment_encryption : fragment_encryption; in_use : (bool [@default true]); + version: int64; } [@@deriving yojson] let to_yojson t = @@ -293,7 +294,7 @@ module Preset = struct type t_list = t list [@@deriving yojson] - let make (name, preset, is_default, in_use) = + let make (name, preset, version, is_default, in_use) = let open Preset in { name; policies = preset.policies; @@ -319,6 +320,7 @@ module Preset = struct | AlgoWithKey (AES (CTR, L256), key) -> AES_CTR_256 (HexString.show key) | NoEncryption -> NO_ENCRYPTION); in_use; + version; } let to_preset diff --git a/ocaml/src/albamgr_client.ml b/ocaml/src/albamgr_client.ml index 186ab68e..a435dc98 100644 --- a/ocaml/src/albamgr_client.ml +++ b/ocaml/src/albamgr_client.ml @@ -208,6 +208,16 @@ object(self) client # query ListPresets RangeQueryArgs.({ first; finc; last; reverse; max; }) + >>= fun r -> + Lwt.return r + + method list_presets2 ~first ~finc ~last ~reverse ~max = + use_optional_feature + (fun () -> + client # query + ListPresets2 + RangeQueryArgs.({ first; finc; last; + reverse; max; })) method list_all_presets () = list_all_x @@ -217,19 +227,33 @@ object(self) ~last:None ~reverse:false ~max:(-1)) + method get_preset ~preset_name = self # list_presets ~first:preset_name ~finc:true ~last:(Some(preset_name, true)) ~max:1 ~reverse:false >>= fun ((_, presets), _) -> Lwt.return (List.hd presets) - method list_presets2 ~first ~finc ~last ~reverse ~max = - use_optional_feature - (fun () -> - client # query - ListPresets2 - RangeQueryArgs.({ first; finc; last; - reverse; max; })) + + + method list_all_presets2 () = + list_all_x + ~first:"" + (fun (name, + (_preset:Preset.t), + (_version:Preset.version), + (_is_default:bool), (_in_use:bool)) -> name) + (fun ~first ~finc -> + self # list_presets2 + ~last:None + ~reverse:false ~max:(-1) + ~first ~finc + >>= fun r -> + match r with + | None -> Lwt.return ((0,[]), false) + | Some r -> Lwt.return r + ) + method get_preset2 ~preset_name = self # list_presets2 diff --git a/ocaml/src/albamgr_plugin.ml b/ocaml/src/albamgr_plugin.ml index 5532e889..078e8842 100644 --- a/ocaml/src/albamgr_plugin.ml +++ b/ocaml/src/albamgr_plugin.ml @@ -1520,13 +1520,21 @@ let albamgr_user_hook : HookRegistry.h = fun (ic, oc, _cid) db backend -> ); ] | Some v -> let version', namespace_ids' = deserialize Preset.Propagation.from_buffer v in - assert (version' = preset_version); - [ Update.Assert (propagation_key, Some v); - Update.Set (propagation_key, - serialize - Preset.Propagation.to_buffer - (version', namespace_id :: namespace_ids') - ); ] + (* assert (version' = preset_version); *) + if version' = preset_version + then + [ Update.Assert (propagation_key, Some v); + Update.Set (propagation_key, + serialize + Preset.Propagation.to_buffer + (version', namespace_id :: namespace_ids') + ); ] + else + let msg = Printf.sprintf + "%S version'=%Li <> preset_version=%Li" + preset_name version' preset_version + in + failwith msg in let osd_ids = diff --git a/ocaml/src/cli_mgr.ml b/ocaml/src/cli_mgr.ml index 644d0c8c..267e47d0 100644 --- a/ocaml/src/cli_mgr.ml +++ b/ocaml/src/cli_mgr.ml @@ -1252,6 +1252,43 @@ let alba_get_presets_propagation_state_cmd = ), Term.info "get-presets-propagation-state" ~doc:"gets the preset propagation state" +let alba_add_propagate_preset + cfg_file tls_config + preset_name + to_json + verbose + attempts + = + let t () = + with_albamgr_client + cfg_file tls_config ~attempts + (fun client -> + let open Albamgr_protocol.Protocol in + let item = Work.PropagatePreset preset_name in + client # add_work_items [item] + >>= fun () -> + Lwt.return_unit + ) + + in + lwt_cmd_line_unit ~to_json ~verbose t + +let alba_add_propagate_preset_cmd = + Term.(pure alba_add_propagate_preset + $ alba_cfg_url + $ tls_config + $ Arg.(required + & opt (some string) None + & info ["preset"] ~docv:"PRESET" + ) + $ to_json + $ verbose + $ attempts 1 + + ), + Term.info "dev-add-propagate-preset" ~doc:"create preset propagation work" + + let cmds = [ alba_list_namespaces_cmd; alba_list_namespaces_by_id_cmd; @@ -1294,4 +1331,5 @@ let cmds = [ alba_delete_fragment_cmd; alba_get_presets_propagation_state_cmd; + alba_add_propagate_preset_cmd; ] diff --git a/ocaml/src/cli_preset.ml b/ocaml/src/cli_preset.ml index 4f84926e..775a319a 100644 --- a/ocaml/src/cli_preset.ml +++ b/ocaml/src/cli_preset.ml @@ -74,7 +74,7 @@ let alba_update_preset let json = Yojson.Safe.from_string txt in let preset_updates = match Preset.Update.of_yojson json with - | Result.Error s -> failwith s + | Result.Error s -> failwith (s ^ ": parsing failure") | Result.Ok p -> p in Alba_arakoon.config_from_url cfg_url >>= fun cfg -> @@ -169,16 +169,25 @@ let alba_list_presets cfg_url tls_config to_json verbose = cfg ~tls_config (fun client -> - client # list_all_presets ()) >>= fun (cnt, presets) -> + client # list_all_presets2 ()) + >>= fun (cnt, presets) -> if to_json - then begin - let res = List.map Alba_json.Preset.make presets in - print_result res Alba_json.Preset.t_list_to_yojson - end else + then + begin + let res = List.map Alba_json.Preset.make presets in + print_result res Alba_json.Preset.t_list_to_yojson + end + else Lwt_io.printlf "Found %i presets: %s" cnt - ([%show : (Preset.name * Preset.t * bool * bool) list] presets) + ([%show : (Preset.name + * Preset.t + * Preset.version + * bool (* is_default *) + * bool (* in_use *) + ) list] + presets) in lwt_cmd_line ~to_json ~verbose t