@@ -713,9 +713,24 @@ void S3CrtClient::InitCommonCrtRequestOption(CrtRequestCallbackUserData *userDat
713713
714714static void CopyObjectRequestShutdownCallback (void *user_data)
715715{
716+ if (!user_data)
717+ {
718+ AWS_LOGSTREAM_ERROR (" CopyObject" , " user data passed is NULL " );
719+ return ;
720+ }
716721 auto *userData = static_cast <S3CrtClient::CrtRequestCallbackUserData*>(user_data);
722+
717723 // call user callback and release user_data
718724 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+ }
719734 userData->copyResponseHandler (userData->s3CrtClient , *(reinterpret_cast <const CopyObjectRequest*>(userData->originalRequest )), std::move (outcome), userData->asyncCallerContext );
720735
721736 Aws::Delete (userData);
@@ -782,6 +797,7 @@ void S3CrtClient::CopyObjectAsync(const CopyObjectRequest& request, const CopyOb
782797 {
783798 return handler (this , request, CopyObjectOutcome (Aws::Client::AWSError<S3CrtErrors>(S3CrtErrors::INTERNAL_FAILURE, " INTERNAL_FAILURE" , " Unable to create s3 meta request" , false )), handlerContext);
784799 }
800+ handlerContext->GetMonitorContext ().StartMonitorContext (Aws::String{" S3CrtClient" },request.GetServiceRequestName (), userData->request );
785801 options.shutdown_callback = CopyObjectRequestShutdownCallback;
786802 options.type = AWS_S3_META_REQUEST_TYPE_COPY_OBJECT;
787803 struct aws_signing_config_aws signing_config_override = m_s3CrtSigningConfig;
@@ -852,13 +868,13 @@ CopyObjectOutcome S3CrtClient::CopyObject(const CopyObjectRequest& request) cons
852868 [&]()-> CopyObjectOutcome {
853869 Aws::Utils::Threading::Semaphore sem (0 , 1 );
854870 CopyObjectOutcome res;
855-
871+ auto handlerContext = Aws::MakeShared<AsyncCallerContext>(ALLOCATION_TAG);
856872 auto handler = CopyObjectResponseReceivedHandler{[&](const S3CrtClient*, const CopyObjectRequest&, const CopyObjectOutcome& outcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext> &) {
857873 res = std::move (outcome);
858874 sem.ReleaseAll ();
859875 }};
860876
861- S3CrtClient::CopyObjectAsync (request, handler, nullptr );
877+ S3CrtClient::CopyObjectAsync (request, handler, handlerContext );
862878 sem.WaitOne ();
863879 return res;
864880 },
@@ -869,9 +885,24 @@ CopyObjectOutcome S3CrtClient::CopyObject(const CopyObjectRequest& request) cons
869885
870886static void GetObjectRequestShutdownCallback (void *user_data)
871887{
888+ if (!user_data)
889+ {
890+ AWS_LOGSTREAM_ERROR (" GetObject" , " user data passed is NULL " );
891+ return ;
892+ }
872893 auto *userData = static_cast <S3CrtClient::CrtRequestCallbackUserData*>(user_data);
894+
873895 // call user callback and release user_data
874896 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+ }
875906 userData->getResponseHandler (userData->s3CrtClient , *(reinterpret_cast <const GetObjectRequest*>(userData->originalRequest )), std::move (outcome), userData->asyncCallerContext );
876907
877908 Aws::Delete (userData);
@@ -933,6 +964,7 @@ void S3CrtClient::GetObjectAsync(const GetObjectRequest& request, const GetObjec
933964 {
934965 return handler (this , request, GetObjectOutcome (Aws::Client::AWSError<S3CrtErrors>(S3CrtErrors::INVALID_PARAMETER_VALUE, " INVALID_PARAMETER_VALUE" , " Output stream in bad state" , false )), handlerContext);
935966 }
967+ handlerContext->GetMonitorContext ().StartMonitorContext (Aws::String{" S3CrtClient" },request.GetServiceRequestName (), userData->request );
936968 options.shutdown_callback = GetObjectRequestShutdownCallback;
937969 options.type = AWS_S3_META_REQUEST_TYPE_GET_OBJECT;
938970 struct aws_signing_config_aws signing_config_override = m_s3CrtSigningConfig;
@@ -972,13 +1004,13 @@ GetObjectOutcome S3CrtClient::GetObject(const GetObjectRequest& request) const
9721004 [&]()-> GetObjectOutcome {
9731005 Aws::Utils::Threading::Semaphore sem (0 , 1 );
9741006 GetObjectOutcome res;
975-
1007+ auto handlerContext = Aws::MakeShared<AsyncCallerContext>(ALLOCATION_TAG);
9761008 auto handler = GetObjectResponseReceivedHandler{[&](const S3CrtClient*, const GetObjectRequest&, GetObjectOutcome outcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext> &) {
9771009 res = std::move (outcome);
9781010 sem.ReleaseAll ();
9791011 }};
9801012
981- S3CrtClient::GetObjectAsync (request, handler, nullptr );
1013+ S3CrtClient::GetObjectAsync (request, handler, handlerContext );
9821014 sem.WaitOne ();
9831015 return res;
9841016 },
@@ -989,9 +1021,24 @@ GetObjectOutcome S3CrtClient::GetObject(const GetObjectRequest& request) const
9891021
9901022static void PutObjectRequestShutdownCallback (void *user_data)
9911023{
1024+ if (!user_data)
1025+ {
1026+ AWS_LOGSTREAM_ERROR (" PutObject" , " user data passed is NULL " );
1027+ return ;
1028+ }
9921029 auto *userData = static_cast <S3CrtClient::CrtRequestCallbackUserData*>(user_data);
1030+
9931031 // call user callback and release user_data
9941032 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+ }
9951042 userData->putResponseHandler (userData->s3CrtClient , *(reinterpret_cast <const PutObjectRequest*>(userData->originalRequest )), std::move (outcome), userData->asyncCallerContext );
9961043
9971044 Aws::Delete (userData);
@@ -1057,6 +1104,7 @@ void S3CrtClient::PutObjectAsync(const PutObjectRequest& request, const PutObjec
10571104 {
10581105 return handler (this , request, PutObjectOutcome (Aws::Client::AWSError<S3CrtErrors>(S3CrtErrors::INVALID_PARAMETER_VALUE, " INVALID_PARAMETER_VALUE" , " Input stream in bad state" , false )), handlerContext);
10591106 }
1107+ handlerContext->GetMonitorContext ().StartMonitorContext (Aws::String{" S3CrtClient" },request.GetServiceRequestName (), userData->request );
10601108 options.shutdown_callback = PutObjectRequestShutdownCallback;
10611109 options.type = AWS_S3_META_REQUEST_TYPE_PUT_OBJECT;
10621110 struct aws_signing_config_aws signing_config_override = m_s3CrtSigningConfig;
@@ -1127,13 +1175,13 @@ PutObjectOutcome S3CrtClient::PutObject(const PutObjectRequest& request) const
11271175 [&]()-> PutObjectOutcome {
11281176 Aws::Utils::Threading::Semaphore sem (0 , 1 );
11291177 PutObjectOutcome res;
1130-
1178+ auto handlerContext = Aws::MakeShared<AsyncCallerContext>(ALLOCATION_TAG);
11311179 auto handler = PutObjectResponseReceivedHandler{[&](const S3CrtClient*, const PutObjectRequest&, const PutObjectOutcome& outcome, const std::shared_ptr<const Aws::Client::AsyncCallerContext> &) {
11321180 res = std::move (outcome);
11331181 sem.ReleaseAll ();
11341182 }};
11351183
1136- S3CrtClient::PutObjectAsync (request, handler, nullptr );
1184+ S3CrtClient::PutObjectAsync (request, handler, handlerContext );
11371185 sem.WaitOne ();
11381186 return res;
11391187 },
0 commit comments