-
Notifications
You must be signed in to change notification settings - Fork 5.8k
Closed
Description
Expected behavior
我希望使用aws sdk for c++的PutObject函数上传一个指定了绝对路径的文件(localfile),这个上传函数被用aarch64编译后放在一个64位的控制器上运行。
Actual behavior
程序运行到上传函数时会输出堆栈信息,程序并未挂掉因此未产生core文件,具体堆栈信息贴在下方。
请注意我是参考的示例代码来写的上传函数,示例代码链接(https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/cpp/example_code/s3/put_object.cpp)
Steps to reproduce
1.仅仅运行代码
2.
3.Logs / stacktrace (if applicable)
node: malloc.c:2379: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
*** Aborted at 1685064095 (unix time) try "date -d @1685064095" if you are using GNU date ***
PC: @ 0x0 (unknown)
*** SIGABRT (@0x70a) received by PID 1802 (TID 0xffff40787a70) from PID 1802; stack trace: ***
@ 0xffffa0c2b328 google::(anonymous namespace)::FailureSignalHandler()
@ 0xffffa20305b8 ([vdso]+0x5b7)
@ 0xffffa0423330 gsignal
@ 0xffffa0410b54 abort
@ 0xffffa0462130 (unknown)
@ 0xffffa04645b8 (unknown)
@ 0xffffa0465398 (unknown)
@ 0xffffa0466324 __libc_malloc
@ 0xffffa071d8cc operator new()
@ 0xffff6e16a3f0 Aws::Utils::StringUtils::RTrim()
@ 0xffff6e16a534 Aws::Utils::StringUtils::Trim()
@ 0xffff6e0f6bd8 Aws::Http::Standard::StandardHttpRequest::SetHeaderValue()
@ 0xffff6e11905c Aws::Client::AWSAuthV4Signer::SignRequest()
@ 0xffff6e107614 Aws::Client::AWSClient::AttemptOneRequest()
@ 0xffff6e10ea64 Aws::Client::AWSClient::AttemptExhaustively()
@ 0xffff6e110ac0 Aws::Client::AWSXMLClient::MakeRequest()
@ 0xffff6e111000 Aws::Client::AWSXMLClient::MakeRequest()
@ 0xffff61be65d8 Aws::S3::S3Client::PutObject()
@ 0xffff94683130 haomo::data_collect::AwsS3Operate::uploadFile()
@ 0xffff9c24d4f8 _ZNSt17_Function_handlerIFSt10unique_ptrINSt13__future_base12_Result_baseENS2_8_DeleterEEvENS1_12_Task_setterIS0_INS1_7_ResultIbEES3_EZNS1_11_Task_stateISt5_BindIFSB_IFMN5haomo12data_collect12AwsS3OperateEFbNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESK_SK_SK_RSt10shared_ptrINSC_3v2x3V2XEEbEPSE_SK_SK_SK_SK_St17reference_wrapperISO_EbEEvEESaIiEFbvEE6_M_runEvEUlvE_bEEE9_M_invokeERKSt9_Any_data
@ 0xffffa1f00674 std::__future_base::_State_baseV2::_M_do_set()
@ 0xffffa0fafc50 __pthread_once_slow
上传函数如下:
bool AwsS3Operate::uploadFile(std::string viaSTS, std::string bucketName, std::string objectName, std::string localFile, std::shared_ptr<haomo::v2x::V2X>& collector_v2x, bool continue_upload) {
// LocalFilename由本地文件路径加文件名包括后缀组成
MLOG(dtcl, ERROR) << "upload file path is " << localFile;
bool result = true;
if(!exists_file(localFile)) {
MLOG(dtcl, ERROR) << "the file is not exist " << localFile;
result = false;
}else{
// 初始化AWS客户端
Aws::Client::ClientConfiguration clientConfig;
// clientConfig.useDualStack = true;
clientConfig.region = "eu-central-1";
clientConfig.endpointOverride = "s3.dualstack.eu-central-1.amazonaws.com";
Aws::Auth::AWSCredentials credentials(m_accessKeyId, m_accessKeySecret, m_security_token);
Aws::S3::S3Client s3_client(credentials, Aws::MakeShared<Aws::S3::Endpoint::S3EndpointProvider>(""), clientConfig);
Aws::S3::Model::PutObjectRequest request;
request.SetBucket(bucketName);
request.SetKey(objectName);
std::shared_ptr<Aws::IOStream> inputData = Aws::MakeShared<Aws::FStream>("",
localFile.c_str(),
std::ios_base::in | std::ios_base::binary);
if (!*inputData) {
MLOG(dtcl, ERROR) << "Error unable to read file " << localFile;
return false;
}
request.SetBody(inputData);
if (viaSTS == "sts") {
auto put_object_outcome = s3_client.PutObject(request);
// 异常处理
if (!put_object_outcome.IsSuccess()) {
MLOG(dtcl, ERROR) << "PutObject fail: " << objectName << ", message: " << put_object_outcome.GetError().GetMessage();
}
}
return result;
}Which SDK were you using?
C++
Which OS were you using?
Linux
SDK version
maybe 1.11.66, more or less
OS version
cat /etc/os-release: NAME=Buildroot VERSION=-g73ffddb4 ID=buildroot VERSION_ID=2020.11.2 PRETTY_NAME="Buildroot 2020.11.2"
Metadata
Metadata
Assignees
Labels
No labels