Skip to content

Commit

Permalink
Merge pull request #100 from alertlogic/fix_timeouts
Browse files Browse the repository at this point in the history
fix how timeout macro is used
  • Loading branch information
msayler committed Mar 31, 2016
2 parents 5328df2 + 5970458 commit cd43a0c
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 36 deletions.
2 changes: 0 additions & 2 deletions include/erlcloud_aws.hrl
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,6 @@
}).
-type(aws_config() :: #aws_config{}).

-define(DEFAULT_TIMEOUT, 10000).

-record(aws_request,
{
%% Provided by requesting service
Expand Down
15 changes: 9 additions & 6 deletions src/erlcloud_aws.erl
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,15 @@
sign_v4_headers/5,
sign_v4/8,
get_service_status/1,
is_throttling_error_response/1
is_throttling_error_response/1,
get_timeout/1
]).

-include("erlcloud.hrl").
-include_lib("erlcloud/include/erlcloud_aws.hrl").

-define(ERLCLOUD_RETRY_TIMEOUT, 10000).

-record(metadata_credentials,
{access_key_id :: string(),
secret_access_key :: string(),
Expand Down Expand Up @@ -321,7 +324,7 @@ get_credentials_from_metadata(Config) ->
case http_body(
erlcloud_httpc:request(
"http://169.254.169.254/latest/meta-data/iam/security-credentials/",
get, [], <<>>, timeout(Config), Config)) of
get, [], <<>>, get_timeout(Config), Config)) of
{error, Reason} ->
{error, Reason};
{ok, Body} ->
Expand All @@ -331,7 +334,7 @@ get_credentials_from_metadata(Config) ->
erlcloud_httpc:request(
"http://169.254.169.254/latest/meta-data/iam/security-credentials/" ++
binary_to_list(Role),
get, [], <<>>, timeout(Config), Config)) of
get, [], <<>>, get_timeout(Config), Config)) of
{error, Reason} ->
{error, Reason};
{ok, Json} ->
Expand Down Expand Up @@ -375,9 +378,9 @@ http_headers_body({ok, {{Status, StatusLine}, _Headers, Body}}) ->
http_headers_body({error, Reason}) ->
{error, {socket_error, Reason}}.

timeout(#aws_config{timeout = undefined}) ->
?DEFAULT_TIMEOUT;
timeout(#aws_config{timeout = Timeout}) ->
get_timeout(#aws_config{timeout = undefined}) ->
?ERLCLOUD_RETRY_TIMEOUT;
get_timeout(#aws_config{timeout = Timeout}) ->
Timeout.

%% Convert an aws_request record to return value as returned by http_headers_body
Expand Down
8 changes: 2 additions & 6 deletions src/erlcloud_ddb_impl.erl
Original file line number Diff line number Diff line change
Expand Up @@ -114,12 +114,8 @@ timeout(1, #aws_config{timeout = undefined}) ->
%% Shorter timeout on first request. This is to avoid long (5s) failover when first DDB
%% endpoint doesn't respond
1000;
timeout(_, #aws_config{timeout = undefined}) ->
%% Longer timeout on subsequent requsets - results in less timeouts when system is
%% under heavy load
?DEFAULT_TIMEOUT;
timeout(_, #aws_config{timeout = Timeout}) ->
Timeout.
timeout(_, #aws_config{} = Cfg) ->
erlcloud_aws:get_timeout(Cfg).

-type attempt() :: {attempt, pos_integer()} | {error, term()}.

Expand Down
7 changes: 1 addition & 6 deletions src/erlcloud_kinesis_impl.erl
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ request_and_retry(Config, Headers, Body, ShouldDecode, {attempt, Attempt}) ->
case erlcloud_httpc:request(
url(Config), post,
[{<<"content-type">>, <<"application/x-amz-json-1.1">>} | Headers],
Body, timeout(Config), Config) of
Body, erlcloud_aws:get_timeout(Config), Config) of

{ok, {{200, _}, _, RespBody}} ->
Result = case ShouldDecode of
Expand Down Expand Up @@ -175,8 +175,3 @@ port_spec(#aws_config{kinesis_port=Port}) ->

decode(<<>>) -> [];
decode(JSON) -> jsx:decode(JSON).

timeout(#aws_config{timeout = undefined}) ->
?DEFAULT_TIMEOUT;
timeout(#aws_config{timeout = Timeout}) ->
Timeout.
7 changes: 1 addition & 6 deletions src/erlcloud_mturk.erl
Original file line number Diff line number Diff line change
Expand Up @@ -1613,7 +1613,7 @@ mturk_request(Config, Operation, Params) ->
post,
[{<<"content-type">>, <<"application/x-www-form-urlencoded">>}],
list_to_binary(erlcloud_http:make_query_string(QParams)),
timeout(Config), Config),
erlcloud_aws:get_timeout(Config), Config),

case Response of
{ok, {{200, _StatusLine}, _Headers, Body}} ->
Expand All @@ -1623,8 +1623,3 @@ mturk_request(Config, Operation, Params) ->
{error, Error} ->
erlang:error({aws_error, {socket_error, Error}})
end.

timeout(#aws_config{timeout = undefined}) ->
?DEFAULT_TIMEOUT;
timeout(#aws_config{timeout = Timeout}) ->
Timeout.
9 changes: 3 additions & 6 deletions src/erlcloud_retry.erl
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ request_and_retry(Config, ResultFun, {retry, Request}, MaxAttempts) ->
} = Request,
Request2 = Request#aws_request{attempt = Attempt + 1},
RetryFun = Config#aws_config.retry,
case erlcloud_httpc:request(URI, Method, Headers, Body, timeout(Config), Config) of
Rsp = erlcloud_httpc:request(URI, Method, Headers, Body,
erlcloud_aws:get_timeout(Config), Config),
case Rsp of
{ok, {{Status, StatusLine}, ResponseHeaders, ResponseBody}} ->
Request3 = Request2#aws_request{
response_type = if Status >= 200, Status < 300 -> ok; true -> error end,
Expand Down Expand Up @@ -97,8 +99,3 @@ request_and_retry(Config, ResultFun, {retry, Request}, MaxAttempts) ->
RetryFun(Request4),
MaxAttempts - 1)
end.

timeout(#aws_config{timeout = undefined}) ->
?DEFAULT_TIMEOUT;
timeout(#aws_config{timeout = Timeout}) ->
Timeout.
5 changes: 1 addition & 4 deletions src/erlcloud_sqs.erl
Original file line number Diff line number Diff line change
Expand Up @@ -282,10 +282,7 @@ receive_message(QueueName, AttributeNames, MaxNumberOfMessages,
VisibilityTimeout =:= none,
(WaitTimeSeconds >= 0 andalso WaitTimeSeconds =< 20) orelse
WaitTimeSeconds =:= none ->
InitialTimeout = case Config#aws_config.timeout of
undefined -> ?DEFAULT_TIMEOUT;
_ -> Config#aws_config.timeout
end,
InitialTimeout = erlcloud_aws:get_timeout(Config),
TotalTimeout = if
(WaitTimeSeconds =/= none andalso WaitTimeSeconds >= 0 andalso InitialTimeout =/= infinity) ->
InitialTimeout + (WaitTimeSeconds * 1000) ;
Expand Down

0 comments on commit cd43a0c

Please sign in to comment.