From: Casey Bodley Date: Wed, 17 Apr 2019 21:03:54 +0000 (-0400) Subject: rgw: add optional_yield to PutObjProcessors X-Git-Tag: v15.1.0~2838^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4259c3e334e37125b0a5a4b80a87d4dd52fea26b;p=ceph.git rgw: add optional_yield to PutObjProcessors Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 4a28ec6cf031..e69da2658ef3 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -1468,7 +1468,7 @@ namespace rgw { &s->dest_placement, s->bucket_owner.get_id(), *static_cast(s->obj_ctx), - obj, olh_epoch, s->req_id, this); + obj, olh_epoch, s->req_id, this, s->yield); op_ret = processor->prepare(); if (op_ret < 0) { diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 51ec087d344b..65f8ce159b1f 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -3664,7 +3664,8 @@ void RGWPutObj::execute() processor.emplace( &*aio, store, s->bucket_info, pdest_placement, s->owner.get_id(), obj_ctx, obj, - multipart_upload_id, multipart_part_num, multipart_part_str, this); + multipart_upload_id, multipart_part_num, multipart_part_str, + this, s->yield); } else if(append) { if (s->bucket_info.versioned()) { op_ret = -ERR_INVALID_BUCKET_STATE; @@ -3673,7 +3674,7 @@ void RGWPutObj::execute() pdest_placement = &s->dest_placement; processor.emplace( &*aio, store, s->bucket_info, pdest_placement, s->bucket_owner.get_id(),obj_ctx, obj, - s->req_id, position, &cur_accounted_size, this); + s->req_id, position, &cur_accounted_size, this, s->yield); } else { if (s->bucket_info.versioning_enabled()) { if (!version_id.empty()) { @@ -3686,7 +3687,8 @@ void RGWPutObj::execute() pdest_placement = &s->dest_placement; processor.emplace( &*aio, store, s->bucket_info, pdest_placement, - s->bucket_owner.get_id(), obj_ctx, obj, olh_epoch, s->req_id, this); + s->bucket_owner.get_id(), obj_ctx, obj, olh_epoch, + s->req_id, this, s->yield); } op_ret = processor->prepare(); @@ -4008,7 +4010,7 @@ void RGWPostObj::execute() &s->dest_placement, s->bucket_owner.get_id(), *static_cast(s->obj_ctx), - obj, 0, s->req_id, this); + obj, 0, s->req_id, this, s->yield); op_ret = processor.prepare(); if (op_ret < 0) { return; @@ -6752,7 +6754,7 @@ int RGWBulkUploadOp::handle_file(const boost::string_ref path, using namespace rgw::putobj; AtomicObjectProcessor processor(&*aio, store, binfo, &s->dest_placement, bowner.get_id(), - obj_ctx, obj, 0, s->req_id, this); + obj_ctx, obj, 0, s->req_id, this, s->yield); op_ret = processor.prepare(); if (op_ret < 0) { diff --git a/src/rgw/rgw_putobj_processor.h b/src/rgw/rgw_putobj_processor.h index 9db6b768f4c0..b202f74fb440 100644 --- a/src/rgw/rgw_putobj_processor.h +++ b/src/rgw/rgw_putobj_processor.h @@ -84,12 +84,14 @@ class RadosWriter : public DataProcessor { RGWSI_RADOS::Obj stripe_obj; // current stripe object RawObjSet written; // set of written objects for deletion const DoutPrefixProvider *dpp; + optional_yield y; public: RadosWriter(Aio *aio, RGWRados *store, const RGWBucketInfo& bucket_info, - RGWObjectCtx& obj_ctx, const rgw_obj& head_obj, const DoutPrefixProvider *dpp) + RGWObjectCtx& obj_ctx, const rgw_obj& head_obj, + const DoutPrefixProvider *dpp, optional_yield y) : aio(aio), store(store), bucket_info(bucket_info), - obj_ctx(obj_ctx), head_obj(head_obj), dpp(dpp) + obj_ctx(obj_ctx), head_obj(head_obj), dpp(dpp), y(y) {} ~RadosWriter(); @@ -137,12 +139,12 @@ class ManifestObjectProcessor : public HeadObjectProcessor, const rgw_placement_rule *ptail_placement_rule, const rgw_user& owner, RGWObjectCtx& obj_ctx, const rgw_obj& head_obj, - const DoutPrefixProvider* dpp) + const DoutPrefixProvider* dpp, optional_yield y) : HeadObjectProcessor(0), store(store), bucket_info(bucket_info), owner(owner), obj_ctx(obj_ctx), head_obj(head_obj), - writer(aio, store, bucket_info, obj_ctx, head_obj, dpp), + writer(aio, store, bucket_info, obj_ctx, head_obj, dpp, y), chunk(&writer, 0), stripe(&chunk, this, 0), dpp(dpp) { if (ptail_placement_rule) { tail_placement_rule = *ptail_placement_rule; @@ -172,9 +174,9 @@ class AtomicObjectProcessor : public ManifestObjectProcessor { RGWObjectCtx& obj_ctx, const rgw_obj& head_obj, std::optional olh_epoch, const std::string& unique_tag, - const DoutPrefixProvider *dpp) + const DoutPrefixProvider *dpp, optional_yield y) : ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule, - owner, obj_ctx, head_obj, dpp), + owner, obj_ctx, head_obj, dpp, y), olh_epoch(olh_epoch), unique_tag(unique_tag) {} @@ -215,9 +217,9 @@ class MultipartObjectProcessor : public ManifestObjectProcessor { const rgw_obj& head_obj, const std::string& upload_id, uint64_t part_num, const std::string& part_num_str, - const DoutPrefixProvider *dpp) + const DoutPrefixProvider *dpp, optional_yield y) : ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule, - owner, obj_ctx, head_obj, dpp), + owner, obj_ctx, head_obj, dpp, y), target_obj(head_obj), upload_id(upload_id), part_num(part_num), part_num_str(part_num_str), mp(head_obj.key.name, upload_id) @@ -253,8 +255,11 @@ class MultipartObjectProcessor : public ManifestObjectProcessor { AppendObjectProcessor(Aio *aio, RGWRados *store, const RGWBucketInfo& bucket_info, const rgw_placement_rule *ptail_placement_rule, const rgw_user& owner, RGWObjectCtx& obj_ctx,const rgw_obj& head_obj, - const std::string& unique_tag, uint64_t position, uint64_t *cur_accounted_size, const DoutPrefixProvider *dpp) - : ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule, owner, obj_ctx, head_obj, dpp), + const std::string& unique_tag, uint64_t position, + uint64_t *cur_accounted_size, + const DoutPrefixProvider *dpp, optional_yield y) + : ManifestObjectProcessor(aio, store, bucket_info, ptail_placement_rule, + owner, obj_ctx, head_obj, dpp, y), position(position), cur_size(0), cur_accounted_size(cur_accounted_size), unique_tag(unique_tag), cur_manifest(nullptr) {} diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index dc51b2a20324..c41d3e3da60a 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -4282,7 +4282,7 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx, using namespace rgw::putobj; const rgw_placement_rule *ptail_rule = (dest_placement_rule ? &(*dest_placement_rule) : nullptr); AtomicObjectProcessor processor(&aio, this, dest_bucket_info, ptail_rule, user_id, - obj_ctx, dest_obj, olh_epoch, tag, dpp); + obj_ctx, dest_obj, olh_epoch, tag, dpp, null_yield); RGWRESTConn *conn; auto& zone_conn_map = svc.zone->get_zone_conn_map(); auto& zonegroup_conn_map = svc.zone->get_zonegroup_conn_map(); @@ -4860,7 +4860,7 @@ int RGWRados::copy_obj_data(RGWObjectCtx& obj_ctx, using namespace rgw::putobj; AtomicObjectProcessor processor(&aio, this, dest_bucket_info, &dest_placement, dest_bucket_info.owner, obj_ctx, - dest_obj, olh_epoch, tag, dpp); + dest_obj, olh_epoch, tag, dpp, null_yield); int ret = processor.prepare(); if (ret < 0) return ret; diff --git a/src/rgw/rgw_tools.cc b/src/rgw/rgw_tools.cc index 4c719ee41154..1fb18aee8aba 100644 --- a/src/rgw/rgw_tools.cc +++ b/src/rgw/rgw_tools.cc @@ -439,10 +439,9 @@ int RGWDataAccess::Object::put(bufferlist& data, string req_id = store->svc.zone_utils->unique_id(store->get_new_req_id()); using namespace rgw::putobj; - AtomicObjectProcessor processor(&aio, store, bucket_info, - nullptr, - owner.get_id(), - obj_ctx, obj, olh_epoch, req_id, dpp); + AtomicObjectProcessor processor(&aio, store, bucket_info, nullptr, + owner.get_id(), obj_ctx, obj, olh_epoch, + req_id, dpp, null_yield); int ret = processor.prepare(); if (ret < 0)