mirror of
https://github.com/minio/minio-cpp.git
synced 2025-04-18 08:24:00 +03:00
Add support to progress function to abort operation (#128)
Signed-off-by: Bala.FA <bala@minio.io>
This commit is contained in:
parent
0eb2a19df1
commit
d3d828eddc
@ -37,7 +37,7 @@ int main() {
|
||||
<< std::endl;
|
||||
return true;
|
||||
};
|
||||
args.progressfunc = [](minio::http::ProgressFunctionArgs args) -> void {
|
||||
args.progressfunc = [](minio::http::ProgressFunctionArgs args) -> bool {
|
||||
if (args.download_speed > 0) {
|
||||
std::cout << "downloaded speed: " << (long)args.download_speed << " bps"
|
||||
<< std::endl;
|
||||
@ -45,6 +45,7 @@ int main() {
|
||||
std::cout << "downloaded: " << (long)args.downloaded_bytes << " bytes of "
|
||||
<< (long)args.download_total_bytes << " bytes" << std::endl;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
// Call get object.
|
||||
|
@ -43,7 +43,7 @@ int main() {
|
||||
minio::s3::PutObjectArgs args(file, 47615315, 15728640);
|
||||
args.bucket = "my-bucket";
|
||||
args.object = "my-object";
|
||||
args.progressfunc = [](minio::http::ProgressFunctionArgs args) -> void {
|
||||
args.progressfunc = [](minio::http::ProgressFunctionArgs args) -> bool {
|
||||
if (args.upload_speed > 0) {
|
||||
std::cout << "uploaded speed: " << (long)args.upload_speed << " bps"
|
||||
<< std::endl;
|
||||
@ -51,6 +51,7 @@ int main() {
|
||||
std::cout << "uploaded: " << (long)args.uploaded_bytes << " bytes of "
|
||||
<< (long)args.upload_total_bytes << " bytes" << std::endl;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
// Call put object.
|
||||
|
@ -69,7 +69,7 @@ using DataFunction = std::function<bool(DataFunctionArgs)>;
|
||||
|
||||
struct ProgressFunctionArgs;
|
||||
|
||||
using ProgressFunction = std::function<void(ProgressFunctionArgs)>;
|
||||
using ProgressFunction = std::function<bool(ProgressFunctionArgs)>;
|
||||
|
||||
struct Response;
|
||||
|
||||
|
@ -484,21 +484,21 @@ PutObjectResponse Client::PutObject(PutObjectArgs args, std::string& upload_id,
|
||||
[&object_size = object_size, &uploaded_bytes = uploaded_bytes,
|
||||
&upload_speed = upload_speed, &progressfunc = args.progressfunc,
|
||||
&progress_userdata = args.progress_userdata](
|
||||
http::ProgressFunctionArgs args) -> void {
|
||||
http::ProgressFunctionArgs args) -> bool {
|
||||
if (args.upload_speed > 0) {
|
||||
if (upload_speed == -1) {
|
||||
upload_speed = args.upload_speed;
|
||||
} else {
|
||||
upload_speed = (upload_speed + args.upload_speed) / 2;
|
||||
}
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
http::ProgressFunctionArgs actual_args;
|
||||
actual_args.upload_total_bytes = static_cast<double>(object_size);
|
||||
actual_args.uploaded_bytes = uploaded_bytes + args.uploaded_bytes;
|
||||
actual_args.userdata = progress_userdata;
|
||||
progressfunc(actual_args);
|
||||
return progressfunc(actual_args);
|
||||
};
|
||||
}
|
||||
if (args.sse != nullptr) {
|
||||
@ -514,7 +514,10 @@ PutObjectResponse Client::PutObject(PutObjectArgs args, std::string& upload_id,
|
||||
actual_args.upload_total_bytes = static_cast<double>(object_size);
|
||||
actual_args.uploaded_bytes = uploaded_bytes;
|
||||
actual_args.userdata = args.progress_userdata;
|
||||
args.progressfunc(actual_args);
|
||||
if (!args.progressfunc(actual_args)) {
|
||||
return UploadPartResponse(
|
||||
error::Error("aborted by progress function"));
|
||||
}
|
||||
}
|
||||
parts.push_back(Part(part_number, std::move(resp.etag)));
|
||||
} else {
|
||||
@ -533,6 +536,7 @@ PutObjectResponse Client::PutObject(PutObjectArgs args, std::string& upload_id,
|
||||
http::ProgressFunctionArgs actual_args;
|
||||
actual_args.upload_speed = upload_speed;
|
||||
actual_args.userdata = args.progress_userdata;
|
||||
// ignore the return value as we completed the upload
|
||||
args.progressfunc(actual_args);
|
||||
}
|
||||
return PutObjectResponse(resp);
|
||||
@ -792,6 +796,8 @@ UploadObjectResponse Client::UploadObject(UploadObjectArgs args) {
|
||||
po_args.retention = std::move(args.retention);
|
||||
po_args.legal_hold = std::move(args.legal_hold);
|
||||
po_args.content_type = std::move(args.content_type);
|
||||
po_args.progressfunc = std::move(args.progressfunc);
|
||||
po_args.progress_userdata = std::move(args.progress_userdata);
|
||||
|
||||
PutObjectResponse resp = PutObject(std::move(po_args));
|
||||
file.close();
|
||||
|
@ -411,8 +411,10 @@ Response Request::execute() {
|
||||
args.upload_total_bytes = ultotal;
|
||||
args.uploaded_bytes = ulnow;
|
||||
args.userdata = progress_userdata;
|
||||
progressfunc(args);
|
||||
return CURL_PROGRESSFUNC_CONTINUE;
|
||||
if (progressfunc(args)) {
|
||||
return CURL_PROGRESSFUNC_CONTINUE;
|
||||
}
|
||||
return 1;
|
||||
};
|
||||
if (progressfunc != nullptr) {
|
||||
request.setOpt(new curlpp::options::NoProgress(false));
|
||||
|
Loading…
x
Reference in New Issue
Block a user