class RGWPutObj : public RGWOp
class RGWPutObj_ObjStore : public RGWPutObj
class RGWPutObj_ObjStore_S3 : public RGWPutObj_ObjStore
RGWPutObj:: verify_permission -- - > RGWPutObj_ObjStore_S3:: get_params
RGWPutObj_ObjStore_S3:: get_params
map_qs_metadata ( s) ;
ret = create_s3_policy ( s, store, s3policy, s- > owner) ;
ret = store- > getRados ( ) - > get_bucket_info ( store- > svc ( ) , copy_source_tenant_name, copy_source_bucket_name,
copy_source_bucket_info, NULL , s- > yield, & src_attrs) ;
obj_tags = std:: make_unique< RGWObjTags> ( ) ;
obj_retention = new RGWObjectRetention ( obj_lock_mode_str, * date) ;
obj_legal_hold = new RGWObjectLegalHold ( obj_legal_hold_str) ;
append = ture position = strtoull ( pos_str. c_str ( ) , NULL , 10 ) ;
ret = torrent. get_params ( ) ;
torrent. set_info_name ( ( s- > object) . name) ;
supplied_md5_b64 = s- > info. env- > get ( "HTTP_CONTENT_MD5" ) ;
RGWPutObj:: execute
if ( supplied_md5_b64)
分片上传
RGWMPObj mp ( s- > object. name, multipart_upload_id) ;
op_ret = get_multipart_info ( store, s, mp. get_meta ( ) , nullptr , nullptr , & upload_info) ;
pdest_placement = & upload_info. dest_placement;
processor. emplace< MultipartObjectProcessor> ( & * aio, store, s- > bucket_info, pdest_placement, s- > owner. get_id ( ) , obj_ctx, obj,
multipart_upload_id, multipart_part_num, multipart_part_str, this , s- > yield) ;
append对象
pdest_placement = & s- > dest_placement;
processor. emplace< AppendObjectProcessor> ( & * aio, store, s- > bucket_info, pdest_placement,
s- > bucket_owner. get_id ( ) , obj_ctx, obj,
s- > req_id, position, & cur_accounted_size, this , s- > yield) ;
整体上传
pdest_placement = & s- > dest_placement;
processor. emplace< AtomicObjectProcessor> ( & * aio, store, s- > bucket_info, pdest_placement,
s- > bucket_owner. get_id ( ) , obj_ctx, obj, olh_epoch, s- > req_id, this , s- > yield) ;