in s3_common/src/s3_upload_manager.cpp [56:97]
Model::PutObjectOutcome S3UploadManager::UploadFiles(
const std::vector<UploadDescription> & upload_descriptions,
const std::string & bucket,
const boost::function<void (const std::vector<UploadDescription>&)>& feedback_callback)
{
{
std::lock_guard<std::recursive_mutex> lock(mutex_);
if (!IsAvailable()) {
return Model::PutObjectOutcome(Aws::Client::AWSError<S3Errors>(S3Errors::INVALID_ACTION,
"INVALID_ACTION", "UploadFiles aborted. UploadFiles request already active.", false));
}
manager_status_ = S3UploadManagerState::UPLOADING;
}
std::vector<UploadDescription> completed_uploads;
// If no files were provided then upload was successful.
Model::PutObjectResult default_result;
Model::PutObjectOutcome upload_outcome(default_result);
std::vector<UploadDescription> uploaded_files;
for (const auto& upload_description: upload_descriptions) {
{
std::lock_guard<std::recursive_mutex> lock(mutex_);
if(manager_status_ == S3UploadManagerState::CANCELLING) {
break;
}
}
auto file_path = upload_description.file_path;
auto object_key = upload_description.object_key;
//bucket comes from config
AWS_LOGSTREAM_INFO(__func__,"Uploading file " << file_path << " to " << object_key);
upload_outcome = s3_facade_->PutObject(file_path, bucket, object_key);
if (!upload_outcome.IsSuccess()) {
break;
}
completed_uploads.push_back(upload_description);
feedback_callback(completed_uploads);
}
{
std::lock_guard<std::recursive_mutex> lock(mutex_);
manager_status_ = S3UploadManagerState::AVAILABLE;
}
return upload_outcome;
}