Skip to content

Commit

Permalink
Merge pull request #752 from openvstorage/propagate_preset
Browse files Browse the repository at this point in the history
Propagate preset
  • Loading branch information
Romain Slootmaekers authored Jul 11, 2017
2 parents 2733e83 + 47cda6a commit 417454d
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 22 deletions.
4 changes: 3 additions & 1 deletion ocaml/src/alba_json.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand All @@ -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;
Expand All @@ -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
Expand Down
38 changes: 31 additions & 7 deletions ocaml/src/albamgr_client.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
22 changes: 15 additions & 7 deletions ocaml/src/albamgr_plugin.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down
38 changes: 38 additions & 0 deletions ocaml/src/cli_mgr.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -1294,4 +1331,5 @@ let cmds = [
alba_delete_fragment_cmd;

alba_get_presets_propagation_state_cmd;
alba_add_propagate_preset_cmd;
]
23 changes: 16 additions & 7 deletions ocaml/src/cli_preset.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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 ->
Expand Down Expand Up @@ -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

Expand Down

0 comments on commit 417454d

Please sign in to comment.