Authors: Ransom Richardson (ransom@ransomr.net).
Implementation of requests to DynamoDB. This code is shared accross all API versions.
The pluggable retry function provides a way to customize the retry behavior, as well as log and customize errors that are generated by erlcloud_ddb. In order to not break clients that rely on the error behavior the default error reason can not be changed. But it does not include key information, such as the request_id that you will need if you need to contact AWS support about DynamoDB failures.
Here is an example retry function that provides logging and an updated error reason:
retry(Error) -> RequestId = erlcloud_ddb_impl:request_id_from_error(Error), {_, Operation} = lists:keyfind("x-amz-target", 1, Error#ddb2_error.request_headers), lager:notice("DDB Attempt: ~p Reason: ~p RequestId: ~p, Request: ~p ~p", [Error#ddb2_error.attempt, Error#ddb2_error.reason, RequestId, Operation, Error#ddb2_error.request_body]), Error2 = erlcloud_ddb_impl:error_reason2(Error), erlcloud_ddb_impl:retry(Error2).
attempt() = {attempt, pos_integer()} | {error, term()}
json_return() = ok | {ok, jsx:json_term()} | {error, term()}
operation() = string()
retry_fun() = retry_fun_v1() | retry_fun_v2()
retry_fun_v1() = fun((pos_integer(), term()) -> attempt())
retry_fun_v2() = fun((#ddb2_error{}) -> attempt())
backoff/1 | |
error_reason2/1 | |
request/3 | |
request_id_from_error/1 | |
retry/1 | |
retry/2 |
backoff(Attempt::pos_integer()) -> ok
error_reason2(Ddb2_error::#ddb2_error{}) -> #ddb2_error{}
request(Config0::aws_config(), Operation::operation(), Json::jsx:json_term()) -> json_return()
request_id_from_error(Ddb2_error::#ddb2_error{}) -> string()
retry(Ddb2_error::#ddb2_error{}) -> attempt()
retry(Attempt::pos_integer(), Reason::term()) -> attempt()
Generated by EDoc