Skip to content

Commit 0a9a3b5

Browse files
committed
Async
1 parent 36e5ffd commit 0a9a3b5

File tree

3 files changed

+77
-8
lines changed

3 files changed

+77
-8
lines changed

include/trsf/transfer_handler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ enum class TransferStatus {
7878
COMPLETED,
7979
// Operation either failed or was canceled and a user deleted the multi-part
8080
// upload .
81+
RETRY,
8182
ABORTED
8283
};
8384

src/cos_api.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,9 @@ SharedAsyncContext CosAPI::AsyncPutObject(const AsyncPutObjectReq& req) {
798798
TaskFunc fn = [=]() {
799799
PutObjectByFileResp resp;
800800
m_object_op.PutObject(req, &resp, handler);
801+
if(handler->GetStatus() == TransferStatus::RETRY){
802+
m_object_op.PutObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
803+
}
801804
};
802805
GetGlobalTaskManager().start(new AsyncTask(std::move(fn)));
803806
SharedAsyncContext context(new AsyncContext(handler));
@@ -811,6 +814,9 @@ SharedAsyncContext CosAPI::AsyncPutObject(const AsyncPutObjectReq& req, Poco::Ta
811814
TaskFunc fn = [=]() {
812815
PutObjectByFileResp resp;
813816
m_object_op.PutObject(req, &resp, handler);
817+
if(handler->GetStatus() == TransferStatus::RETRY){
818+
m_object_op.PutObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
819+
}
814820
};
815821
taskManager = &GetGlobalTaskManager();
816822
(*taskManager).start(new AsyncTask(std::move(fn)));
@@ -828,6 +834,9 @@ SharedAsyncContext CosAPI::AsyncPutObject(const AsyncPutObjectByStreamReq& req)
828834
TaskFunc fn = [=]() {
829835
PutObjectByStreamResp resp;
830836
m_object_op.PutObject(req, &resp, handler);
837+
if(handler->GetStatus() == TransferStatus::RETRY){
838+
m_object_op.PutObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
839+
}
831840
};
832841
GetGlobalTaskManager().start(new AsyncTask(std::move(fn)));
833842
SharedAsyncContext context(new AsyncContext(handler));
@@ -844,6 +853,9 @@ SharedAsyncContext CosAPI::AsyncPutObject(const AsyncPutObjectByStreamReq& req,
844853
TaskFunc fn = [=]() {
845854
PutObjectByStreamResp resp;
846855
m_object_op.PutObject(req, &resp, handler);
856+
if(handler->GetStatus() == TransferStatus::RETRY){
857+
m_object_op.PutObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
858+
}
847859
};
848860
taskManager = &GetGlobalTaskManager();
849861
(*taskManager).start(new AsyncTask(std::move(fn)));
@@ -859,6 +871,9 @@ SharedAsyncContext CosAPI::AsyncMultiPutObject(const AsyncMultiPutObjectReq& req
859871
TaskFunc fn = [=]() {
860872
MultiPutObjectResp resp;
861873
m_object_op.MultiUploadObject(req, &resp, handler);
874+
if(handler->GetStatus() == TransferStatus::RETRY){
875+
m_object_op.MultiUploadObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
876+
}
862877
};
863878
GetGlobalTaskManager().start(new AsyncTask(std::move(fn)));
864879
SharedAsyncContext context(new AsyncContext(handler));
@@ -872,6 +887,9 @@ SharedAsyncContext CosAPI::AsyncMultiPutObject(const AsyncMultiPutObjectReq& req
872887
TaskFunc fn = [=]() {
873888
MultiPutObjectResp resp;
874889
m_object_op.MultiUploadObject(req, &resp, handler);
890+
if(handler->GetStatus() == TransferStatus::RETRY){
891+
m_object_op.MultiUploadObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
892+
}
875893
};
876894
taskManager = &GetGlobalTaskManager();
877895
(*taskManager).start(new AsyncTask(std::move(fn)));
@@ -885,6 +903,9 @@ SharedAsyncContext CosAPI::AsyncGetObject(const AsyncGetObjectReq& req) {
885903
TaskFunc fn = [=]() {
886904
GetObjectByFileResp resp;
887905
m_object_op.GetObject(req, &resp, handler);
906+
if(handler->GetStatus() == TransferStatus::RETRY){
907+
m_object_op.GetObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
908+
}
888909
};
889910
GetGlobalTaskManager().start(new AsyncTask(std::move(fn)));
890911
SharedAsyncContext context(new AsyncContext(handler));
@@ -897,6 +918,9 @@ SharedAsyncContext CosAPI::AsyncGetObject(const AsyncGetObjectReq& req, Poco::Ta
897918
TaskFunc fn = [=]() {
898919
GetObjectByFileResp resp;
899920
m_object_op.GetObject(req, &resp, handler);
921+
if(handler->GetStatus() == TransferStatus::RETRY){
922+
m_object_op.GetObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
923+
}
900924
};
901925
taskManager = &GetGlobalTaskManager();
902926
(*taskManager).start(new AsyncTask(std::move(fn)));
@@ -910,6 +934,9 @@ SharedAsyncContext CosAPI::AsyncResumableGetObject(const AsyncGetObjectReq& req)
910934
TaskFunc fn = [=]() {
911935
GetObjectByFileResp resp;
912936
m_object_op.ResumableGetObject(req, &resp, handler);
937+
if(handler->GetStatus() == TransferStatus::RETRY){
938+
m_object_op.ResumableGetObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
939+
}
913940
};
914941
GetGlobalTaskManager().start(new AsyncTask(std::move(fn)));
915942
SharedAsyncContext context(new AsyncContext(handler));
@@ -922,6 +949,9 @@ SharedAsyncContext CosAPI::AsyncResumableGetObject(const AsyncGetObjectReq& req,
922949
TaskFunc fn = [=]() {
923950
GetObjectByFileResp resp;
924951
m_object_op.ResumableGetObject(req, &resp, handler);
952+
if(handler->GetStatus() == TransferStatus::RETRY){
953+
m_object_op.ResumableGetObject(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
954+
}
925955
};
926956
taskManager = &GetGlobalTaskManager();
927957
(*taskManager).start(new AsyncTask(std::move(fn)));
@@ -935,6 +965,9 @@ SharedAsyncContext CosAPI::AsyncMultiGetObject(const AsyncMultiGetObjectReq& req
935965
TaskFunc fn = [=]() {
936966
GetObjectByFileResp resp;
937967
m_object_op.MultiThreadDownload(req, &resp, handler);
968+
if(handler->GetStatus() == TransferStatus::RETRY){
969+
m_object_op.MultiThreadDownload(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
970+
}
938971
};
939972
GetGlobalTaskManager().start(new AsyncTask(std::move(fn)));
940973
SharedAsyncContext context(new AsyncContext(handler));
@@ -947,6 +980,9 @@ SharedAsyncContext CosAPI::AsyncMultiGetObject(const AsyncMultiGetObjectReq& req
947980
TaskFunc fn = [=]() {
948981
GetObjectByFileResp resp;
949982
m_object_op.MultiThreadDownload(req, &resp, handler);
983+
if(handler->GetStatus() == TransferStatus::RETRY){
984+
m_object_op.MultiThreadDownload(req, &resp, handler, COS_CHANGE_BACKUP_DOMAIN);
985+
}
950986
};
951987
taskManager = &GetGlobalTaskManager();
952988
(*taskManager).start(new AsyncTask(std::move(fn)));

src/op/object_op.cpp

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,11 @@ CosResult ObjectOp::GetObject(const GetObjectByFileReq& req,
372372
handler->UpdateStatus(TransferStatus::COMPLETED, result, resp->GetHeaders(),
373373
resp->GetBody());
374374
} else if (handler) {
375-
handler->UpdateStatus(TransferStatus::FAILED, result);
375+
if(!change_backup_domain && UseDefaultDomain()){
376+
handler->UpdateStatus(TransferStatus::RETRY, result);
377+
}else{
378+
handler->UpdateStatus(TransferStatus::FAILED, result);
379+
}
376380
}
377381
return result;
378382
}
@@ -440,7 +444,11 @@ CosResult ObjectOp::PutObject(const PutObjectByStreamReq& req,
440444
handler->UpdateStatus(TransferStatus::COMPLETED, result, resp->GetHeaders(),
441445
resp->GetBody());
442446
} else if(handler) {
443-
handler->UpdateStatus(TransferStatus::FAILED, result);
447+
if(!change_backup_domain && UseDefaultDomain()){
448+
handler->UpdateStatus(TransferStatus::RETRY, result);
449+
}else{
450+
handler->UpdateStatus(TransferStatus::FAILED, result);
451+
}
444452
}
445453
return result;
446454
}
@@ -508,7 +516,11 @@ CosResult ObjectOp::PutObject(const PutObjectByFileReq& req,
508516
handler->UpdateStatus(TransferStatus::COMPLETED, result, resp->GetHeaders(),
509517
resp->GetBody());
510518
} else if (handler) {
511-
handler->UpdateStatus(TransferStatus::FAILED, result);
519+
if(!change_backup_domain && UseDefaultDomain()){
520+
handler->UpdateStatus(TransferStatus::RETRY, result);
521+
}else{
522+
handler->UpdateStatus(TransferStatus::FAILED, result);
523+
}
512524
}
513525
return result;
514526
}
@@ -608,7 +620,11 @@ CosResult ObjectOp::MultiUploadObject(const PutObjectByFileReq& req,
608620
std::string err_msg = "Init multipart upload failed";
609621
SetResultAndLogError(init_result, err_msg);
610622
if (handler) {
611-
handler->UpdateStatus(TransferStatus::FAILED, init_result);
623+
if(!change_backup_domain && UseDefaultDomain()){
624+
handler->UpdateStatus(TransferStatus::RETRY, init_result);
625+
}else{
626+
handler->UpdateStatus(TransferStatus::FAILED, init_result);
627+
}
612628
}
613629
return init_result;
614630
}
@@ -662,7 +678,11 @@ CosResult ObjectOp::MultiUploadObject(const PutObjectByFileReq& req,
662678
// return abort_result;
663679
// }
664680
if (handler) {
665-
handler->UpdateStatus(TransferStatus::FAILED, upload_result);
681+
if(!change_backup_domain && UseDefaultDomain()){
682+
handler->UpdateStatus(TransferStatus::RETRY, upload_result);
683+
}else{
684+
handler->UpdateStatus(TransferStatus::FAILED, upload_result);
685+
}
666686
}
667687
return upload_result;
668688
}
@@ -711,7 +731,11 @@ CosResult ObjectOp::MultiUploadObject(const PutObjectByFileReq& req,
711731
}
712732
} else {
713733
if (handler) {
714-
handler->UpdateStatus(TransferStatus::FAILED);
734+
if(!change_backup_domain && UseDefaultDomain()){
735+
handler->UpdateStatus(TransferStatus::RETRY);
736+
}else{
737+
handler->UpdateStatus(TransferStatus::FAILED);
738+
}
715739
}
716740
}
717741

@@ -1163,7 +1187,11 @@ ObjectOp::MultiThreadDownload(const GetObjectByFileReq& req,
11631187
SetResultAndLogError(
11641188
head_result, "failed to get object length before downloading object.");
11651189
if (handler) {
1166-
handler->UpdateStatus(TransferStatus::FAILED, head_result);
1190+
if(!change_backup_domain && UseDefaultDomain()){
1191+
handler->UpdateStatus(TransferStatus::RETRY, head_result);
1192+
}else{
1193+
handler->UpdateStatus(TransferStatus::FAILED, head_result);
1194+
}
11671195
}
11681196
return head_result;
11691197
}
@@ -1909,7 +1937,11 @@ CosResult ObjectOp::ResumableGetObject(const GetObjectByFileReq& req,
19091937
SetResultAndLogError(
19101938
head_result, "failed to get object length before downloading object.");
19111939
if (handler) {
1912-
handler->UpdateStatus(TransferStatus::FAILED, head_result);
1940+
if(!change_backup_domain && UseDefaultDomain()){
1941+
handler->UpdateStatus(TransferStatus::RETRY, head_result);
1942+
}else{
1943+
handler->UpdateStatus(TransferStatus::FAILED, head_result);
1944+
}
19131945
}
19141946
return head_result;
19151947
}

0 commit comments

Comments
 (0)