in awsio/csrc/io/s3/s3_io.cpp [209:236]
size_t readS3TransferManager(uint64_t offset, size_t n, char *buffer) {
auto create_stream_fn = [&]() { // create stream lambda fn
return Aws::New<S3UnderlyingStream>(
"S3ReadStream",
Aws::New<Aws::Utils::Stream::PreallocatedStreamBuf>(
"S3ReadStream", reinterpret_cast<unsigned char *>(buffer),
n));
}; // This buffer is what we used to initialize streambuf and is in memory
std::shared_ptr<Aws::Transfer::TransferHandle> downloadHandle =
this->transfer_manager_.get()->DownloadFile(
this->bucket_name_.c_str(), this->object_name_.c_str(), offset,
n, create_stream_fn);
downloadHandle->WaitUntilFinished();
Aws::OFStream storeFile(object_name_.c_str(),
Aws::OFStream::out | Aws::OFStream::trunc);
if (downloadHandle->GetStatus() !=
Aws::Transfer::TransferStatus::COMPLETED) {
auto error = downloadHandle->GetLastError();
std::cout << "ERROR: " << error.GetExceptionName() << ": "
<< error.GetMessage() << std::endl;
return 0;
} else {
return downloadHandle->GetBytesTransferred();
}
}