AtomicObjectProcessor 执行入口

  • 类继承关系
class RGWPutObj : public RGWOp
class RGWPutObj_ObjStore : public RGWPutObj
class RGWPutObj_ObjStore_S3 : public RGWPutObj_ObjStore
  • 参数解析
// RGWHandler_REST_S3::init ---> copy_source 赋值操作等
RGWPutObj::verify_permission ---> RGWPutObj_ObjStore_S3::get_params

RGWPutObj_ObjStore_S3::get_params
  // 将 "x-amz-meta-" 从 s->info.args 写入 s->info.x_meta_map
  map_qs_metadata(s);
  ret = create_s3_policy(s, store, s3policy, s->owner);
  // 存在 copy_source
    // 解析 copy_source_tenant_name copy_source_bucket_name 并获取 copy_source_bucket_info 源通的信息
    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);
    // 如果存在copy_range 则 解析出 copy_source_range_fst copy_source_range_lst
  // obj_tags 存在tags的时候,解析
  obj_tags = std::make_unique<RGWObjTags>();
  // 对象锁 HTTP_X_AMZ_OBJECT_LOCK_MODE HTTP_X_AMZ_OBJECT_LOCK_RETAIN_UNTIL_DATE
  obj_retention = new RGWObjectRetention(obj_lock_mode_str, *date);
  // HTTP_X_AMZ_OBJECT_LOCK_LEGAL_HOLD
  obj_legal_hold = new RGWObjectLegalHold(obj_legal_hold_str);
  // 分片上传 multipart_upload_id multipart_part_str
  // append 对象
  append = ture position = strtoull(pos_str.c_str(), NULL, 10);
  // 如果使用了限流则
  ret = torrent.get_params();
  torrent.set_info_name((s->object).name);
  // 如果client提供了md5
  supplied_md5_b64 = s->info.env->get("HTTP_CONTENT_MD5");
  • 内存分配
RGWPutObj::execute
if (supplied_md5_b64)
  // 解码,将字符串转成十六进制
  // aio = YieldingAioThrottle ? BlockingAioThrottle 
  分片上传
  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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值