summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVy Hong <vhong@amazon.com>2021-10-06 17:27:08 -0700
committerVy Hong <vhong@amazon.com>2021-10-08 14:48:40 -0700
commita1a22b2a3c7c756b0c3e692d1a1a9e1876bb9ea9 (patch)
tree4a6e1f9e23c43fe3200c17e473536601eedfb5fd
parent49a47586b075c19e5af521a3f1d333ed8fab4654 (diff)
downloadrabbitmq-server-git-a1a22b2a3c7c756b0c3e692d1a1a9e1876bb9ea9.tar.gz
Log response body of failed AWS requests
-rw-r--r--deps/rabbitmq_aws/src/rabbitmq_aws.erl23
-rw-r--r--deps/rabbitmq_aws/test/src/rabbitmq_aws_tests.erl8
2 files changed, 20 insertions, 11 deletions
diff --git a/deps/rabbitmq_aws/src/rabbitmq_aws.erl b/deps/rabbitmq_aws/src/rabbitmq_aws.erl
index f132ee1a9b..476539b441 100644
--- a/deps/rabbitmq_aws/src/rabbitmq_aws.erl
+++ b/deps/rabbitmq_aws/src/rabbitmq_aws.erl
@@ -546,19 +546,24 @@ api_get_request(Service, Path) ->
api_get_request_with_retries(Service, Path, ?MAX_RETRIES, ?LINEAR_BACK_OFF_MILLIS).
- -spec api_get_request_with_retries(string(), path(), integer(), integer()) -> result().
- %% @doc Invoke an API call to an AWS service with retries.
- %% @end
+-spec api_get_request_with_retries(string(), path(), integer(), integer()) -> result().
+%% @doc Invoke an API call to an AWS service with retries.
+%% @end
api_get_request_with_retries(_, _, 0, _) ->
rabbit_log:warning("Request to AWS service has failed after ~b retries", [?MAX_RETRIES]),
{error, "AWS service is unavailable"};
api_get_request_with_retries(Service, Path, Retries, WaitTimeBetweenRetries) ->
ensure_credentials_valid(),
case get(Service, Path) of
- {ok, {_Headers, Payload}} -> rabbit_log:debug("AWS request: ~s~nResponse: ~p", [Path, Payload]),
- {ok, Payload};
- {error, {credentials, _}} -> {error, credentials};
- {error, Message, _} -> rabbit_log:warning("Error occurred ~s~nWill retry AWS request, remaining retries: ~b", [Message, Retries]),
- timer:sleep(WaitTimeBetweenRetries),
- api_get_request_with_retries(Service, Path, Retries - 1, WaitTimeBetweenRetries)
+ {ok, {_Headers, Payload}} -> rabbit_log:debug("AWS request: ~s~nResponse: ~p", [Path, Payload]),
+ {ok, Payload};
+ {error, {credentials, _}} -> {error, credentials};
+ {error, Message, Response} -> rabbit_log:warning("Error occurred: ~s", [Message]),
+ case Response of
+ {_, Payload} -> rabbit_log:warning("Failed AWS request: ~s~nResponse: ~p", [Path, Payload]);
+ _ -> ok
+ end,
+ rabbit_log:warning("Will retry AWS request, remaining retries: ~b", [Retries]),
+ timer:sleep(WaitTimeBetweenRetries),
+ api_get_request_with_retries(Service, Path, Retries - 1, WaitTimeBetweenRetries)
end.
diff --git a/deps/rabbitmq_aws/test/src/rabbitmq_aws_tests.erl b/deps/rabbitmq_aws/test/src/rabbitmq_aws_tests.erl
index 0d23df4324..a6bf8b8c52 100644
--- a/deps/rabbitmq_aws/test/src/rabbitmq_aws_tests.erl
+++ b/deps/rabbitmq_aws/test/src/rabbitmq_aws_tests.erl
@@ -485,7 +485,7 @@ api_get_request_test_() ->
secret_access_key = "ExpiredAccessKey",
region = "us-east-1",
expiration = {{3016, 4, 1}, {12, 0, 0}}},
- meck:expect(httpc, request, 4, {error, "invalid input"}),
+ meck:expect(httpc, request, 4, {error, "network error"}),
{ok, Pid} = rabbitmq_aws:start_link(),
rabbitmq_aws:set_region("us-east-1"),
rabbitmq_aws:set_credentials(State),
@@ -501,7 +501,11 @@ api_get_request_test_() ->
secret_access_key = "ExpiredAccessKey",
region = "us-east-1",
expiration = {{3016, 4, 1}, {12, 0, 0}}},
- meck:expect(httpc, request, 4, meck:seq([{error, "invalid input"}, {ok, {{"HTTP/1.0", 200, "OK"}, [{"content-type", "application/json"}], "{\"data\": \"value\"}"}}])),
+ meck:expect(httpc, request, 4, meck:seq([
+ {error, "network error"},
+ {ok, {{"HTTP/1.0", 500, "OK"}, [{"content-type", "application/json"}], "{\"error\": \"server error\"}"}},
+ {ok, {{"HTTP/1.0", 200, "OK"}, [{"content-type", "application/json"}], "{\"data\": \"value\"}"}}
+ ])),
{ok, Pid} = rabbitmq_aws:start_link(),
rabbitmq_aws:set_region("us-east-1"),
rabbitmq_aws:set_credentials(State),