@@ -713,9 +713,24 @@ void S3CrtClient::InitCommonCrtRequestOption(CrtRequestCallbackUserData *userDat
713
713
714
714
static void CopyObjectRequestShutdownCallback (void *user_data)
715
715
{
716
+ if (!user_data)
717
+ {
718
+ AWS_LOGSTREAM_ERROR (" CopyObject" , " user data passed is NULL " );
719
+ return ;
720
+ }
716
721
auto *userData = static_cast <S3CrtClient::CrtRequestCallbackUserData*>(user_data);
722
+
717
723
// call user callback and release user_data
718
724
S3Crt::Model::CopyObjectOutcome outcome (userData->s3CrtClient ->GenerateXmlOutcome (userData->response ));
725
+ // log into monitor
726
+ if (!outcome.IsSuccess ())
727
+ {
728
+ userData->asyncCallerContext ->GetMonitorContext ().OnRequestFailed (userData->request ,userData->response );
729
+ }
730
+ else
731
+ {
732
+ userData->asyncCallerContext ->GetMonitorContext ().OnRequestSucceeded (userData->request , userData->response );
733
+ }
719
734
userData->copyResponseHandler (userData->s3CrtClient , *(reinterpret_cast <const CopyObjectRequest*>(userData->originalRequest )), std::move (outcome), userData->asyncCallerContext );
720
735
721
736
Aws::Delete (userData);
@@ -782,6 +797,7 @@ void S3CrtClient::CopyObjectAsync(const CopyObjectRequest& request, const CopyOb
782
797
{
783
798
return handler (this , request, CopyObjectOutcome (Aws::Client::AWSError<S3CrtErrors>(S3CrtErrors::INTERNAL_FAILURE, " INTERNAL_FAILURE" , " Unable to create s3 meta request" , false )), handlerContext);
784
799
}
800
+ handlerContext->GetMonitorContext ().StartMonitorContext (Aws::String{" S3CrtClient" },request.GetServiceRequestName (), userData->request );
785
801
options.shutdown_callback = CopyObjectRequestShutdownCallback;
786
802
options.type = AWS_S3_META_REQUEST_TYPE_COPY_OBJECT;
787
803
struct aws_signing_config_aws signing_config_override = m_s3CrtSigningConfig;
@@ -852,13 +868,13 @@ CopyObjectOutcome S3CrtClient::CopyObject(const CopyObjectRequest& request) cons
852
868
[&]()-> CopyObjectOutcome {
853
869
Aws::Utils::Threading::Semaphore sem (0 , 1 );
854
870
CopyObjectOutcome res;
855
-
871
+ auto handlerContext = Aws::MakeShared<AsyncCallerContext>(ALLOCATION_TAG);
856
872
auto handler = CopyObjectResponseReceivedHandler{[&](const S3CrtClient*, const CopyObjectRequest&, const CopyObjectOutcome& outcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext> &) {
857
873
res = std::move (outcome);
858
874
sem.ReleaseAll ();
859
875
}};
860
876
861
- S3CrtClient::CopyObjectAsync (request, handler, nullptr );
877
+ S3CrtClient::CopyObjectAsync (request, handler, handlerContext );
862
878
sem.WaitOne ();
863
879
return res;
864
880
},
@@ -869,9 +885,24 @@ CopyObjectOutcome S3CrtClient::CopyObject(const CopyObjectRequest& request) cons
869
885
870
886
static void GetObjectRequestShutdownCallback (void *user_data)
871
887
{
888
+ if (!user_data)
889
+ {
890
+ AWS_LOGSTREAM_ERROR (" GetObject" , " user data passed is NULL " );
891
+ return ;
892
+ }
872
893
auto *userData = static_cast <S3CrtClient::CrtRequestCallbackUserData*>(user_data);
894
+
873
895
// call user callback and release user_data
874
896
S3Crt::Model::GetObjectOutcome outcome (userData->s3CrtClient ->GenerateStreamOutcome (userData->response ));
897
+ // log into monitor
898
+ if (!outcome.IsSuccess ())
899
+ {
900
+ userData->asyncCallerContext ->GetMonitorContext ().OnRequestFailed (userData->request ,userData->response );
901
+ }
902
+ else
903
+ {
904
+ userData->asyncCallerContext ->GetMonitorContext ().OnRequestSucceeded (userData->request , userData->response );
905
+ }
875
906
userData->getResponseHandler (userData->s3CrtClient , *(reinterpret_cast <const GetObjectRequest*>(userData->originalRequest )), std::move (outcome), userData->asyncCallerContext );
876
907
877
908
Aws::Delete (userData);
@@ -933,6 +964,7 @@ void S3CrtClient::GetObjectAsync(const GetObjectRequest& request, const GetObjec
933
964
{
934
965
return handler (this , request, GetObjectOutcome (Aws::Client::AWSError<S3CrtErrors>(S3CrtErrors::INVALID_PARAMETER_VALUE, " INVALID_PARAMETER_VALUE" , " Output stream in bad state" , false )), handlerContext);
935
966
}
967
+ handlerContext->GetMonitorContext ().StartMonitorContext (Aws::String{" S3CrtClient" },request.GetServiceRequestName (), userData->request );
936
968
options.shutdown_callback = GetObjectRequestShutdownCallback;
937
969
options.type = AWS_S3_META_REQUEST_TYPE_GET_OBJECT;
938
970
struct aws_signing_config_aws signing_config_override = m_s3CrtSigningConfig;
@@ -972,13 +1004,13 @@ GetObjectOutcome S3CrtClient::GetObject(const GetObjectRequest& request) const
972
1004
[&]()-> GetObjectOutcome {
973
1005
Aws::Utils::Threading::Semaphore sem (0 , 1 );
974
1006
GetObjectOutcome res;
975
-
1007
+ auto handlerContext = Aws::MakeShared<AsyncCallerContext>(ALLOCATION_TAG);
976
1008
auto handler = GetObjectResponseReceivedHandler{[&](const S3CrtClient*, const GetObjectRequest&, GetObjectOutcome outcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext> &) {
977
1009
res = std::move (outcome);
978
1010
sem.ReleaseAll ();
979
1011
}};
980
1012
981
- S3CrtClient::GetObjectAsync (request, handler, nullptr );
1013
+ S3CrtClient::GetObjectAsync (request, handler, handlerContext );
982
1014
sem.WaitOne ();
983
1015
return res;
984
1016
},
@@ -989,9 +1021,24 @@ GetObjectOutcome S3CrtClient::GetObject(const GetObjectRequest& request) const
989
1021
990
1022
static void PutObjectRequestShutdownCallback (void *user_data)
991
1023
{
1024
+ if (!user_data)
1025
+ {
1026
+ AWS_LOGSTREAM_ERROR (" PutObject" , " user data passed is NULL " );
1027
+ return ;
1028
+ }
992
1029
auto *userData = static_cast <S3CrtClient::CrtRequestCallbackUserData*>(user_data);
1030
+
993
1031
// call user callback and release user_data
994
1032
S3Crt::Model::PutObjectOutcome outcome (userData->s3CrtClient ->GenerateXmlOutcome (userData->response ));
1033
+ // log into monitor
1034
+ if (!outcome.IsSuccess ())
1035
+ {
1036
+ userData->asyncCallerContext ->GetMonitorContext ().OnRequestFailed (userData->request ,userData->response );
1037
+ }
1038
+ else
1039
+ {
1040
+ userData->asyncCallerContext ->GetMonitorContext ().OnRequestSucceeded (userData->request , userData->response );
1041
+ }
995
1042
userData->putResponseHandler (userData->s3CrtClient , *(reinterpret_cast <const PutObjectRequest*>(userData->originalRequest )), std::move (outcome), userData->asyncCallerContext );
996
1043
997
1044
Aws::Delete (userData);
@@ -1057,6 +1104,7 @@ void S3CrtClient::PutObjectAsync(const PutObjectRequest& request, const PutObjec
1057
1104
{
1058
1105
return handler (this , request, PutObjectOutcome (Aws::Client::AWSError<S3CrtErrors>(S3CrtErrors::INVALID_PARAMETER_VALUE, " INVALID_PARAMETER_VALUE" , " Input stream in bad state" , false )), handlerContext);
1059
1106
}
1107
+ handlerContext->GetMonitorContext ().StartMonitorContext (Aws::String{" S3CrtClient" },request.GetServiceRequestName (), userData->request );
1060
1108
options.shutdown_callback = PutObjectRequestShutdownCallback;
1061
1109
options.type = AWS_S3_META_REQUEST_TYPE_PUT_OBJECT;
1062
1110
struct aws_signing_config_aws signing_config_override = m_s3CrtSigningConfig;
@@ -1127,13 +1175,13 @@ PutObjectOutcome S3CrtClient::PutObject(const PutObjectRequest& request) const
1127
1175
[&]()-> PutObjectOutcome {
1128
1176
Aws::Utils::Threading::Semaphore sem (0 , 1 );
1129
1177
PutObjectOutcome res;
1130
-
1178
+ auto handlerContext = Aws::MakeShared<AsyncCallerContext>(ALLOCATION_TAG);
1131
1179
auto handler = PutObjectResponseReceivedHandler{[&](const S3CrtClient*, const PutObjectRequest&, const PutObjectOutcome& outcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext> &) {
1132
1180
res = std::move (outcome);
1133
1181
sem.ReleaseAll ();
1134
1182
}};
1135
1183
1136
- S3CrtClient::PutObjectAsync (request, handler, nullptr );
1184
+ S3CrtClient::PutObjectAsync (request, handler, handlerContext );
1137
1185
sem.WaitOne ();
1138
1186
return res;
1139
1187
},
0 commit comments