Skip to content

Commit 1128914

Browse files
Add retry count to Outcome template; add more tracing to a test
1 parent e1d97a8 commit 1128914

File tree

5 files changed

+158
-80
lines changed

5 files changed

+158
-80
lines changed

src/aws-cpp-sdk-core/include/aws/core/utils/Outcome.h

+15-2
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ namespace Aws
101101
result = o.result;
102102
error = o.error;
103103
success = o.success;
104+
retryCount = o.retryCount;
104105
}
105106

106107
return *this;
@@ -109,7 +110,8 @@ namespace Aws
109110
Outcome(Outcome&& o) : // Required to force Move Constructor
110111
result(std::move(o.result)),
111112
error(std::move(o.error)),
112-
success(o.success)
113+
success(o.success),
114+
retryCount(std::move(o.retryCount))
113115
{
114116
}
115117

@@ -120,6 +122,7 @@ namespace Aws
120122
result = std::move(o.result);
121123
error = std::move(o.error);
122124
success = o.success;
125+
retryCount = std::move(o.retryCount);
123126
}
124127

125128
return *this;
@@ -160,10 +163,20 @@ namespace Aws
160163
return this->success;
161164
}
162165

166+
/**
167+
* Returns how many times the retry happened before getting this outcome.
168+
*/
169+
inline unsigned int GetRetryCount() const { return retryCount; }
170+
/**
171+
* Sets the retry count.
172+
*/
173+
inline void SetRetryCount(const unsigned int iRetryCount) { retryCount = iRetryCount; }
174+
163175
private:
164176
R result;
165177
E error;
166-
bool success;
178+
bool success = false;
179+
unsigned int retryCount = 0;
167180
};
168181

169182
} // namespace Utils

