mirror of
https://github.com/valitydev/dmt-client.git
synced 2024-11-06 09:25:16 +00:00
add ability to specify woody-opts on each call (#19)
* move network timeouts to sys.config * add ability to specify woody-opts on each call
This commit is contained in:
parent
2d12274713
commit
84b2735c0e
@ -1,5 +1,9 @@
|
|||||||
[
|
[
|
||||||
{dmt_client, [
|
{dmt_client, [
|
||||||
|
{transport_opts, [
|
||||||
|
{recv_timeout, 60000},
|
||||||
|
{connect_timeout, 1000}
|
||||||
|
]},
|
||||||
{cache_update_interval, 5000}, % milliseconds
|
{cache_update_interval, 5000}, % milliseconds
|
||||||
{max_cache_size, #{
|
{max_cache_size, #{
|
||||||
elements => 20,
|
elements => 20,
|
||||||
|
@ -7,8 +7,13 @@
|
|||||||
|
|
||||||
%% API
|
%% API
|
||||||
-export([checkout/1]).
|
-export([checkout/1]).
|
||||||
|
-export([checkout/2]).
|
||||||
-export([checkout_object/2]).
|
-export([checkout_object/2]).
|
||||||
|
-export([checkout_object/3]).
|
||||||
-export([commit/2]).
|
-export([commit/2]).
|
||||||
|
-export([commit/3]).
|
||||||
|
-export([pull/1]).
|
||||||
|
-export([pull/2]).
|
||||||
|
|
||||||
%% Supervisor callbacks
|
%% Supervisor callbacks
|
||||||
-export([init/1]).
|
-export([init/1]).
|
||||||
@ -23,6 +28,7 @@
|
|||||||
-export_type([commit/0]).
|
-export_type([commit/0]).
|
||||||
-export_type([object_ref/0]).
|
-export_type([object_ref/0]).
|
||||||
-export_type([history/0]).
|
-export_type([history/0]).
|
||||||
|
-export_type([transport_opts/0]).
|
||||||
|
|
||||||
-include_lib("dmsl/include/dmsl_domain_config_thrift.hrl").
|
-include_lib("dmsl/include/dmsl_domain_config_thrift.hrl").
|
||||||
|
|
||||||
@ -32,12 +38,20 @@
|
|||||||
-type commit() :: dmsl_domain_config_thrift:'Commit'().
|
-type commit() :: dmsl_domain_config_thrift:'Commit'().
|
||||||
-type object_ref() :: dmsl_domain_thrift:'Reference'().
|
-type object_ref() :: dmsl_domain_thrift:'Reference'().
|
||||||
-type history() :: dmsl_domain_config_thrift:'History'().
|
-type history() :: dmsl_domain_config_thrift:'History'().
|
||||||
|
-type transport_opts() :: woody_client_thrift_http_transport:options() | undefined.
|
||||||
|
|
||||||
%% API
|
%% API
|
||||||
|
|
||||||
-spec checkout(ref()) -> snapshot() | no_return().
|
-spec checkout(ref()) ->
|
||||||
|
snapshot() | no_return().
|
||||||
|
|
||||||
checkout(Reference) ->
|
checkout(Reference) ->
|
||||||
|
checkout(Reference, undefined).
|
||||||
|
|
||||||
|
-spec checkout(ref(), transport_opts()) ->
|
||||||
|
snapshot() | no_return().
|
||||||
|
|
||||||
|
checkout(Reference, Opts) ->
|
||||||
CacheResult = case Reference of
|
CacheResult = case Reference of
|
||||||
{head, #'Head'{}} ->
|
{head, #'Head'{}} ->
|
||||||
dmt_client_cache:get_latest();
|
dmt_client_cache:get_latest();
|
||||||
@ -48,13 +62,20 @@ checkout(Reference) ->
|
|||||||
{ok, Snapshot} ->
|
{ok, Snapshot} ->
|
||||||
Snapshot;
|
Snapshot;
|
||||||
{error, version_not_found} ->
|
{error, version_not_found} ->
|
||||||
dmt_client_cache:put(dmt_client_api:checkout(Reference))
|
dmt_client_cache:put(dmt_client_api:checkout(Reference, Opts))
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec checkout_object(ref(), object_ref()) -> dmsl_domain_config_thrift:'VersionedObject'() | no_return().
|
-spec checkout_object(ref(), object_ref()) ->
|
||||||
|
dmsl_domain_config_thrift:'VersionedObject'() | no_return().
|
||||||
|
|
||||||
checkout_object(Reference, ObjectReference) ->
|
checkout_object(Reference, ObjectReference) ->
|
||||||
#'Snapshot'{version = Version, domain = Domain} = checkout(Reference),
|
checkout_object(Reference, ObjectReference, undefined).
|
||||||
|
|
||||||
|
-spec checkout_object(ref(), object_ref(), transport_opts()) ->
|
||||||
|
dmsl_domain_config_thrift:'VersionedObject'() | no_return().
|
||||||
|
|
||||||
|
checkout_object(Reference, ObjectReference, Opts) ->
|
||||||
|
#'Snapshot'{version = Version, domain = Domain} = checkout(Reference, Opts),
|
||||||
case dmt_domain:get_object(ObjectReference, Domain) of
|
case dmt_domain:get_object(ObjectReference, Domain) of
|
||||||
{ok, Object} ->
|
{ok, Object} ->
|
||||||
#'VersionedObject'{version = Version, object = Object};
|
#'VersionedObject'{version = Version, object = Object};
|
||||||
@ -62,10 +83,29 @@ checkout_object(Reference, ObjectReference) ->
|
|||||||
throw(object_not_found)
|
throw(object_not_found)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec commit(version(), commit()) -> version() | no_return().
|
-spec commit(version(), commit()) ->
|
||||||
|
version() | no_return().
|
||||||
|
|
||||||
commit(Version, Commit) ->
|
commit(Version, Commit) ->
|
||||||
dmt_client_api:commit(Version, Commit).
|
commit(Version, Commit, undefined).
|
||||||
|
|
||||||
|
-spec commit(version(), commit(), transport_opts()) ->
|
||||||
|
version() | no_return().
|
||||||
|
|
||||||
|
commit(Version, Commit, Opts) ->
|
||||||
|
dmt_client_api:commit(Version, Commit, Opts).
|
||||||
|
|
||||||
|
-spec pull(version()) ->
|
||||||
|
history() | no_return().
|
||||||
|
|
||||||
|
pull(Version) ->
|
||||||
|
pull(Version, undefined).
|
||||||
|
|
||||||
|
-spec pull(version(), transport_opts()) ->
|
||||||
|
history() | no_return().
|
||||||
|
|
||||||
|
pull(Version, Opts) ->
|
||||||
|
dmt_client_api:pull(Version, Opts).
|
||||||
|
|
||||||
%% Supervisor callbacks
|
%% Supervisor callbacks
|
||||||
|
|
||||||
|
@ -1,39 +1,43 @@
|
|||||||
-module(dmt_client_api).
|
-module(dmt_client_api).
|
||||||
|
|
||||||
-export([commit/2]).
|
-export([commit/3]).
|
||||||
-export([checkout/1]).
|
-export([checkout/2]).
|
||||||
-export([pull/1]).
|
-export([pull/2]).
|
||||||
-export([checkout_object/2]).
|
-export([checkout_object/3]).
|
||||||
|
|
||||||
-spec commit(dmt_client:version(), dmt_client:commit()) -> dmt_client:version() | no_return().
|
-spec commit(dmt_client:version(), dmt_client:commit(), dmt_client:transport_opts()) ->
|
||||||
|
dmt_client:version() | no_return().
|
||||||
|
|
||||||
commit(Version, Commit) ->
|
commit(Version, Commit, Opts) ->
|
||||||
call('Repository', 'Commit', [Version, Commit]).
|
call('Repository', 'Commit', [Version, Commit], Opts).
|
||||||
|
|
||||||
-spec checkout(dmt_client:ref()) -> dmt_client:snapshot() | no_return().
|
-spec checkout(dmt_client:ref(), dmt_client:transport_opts()) ->
|
||||||
|
dmt_client:snapshot() | no_return().
|
||||||
|
|
||||||
checkout(Reference) ->
|
checkout(Reference, Opts) ->
|
||||||
call('Repository', 'Checkout', [Reference]).
|
call('Repository', 'Checkout', [Reference], Opts).
|
||||||
|
|
||||||
-spec pull(dmt_client:version()) -> dmt_client:history() | no_return().
|
-spec pull(dmt_client:version(), dmt_client:transport_opts()) ->
|
||||||
|
dmt_client:history() | no_return().
|
||||||
|
|
||||||
pull(Version) ->
|
pull(Version, Opts) ->
|
||||||
call('Repository', 'Pull', [Version]).
|
call('Repository', 'Pull', [Version], Opts).
|
||||||
|
|
||||||
-spec checkout_object(dmt_client:ref(), dmt_client:object_ref()) -> dmsl_domain_thrift:'DomainObject'() | no_return().
|
-spec checkout_object(dmt_client:ref(), dmt_client:object_ref(), dmt_client:transport_opts()) ->
|
||||||
|
dmsl_domain_thrift:'DomainObject'() | no_return().
|
||||||
|
|
||||||
checkout_object(Reference, ObjectReference) ->
|
checkout_object(Reference, ObjectReference, Opts) ->
|
||||||
call('RepositoryClient', 'checkoutObject', [Reference, ObjectReference]).
|
call('RepositoryClient', 'checkoutObject', [Reference, ObjectReference], Opts).
|
||||||
|
|
||||||
|
|
||||||
call(ServiceName, Function, Args) ->
|
call(ServiceName, Function, Args, TransportOpts) ->
|
||||||
Url = get_service_url(ServiceName),
|
Url = get_service_url(ServiceName),
|
||||||
Service = get_service_modname(ServiceName),
|
Service = get_service_modname(ServiceName),
|
||||||
Call = {Service, Function, Args},
|
Call = {Service, Function, Args},
|
||||||
Opts = #{
|
Opts = #{
|
||||||
url => Url,
|
url => Url,
|
||||||
event_handler => scoper_woody_event_handler,
|
event_handler => scoper_woody_event_handler,
|
||||||
transport_opts => [{recv_timeout, 60000}, {connect_timeout, 1000}]
|
transport_opts => ensure_transport_opts(TransportOpts)
|
||||||
},
|
},
|
||||||
Context = woody_context:new(),
|
Context = woody_context:new(),
|
||||||
case woody_client:call(Call, Opts, Context) of
|
case woody_client:call(Call, Opts, Context) of
|
||||||
@ -53,3 +57,12 @@ get_service_module('Repository') ->
|
|||||||
dmsl_domain_config_thrift;
|
dmsl_domain_config_thrift;
|
||||||
get_service_module('RepositoryClient') ->
|
get_service_module('RepositoryClient') ->
|
||||||
dmsl_domain_config_thrift.
|
dmsl_domain_config_thrift.
|
||||||
|
|
||||||
|
-spec ensure_transport_opts(dmt_client:transport_opts()) ->
|
||||||
|
woody_client_thrift_http_transport:options().
|
||||||
|
|
||||||
|
ensure_transport_opts(Opts) when is_list(Opts) ->
|
||||||
|
Opts;
|
||||||
|
ensure_transport_opts(undefined) ->
|
||||||
|
Default = [{recv_timeout, 60000}, {connect_timeout, 1000}],
|
||||||
|
genlib_app:env(dmt_client, transport_opts, Default).
|
||||||
|
@ -166,11 +166,11 @@ update_cache() ->
|
|||||||
try
|
try
|
||||||
NewHead = case latest_snapshot() of
|
NewHead = case latest_snapshot() of
|
||||||
{ok, OldHead} ->
|
{ok, OldHead} ->
|
||||||
FreshHistory = dmt_client_api:pull(OldHead#'Snapshot'.version),
|
FreshHistory = dmt_client_api:pull(OldHead#'Snapshot'.version, undefined),
|
||||||
{ok, Head} = dmt_history:head(FreshHistory, OldHead),
|
{ok, Head} = dmt_history:head(FreshHistory, OldHead),
|
||||||
Head;
|
Head;
|
||||||
{error, version_not_found} ->
|
{error, version_not_found} ->
|
||||||
dmt_client_api:checkout({head, #'Head'{}})
|
dmt_client_api:checkout({head, #'Head'{}}, undefined)
|
||||||
end,
|
end,
|
||||||
ok = put_snapshot(NewHead),
|
ok = put_snapshot(NewHead),
|
||||||
{ok, NewHead#'Snapshot'.version}
|
{ok, NewHead#'Snapshot'.version}
|
||||||
|
@ -55,7 +55,7 @@ poll(_C) ->
|
|||||||
Ref = fixture_object_ref(1),
|
Ref = fixture_object_ref(1),
|
||||||
object_not_found = (catch dmt_client:checkout_object({head, #'Head'{}}, Ref)),
|
object_not_found = (catch dmt_client:checkout_object({head, #'Head'{}}, Ref)),
|
||||||
#'Snapshot'{version = Version1} = dmt_client:checkout({head, #'Head'{}}),
|
#'Snapshot'{version = Version1} = dmt_client:checkout({head, #'Head'{}}),
|
||||||
Version2 = dmt_client_api:commit(Version1, #'Commit'{ops = [{insert, #'InsertOp'{object = Object}}]}),
|
Version2 = dmt_client_api:commit(Version1, #'Commit'{ops = [{insert, #'InsertOp'{object = Object}}]}, undefined),
|
||||||
true = Version1 < Version2,
|
true = Version1 < Version2,
|
||||||
_ = dmt_client_cache:update(),
|
_ = dmt_client_cache:update(),
|
||||||
#'Snapshot'{version = Version2} = dmt_client:checkout({head, #'Head'{}}),
|
#'Snapshot'{version = Version2} = dmt_client:checkout({head, #'Head'{}}),
|
||||||
|
Loading…
Reference in New Issue
Block a user