Skip to content

Commit 283e7fa

Browse files
committed
Retry on AccessDenied and ExpiredToken errors
Summary: These errors are retryable in our environment. By default, AWS SDK does not retry on them. Test Plan: Compiles Reviewers: #sys-eng_team, hieu Differential Revision: https://rockset.phacility.com/D10616
1 parent 18b2892 commit 283e7fa

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

cloud/aws/aws_retry.cc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#ifdef USE_AWS
1010
#include <aws/core/client/AWSError.h>
1111
#include <aws/core/client/ClientConfiguration.h>
12-
#include <aws/core/client/DefaultRetryStrategy.h>
12+
#include <aws/core/client/SpecifiedRetryableErrorsRetryStrategy.h>
1313
#include <aws/core/client/RetryStrategy.h>
1414
#endif // USE_AWS
1515

@@ -21,7 +21,16 @@ namespace ROCKSDB_NAMESPACE {
2121
class AwsRetryStrategy : public Aws::Client::RetryStrategy {
2222
public:
2323
AwsRetryStrategy(CloudEnv* env) : env_(env) {
24-
default_strategy_ = std::make_shared<Aws::Client::DefaultRetryStrategy>();
24+
// In many environments, AccessDenied and ExpiredToken errors are retryable.
25+
// This is because HTTP requests are involved in fetching the new tokens and
26+
// credentials, which can fail.
27+
Aws::Vector<Aws::String> retryableErrors;
28+
retryableErrors.push_back("AccessDenied");
29+
retryableErrors.push_back("ExpiredToken");
30+
retryableErrors.push_back("InternalError");
31+
default_strategy_ =
32+
std::make_shared<Aws::Client::SpecifiedRetryableErrorsRetryStrategy>(
33+
retryStrategy);
2534
Log(InfoLogLevel::INFO_LEVEL, env_->info_log_,
2635
"[aws] Configured custom retry policy");
2736
}

0 commit comments

Comments
 (0)