src/aws-cpp-sdk-core/source/client/AWSClient.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ HttpResponseOutcome AWSClient::AttemptExhaustively(const Aws::Http::URI& uri,
278278
httpRequest->SetEventStreamRequest(request.IsEventStreamRequest());
279279

280280
outcome = AttemptOneRequest(httpRequest, request, signerName, signerRegion, signerServiceNameOverride);
281+
outcome.SetRetryCount(retries);
281282
if (retries == 0)
282283
{
283284
m_retryStrategy->RequestBookkeeping(outcome);
@@ -422,6 +423,7 @@ HttpResponseOutcome AWSClient::AttemptExhaustively(const Aws::Http::URI& uri,
422423

423424
};
424425
outcome = AttemptOneRequest(httpRequest, signerName, requestName, signerRegion, signerServiceNameOverride);
426+
outcome.SetRetryCount(retries);
425427
if (retries == 0)
426428
{
427429
m_retryStrategy->RequestBookkeeping(outcome);

tests/aws-cpp-sdk-s3-crt-integration-tests/BucketAndObjectOperationTest.cpp

+53-27
Original file line numberDiff line numberDiff line change
@@ -99,19 +99,28 @@ namespace
9999

100100
void EnsureUniqueBucketNames()
101101
{
102-
AppendUUID(BASE_CREATE_BUCKET_TEST_NAME);
103-
AppendUUID(BASE_DNS_UNFRIENDLY_TEST_NAME);
104-
AppendUUID(BASE_LOCATION_BUCKET_TEST_NAME);
105-
AppendUUID(BASE_OBJECTS_BUCKET_NAME);
106-
AppendUUID(BASE_OBJECTS_DEFAULT_CTOR_BUCKET_NAME);
107-
AppendUUID(BASE_PUT_OBJECTS_BUCKET_NAME);
108-
AppendUUID(BASE_PUT_WEIRD_CHARSETS_OBJECTS_BUCKET_NAME);
109-
AppendUUID(BASE_PUT_OBJECTS_PRESIGNED_URLS_BUCKET_NAME);
110-
AppendUUID(BASE_PUT_MULTIPART_BUCKET_NAME);
111-
AppendUUID(BASE_ERRORS_TESTING_BUCKET);
112-
AppendUUID(BASE_EVENT_STREAM_TEST_BUCKET_NAME);
113-
AppendUUID(BASE_EVENT_STREAM_LARGE_FILE_TEST_BUCKET_NAME);
114-
AppendUUID(BASE_EVENT_STREAM_ERRORS_IN_EVENT_TEST_BUCKET_NAME);
102+
Aws::Vector<std::reference_wrapper<Aws::String>> TEST_BUCKETS =
103+
{
104+
std::ref(BASE_CREATE_BUCKET_TEST_NAME),
105+
std::ref(BASE_DNS_UNFRIENDLY_TEST_NAME),
106+
std::ref(BASE_LOCATION_BUCKET_TEST_NAME),
107+
std::ref(BASE_OBJECTS_BUCKET_NAME),
108+
std::ref(BASE_OBJECTS_DEFAULT_CTOR_BUCKET_NAME),
109+
std::ref(BASE_PUT_OBJECTS_BUCKET_NAME),
110+
std::ref(BASE_PUT_WEIRD_CHARSETS_OBJECTS_BUCKET_NAME),
111+
std::ref(BASE_PUT_OBJECTS_PRESIGNED_URLS_BUCKET_NAME),
112+
std::ref(BASE_PUT_MULTIPART_BUCKET_NAME),
113+
std::ref(BASE_ERRORS_TESTING_BUCKET),
114+
std::ref(BASE_EVENT_STREAM_TEST_BUCKET_NAME),
115+
std::ref(BASE_EVENT_STREAM_LARGE_FILE_TEST_BUCKET_NAME),
116+
std::ref(BASE_EVENT_STREAM_ERRORS_IN_EVENT_TEST_BUCKET_NAME)
117+
};
118+
119+
for (auto& testBucketName : TEST_BUCKETS)
120+
{
121+
AppendUUID(testBucketName);
122+
SCOPED_TRACE(Aws::String("EnsureUniqueBucketNames: ") + testBucketName.get());
123+
}
115124
}
116125

117126
class RetryFiveTimesRetryStrategy: public Aws::Client::RetryStrategy
@@ -357,6 +366,7 @@ namespace
357366
static Aws::String PreparePresignedUrlTest()
358367
{
359368
Aws::String fullBucketName = CalculateBucketName(BASE_PUT_OBJECTS_PRESIGNED_URLS_BUCKET_NAME.c_str());
369+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
360370
CreateBucketRequest createBucketRequest;
361371
createBucketRequest.SetBucket(fullBucketName);
362372
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -409,6 +419,7 @@ namespace
409419
static void CleanUpPresignedUrlTest()
410420
{
411421
Aws::String fullBucketName = CalculateBucketName(BASE_PUT_OBJECTS_PRESIGNED_URLS_BUCKET_NAME.c_str());
422+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
412423
Aws::String presignedUrlDelete = Client->GeneratePresignedUrl(fullBucketName, TEST_OBJ_KEY, HttpMethod::HTTP_DELETE);
413424
std::shared_ptr<HttpRequest> deleteRequest = CreateHttpRequest(presignedUrlDelete, HttpMethod::HTTP_DELETE, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
414425
std::shared_ptr<HttpResponse> deleteResponse = m_HttpClient->MakeRequest(deleteRequest);
@@ -425,6 +436,7 @@ namespace
425436
TEST_F(BucketAndObjectOperationTest, TestBucketOperationsErrorWithMissingRequiredFields)
426437
{
427438
Aws::String fullBucketName = CalculateBucketName(BASE_CREATE_BUCKET_TEST_NAME.c_str());
439+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
428440
HeadBucketRequest headBucketRequest;
429441
HeadBucketOutcome headBucketOutcome = Client->HeadBucket(headBucketRequest);
430442
ASSERT_FALSE(headBucketOutcome.IsSuccess());
@@ -438,8 +450,8 @@ namespace
438450

439451
TEST_F(BucketAndObjectOperationTest, TestBucketCreationAndListing)
440452
{
441-
Aws::String fullBucketName = CalculateBucketName(BASE_CREATE_BUCKET_TEST_NAME.c_str());
442-
453+
const Aws::String fullBucketName = CalculateBucketName(BASE_CREATE_BUCKET_TEST_NAME.c_str());
454+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
443455
CreateBucketRequest createBucketRequest;
444456
createBucketRequest.SetBucket(fullBucketName);
445457
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -477,6 +489,7 @@ namespace
477489
TEST_F(BucketAndObjectOperationTest, TestBucketLocation)
478490
{
479491
Aws::String fullBucketName = CalculateBucketName(BASE_LOCATION_BUCKET_TEST_NAME.c_str());
492+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
480493
CreateBucketRequest createBucketRequest;
481494
createBucketRequest.SetBucket(fullBucketName);
482495
CreateBucketConfiguration bucketConfiguration;
@@ -505,8 +518,8 @@ namespace
505518
// S3 CRT Client could not handle these special characters in key name right now.
506519
TEST_F(BucketAndObjectOperationTest, TestPutWithSpecialCharactersInKeyName)
507520
{
508-
Aws::String fullBucketName = CalculateBucketName(BASE_PUT_OBJECTS_BUCKET_NAME.c_str());
509-
521+
const Aws::String fullBucketName = CalculateBucketName(BASE_PUT_OBJECTS_BUCKET_NAME.c_str());
522+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
510523
CreateBucketRequest createBucketRequest;
511524
createBucketRequest.SetBucket(fullBucketName);
512525
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -531,8 +544,8 @@ namespace
531544

532545
TEST_F(BucketAndObjectOperationTest, TestObjectOperations)
533546
{
534-
Aws::String fullBucketName = CalculateBucketName(BASE_OBJECTS_BUCKET_NAME.c_str());
535-
547+
const Aws::String fullBucketName = CalculateBucketName(BASE_OBJECTS_BUCKET_NAME.c_str());
548+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
536549
CreateBucketRequest createBucketRequest;
537550
createBucketRequest.SetBucket(fullBucketName);
538551
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -605,8 +618,8 @@ namespace
605618
//Create Client with default constructor
606619
Client = Aws::MakeShared<S3CrtClient>(ALLOCATION_TAG);
607620

608-
Aws::String fullBucketName = CalculateBucketName(BASE_OBJECTS_DEFAULT_CTOR_BUCKET_NAME);
609-
621+
const Aws::String fullBucketName = CalculateBucketName(BASE_OBJECTS_DEFAULT_CTOR_BUCKET_NAME);
622+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
610623
CreateBucketRequest createBucketRequest;
611624
createBucketRequest.SetBucket(fullBucketName);
612625
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -675,8 +688,8 @@ namespace
675688

676689
TEST_F(BucketAndObjectOperationTest, TestKeysWithCrazyCharacterSets)
677690
{
678-
Aws::String fullBucketName = CalculateBucketName(BASE_PUT_WEIRD_CHARSETS_OBJECTS_BUCKET_NAME.c_str());
679-
691+
const Aws::String fullBucketName = CalculateBucketName(BASE_PUT_WEIRD_CHARSETS_OBJECTS_BUCKET_NAME.c_str());
692+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
680693
CreateBucketRequest createBucketRequest;
681694
createBucketRequest.SetBucket(fullBucketName);
682695
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -742,6 +755,7 @@ namespace
742755
TEST_F(BucketAndObjectOperationTest, TestObjectOperationsWithPresignedUrls)
743756
{
744757
Aws::String fullBucketName = PreparePresignedUrlTest();
758+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
745759
Aws::String presignedUrlPut = Client->GeneratePresignedUrl(fullBucketName, TEST_OBJ_KEY, HttpMethod::HTTP_PUT);
746760
std::shared_ptr<HttpRequest> putRequest = CreateHttpRequest(presignedUrlPut, HttpMethod::HTTP_PUT, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
747761
DoPresignedUrlTest(fullBucketName, putRequest);
@@ -751,6 +765,7 @@ namespace
751765
TEST_F(BucketAndObjectOperationTest, TestObjectOperationsWithPresignedUrlsAndCustomizedHeaders)
752766
{
753767
Aws::String fullBucketName = PreparePresignedUrlTest();
768+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
754769
Aws::Http::HeaderValueCollection collections;
755770
collections.emplace("TestKey1", "TestVal1");
756771
collections.emplace("TestKey2", "TestVal2");
@@ -768,6 +783,7 @@ namespace
768783
TEST_F(BucketAndObjectOperationTest, TestObjectOperationsWithPresignedUrlsWithSSES3)
769784
{
770785
Aws::String fullBucketName = PreparePresignedUrlTest();
786+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
771787
Aws::String presignedUrlPut = Client->GeneratePresignedUrlWithSSES3(fullBucketName, TEST_OBJ_KEY, HttpMethod::HTTP_PUT);
772788
std::shared_ptr<HttpRequest> putRequest = CreateHttpRequest(presignedUrlPut, HttpMethod::HTTP_PUT, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
773789
putRequest->SetHeaderValue(Aws::S3Crt::SSEHeaders::SERVER_SIDE_ENCRYPTION,
@@ -779,6 +795,7 @@ namespace
779795
TEST_F(BucketAndObjectOperationTest, TestObjectOperationsWithPresignedUrlsWithSSES3AndCustomizedHeaders)
780796
{
781797
Aws::String fullBucketName = PreparePresignedUrlTest();
798+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
782799
Aws::Http::HeaderValueCollection collections;
783800
collections.emplace("TestKey1", "TestVal1");
784801
collections.emplace("TestKey2", "TestVal2");
@@ -798,6 +815,7 @@ namespace
798815
TEST_F(BucketAndObjectOperationTest, TestObjectOperationsWithPresignedUrlsWithSSEKMS)
799816
{
800817
Aws::String fullBucketName = PreparePresignedUrlTest();
818+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
801819
Aws::String presignedUrlPut = Client->GeneratePresignedUrlWithSSEKMS(fullBucketName, TEST_OBJ_KEY, HttpMethod::HTTP_PUT); //Using default KMS key in this AWS account
802820
std::shared_ptr<HttpRequest> putRequest = CreateHttpRequest(presignedUrlPut, HttpMethod::HTTP_PUT, Aws::Utils::Stream::DefaultResponseStreamFactoryMethod);
803821
putRequest->SetHeaderValue(Aws::S3Crt::SSEHeaders::SERVER_SIDE_ENCRYPTION,
@@ -810,6 +828,7 @@ namespace
810828
TEST_F(BucketAndObjectOperationTest, TestObjectOperationsWithPresignedUrlsWithSSEKMSAndCustomizedHeaders)
811829
{
812830
Aws::String fullBucketName = PreparePresignedUrlTest();
831+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
813832
Aws::Http::HeaderValueCollection collections;
814833
collections.emplace("TestKey1", "TestVal1");
815834
collections.emplace("TestKey2", "TestVal2");
@@ -828,8 +847,8 @@ namespace
828847

829848
TEST_F(BucketAndObjectOperationTest, TestThatErrorsParse)
830849
{
831-
Aws::String fullBucketName = CalculateBucketName(BASE_ERRORS_TESTING_BUCKET.c_str());
832-
850+
const Aws::String fullBucketName = CalculateBucketName(BASE_ERRORS_TESTING_BUCKET.c_str());
851+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
833852
ListObjectsRequest listObjectsRequest;
834853
listObjectsRequest.SetBucket("abcdedoikengi");
835854

@@ -860,6 +879,7 @@ namespace
860879
TEST_F(BucketAndObjectOperationTest, TestNotModifiedIsSuccess)
861880
{
862881
Aws::String fullBucketName = CalculateBucketName(BASE_PUT_OBJECTS_BUCKET_NAME.c_str());
882+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
863883
CreateBucketRequest createBucketRequest;
864884
createBucketRequest.SetBucket(fullBucketName);
865885
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -895,6 +915,7 @@ namespace
895915
TEST_F(BucketAndObjectOperationTest, TestVirtualAddressingWithUnfriendlyBucketName)
896916
{
897917
Aws::String fullBucketName = CalculateBucketName(BASE_DNS_UNFRIENDLY_TEST_NAME.c_str());
918+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
898919
CreateBucketRequest createBucketRequest;
899920
createBucketRequest.SetBucket(fullBucketName);
900921
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -928,6 +949,7 @@ namespace
928949
TEST_F(BucketAndObjectOperationTest, TestCopyingFromKeysWithUnicodeCharacters)
929950
{
930951
Aws::String fullBucketName = CalculateBucketName(BASE_CREATE_BUCKET_TEST_NAME.c_str());
952+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
931953
CreateBucketRequest createBucketRequest;
932954
createBucketRequest.SetBucket(fullBucketName);
933955
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -962,6 +984,7 @@ namespace
962984
TEST_F(BucketAndObjectOperationTest, TestObjectOperationWithEventStream)
963985
{
964986
Aws::String fullBucketName = CalculateBucketName(BASE_EVENT_STREAM_TEST_BUCKET_NAME.c_str());
987+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
965988
CreateBucketRequest createBucketRequest;
966989
createBucketRequest.SetBucket(fullBucketName);
967990
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -1041,6 +1064,7 @@ namespace
10411064
TEST_F(BucketAndObjectOperationTest, TestSelectObjectOperationWithEventStreamFailWithRetry)
10421065
{
10431066
Aws::String fullBucketName = CalculateBucketName(BASE_EVENT_STREAM_TEST_BUCKET_NAME.c_str());
1067+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
10441068
CreateBucketRequest createBucketRequest;
10451069
createBucketRequest.SetBucket(fullBucketName);
10461070
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -1116,6 +1140,7 @@ namespace
11161140
TEST_F(BucketAndObjectOperationTest, TestEventStreamWithLargeFile)
11171141
{
11181142
Aws::String fullBucketName = CalculateBucketName(BASE_EVENT_STREAM_LARGE_FILE_TEST_BUCKET_NAME.c_str());
1143+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
11191144
CreateBucketRequest createBucketRequest;
11201145
createBucketRequest.SetBucket(fullBucketName);
11211146
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -1221,6 +1246,7 @@ namespace
12211246
TEST_F(BucketAndObjectOperationTest, TestErrorsInEventStream)
12221247
{
12231248
Aws::String fullBucketName = CalculateBucketName(BASE_EVENT_STREAM_ERRORS_IN_EVENT_TEST_BUCKET_NAME.c_str());
1249+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
12241250
CreateBucketRequest createBucketRequest;
12251251
createBucketRequest.SetBucket(fullBucketName);
12261252
createBucketRequest.SetACL(BucketCannedACL::private_);
@@ -1290,8 +1316,8 @@ namespace
12901316

12911317
TEST_F(BucketAndObjectOperationTest, TestEmptyBody)
12921318
{
1293-
Aws::String fullBucketName = CalculateBucketName(BASE_PUT_OBJECTS_BUCKET_NAME.c_str());
1294-
1319+
const Aws::String fullBucketName = CalculateBucketName(BASE_PUT_OBJECTS_BUCKET_NAME.c_str());
1320+
SCOPED_TRACE(Aws::String("FullBucketName ") + fullBucketName);
12951321
CreateBucketRequest createBucketRequest;
12961322
createBucketRequest.SetBucket(fullBucketName);
12971323
createBucketRequest.SetACL(BucketCannedACL::private_);

0 commit comments

Comments
 (0)