From: Ali Maredia Date: Tue, 30 Apr 2019 21:19:29 +0000 (-0400) Subject: rgw: add optional_yield to RGWRados::get_bucket_instance_info() X-Git-Tag: v15.1.0~2602^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=949a2e0d6bbe7e0b46ed34b4e57210083aac95ce;p=ceph.git rgw: add optional_yield to RGWRados::get_bucket_instance_info() Signed-off-by: Ali Maredia --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 84c1c395d4d..0b9f65d54b3 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -1191,7 +1191,7 @@ static int init_bucket(const string& tenant_name, const string& bucket_name, con r = store->get_bucket_info(obj_ctx, tenant_name, bucket_name, bucket_info, nullptr, null_yield, pattrs); } else { string bucket_instance_id = bucket_name + ":" + bucket_id; - r = store->get_bucket_instance_info(obj_ctx, bucket_instance_id, bucket_info, NULL, pattrs); + r = store->get_bucket_instance_info(obj_ctx, bucket_instance_id, bucket_info, NULL, pattrs, null_yield); } if (r < 0) { cerr << "could not get bucket info for bucket=" << bucket_name << std::endl; diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index f0305cc30fa..7bb82ef7571 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -843,7 +843,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) RGWBucketInfo bucket_info; auto obj_ctx = store->svc.sysobj->init_obj_ctx(); - int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, &attrs); + int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, &attrs, null_yield); if (r < 0) { return r; } @@ -1051,7 +1051,7 @@ int RGWBucket::check_bad_index_multipart(RGWBucketAdminOpState& op_state, RGWBucketInfo bucket_info; auto obj_ctx = store->svc.sysobj->init_obj_ctx(); - int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, nullptr, nullptr); + int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, nullptr, nullptr, null_yield); if (r < 0) { ldout(store->ctx(), 0) << "ERROR: " << __func__ << "(): get_bucket_instance_info(bucket=" << bucket << ") returned r=" << r << dendl; return r; @@ -1719,7 +1719,7 @@ void get_stale_instances(RGWRados *store, const std::string& bucket_name, for (const auto& bucket_instance : lst){ RGWBucketInfo binfo; int r = store->get_bucket_instance_info(obj_ctx, bucket_instance, - binfo, nullptr,nullptr); + binfo, nullptr,nullptr, null_yield); if (r < 0){ // this can only happen if someone deletes us right when we're processing lderr(store->ctx()) << "Bucket instance is invalid: " << bucket_instance @@ -2756,7 +2756,7 @@ public: ceph::real_time orig_mtime; RGWBucketInfo old_bi; - ret = store->get_bucket_instance_info(obj_ctx, be.bucket, old_bi, &orig_mtime, &attrs_m); + ret = store->get_bucket_instance_info(obj_ctx, be.bucket, old_bi, &orig_mtime, &attrs_m, null_yield); if (ret < 0) { return ret; } @@ -2876,7 +2876,7 @@ public: real_time mtime; auto obj_ctx = store->svc.sysobj->init_obj_ctx(); - int ret = store->get_bucket_instance_info(obj_ctx, oid, bci.info, &mtime, &bci.attrs); + int ret = store->get_bucket_instance_info(obj_ctx, oid, bci.info, &mtime, &bci.attrs, null_yield); if (ret < 0) return ret; @@ -2900,7 +2900,7 @@ public: auto obj_ctx = store->svc.sysobj->init_obj_ctx(); int ret = store->get_bucket_instance_info(obj_ctx, entry, old_bci.info, - &orig_mtime, &old_bci.attrs); + &orig_mtime, &old_bci.attrs, null_yield); bool exists = (ret != -ENOENT); if (ret < 0 && exists) return ret; @@ -2992,7 +2992,7 @@ public: RGWBucketInfo info; auto obj_ctx = store->svc.sysobj->init_obj_ctx(); - int ret = store->get_bucket_instance_info(obj_ctx, entry, info, NULL, NULL); + int ret = store->get_bucket_instance_info(obj_ctx, entry, info, NULL, NULL, null_yield); if (ret < 0 && ret != -ENOENT) return ret; diff --git a/src/rgw/rgw_object_expirer_core.cc b/src/rgw/rgw_object_expirer_core.cc index b2e302baab6..93d240f6e84 100644 --- a/src/rgw/rgw_object_expirer_core.cc +++ b/src/rgw/rgw_object_expirer_core.cc @@ -58,7 +58,7 @@ int RGWObjectExpirer::init_bucket_info(const string& tenant_name, */ return store->get_bucket_info(obj_ctx, tenant_name, bucket_name, - bucket_info, nullptr, nullptr); + bucket_info, nullptr, null_yield, nullptr); } diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 74377667fe5..210f15d1e82 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -587,7 +587,7 @@ int rgw_build_bucket_policies(RGWRados* store, struct req_state* s) if (s->bucket_instance_id.empty()) { ret = store->get_bucket_info(obj_ctx, s->src_tenant_name, s->src_bucket_name, source_info, NULL, s->yield); } else { - ret = store->get_bucket_instance_info(obj_ctx, s->bucket_instance_id, source_info, NULL, NULL); + ret = store->get_bucket_instance_info(obj_ctx, s->bucket_instance_id, source_info, NULL, NULL, s->yield); } if (ret == 0) { string& zonegroup = source_info.zonegroup; @@ -612,7 +612,7 @@ int rgw_build_bucket_policies(RGWRados* store, struct req_state* s) } else { ret = store->get_bucket_instance_info(obj_ctx, s->bucket_instance_id, s->bucket_info, &s->bucket_mtime, - &s->bucket_attrs); + &s->bucket_attrs, s->yield); } if (ret < 0) { if (ret != -ENOENT) { @@ -4668,7 +4668,7 @@ int RGWCopyObj::verify_permission() op_ret = store->get_bucket_info(*s->sysobj_ctx, src_tenant_name, src_bucket_name, src_bucket_info, NULL, s->yield, &src_attrs); } else { /* will only happen in intra region sync where the source and dest bucket is the same */ - op_ret = store->get_bucket_instance_info(*s->sysobj_ctx, s->bucket_instance_id, src_bucket_info, NULL, &src_attrs); + op_ret = store->get_bucket_instance_info(*s->sysobj_ctx, s->bucket_instance_id, src_bucket_info, NULL, &src_attrs, s->yield); } if (op_ret < 0) { if (op_ret == -ENOENT) { diff --git a/src/rgw/rgw_orphan.cc b/src/rgw/rgw_orphan.cc index 29aa884ca54..1db4e2a06ae 100644 --- a/src/rgw/rgw_orphan.cc +++ b/src/rgw/rgw_orphan.cc @@ -526,7 +526,7 @@ int RGWOrphanSearch::build_linked_oids_for_bucket(const string& bucket_instance_ } RGWBucketInfo bucket_info; - ret = store->get_bucket_instance_info(sysobj_ctx, bucket_instance_id, bucket_info, nullptr, nullptr); + ret = store->get_bucket_instance_info(sysobj_ctx, bucket_instance_id, bucket_info, nullptr, nullptr, null_yield); if (ret < 0) { if (ret == -ENOENT) { /* probably raced with bucket removal */ diff --git a/src/rgw/rgw_quota.cc b/src/rgw/rgw_quota.cc index 052bc7a5be6..2f5e64a24e1 100644 --- a/src/rgw/rgw_quota.cc +++ b/src/rgw/rgw_quota.cc @@ -296,7 +296,7 @@ int BucketAsyncRefreshHandler::init_fetch() auto obj_ctx = store->svc.sysobj->init_obj_ctx(); - int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL); + int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL, null_yield); if (r < 0) { ldout(store->ctx(), 0) << "could not get bucket info for bucket=" << bucket << " r=" << r << dendl; return r; @@ -367,7 +367,7 @@ int RGWBucketStatsCache::fetch_stats_from_storage(const rgw_user& user, const rg RGWSysObjectCtx obj_ctx = store->svc.sysobj->init_obj_ctx(); - int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL); + int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL, null_yield); if (r < 0) { ldout(store->ctx(), 0) << "could not get bucket info for bucket=" << bucket << " r=" << r << dendl; return r; @@ -630,7 +630,7 @@ int RGWUserStatsCache::sync_bucket(const rgw_user& user, rgw_bucket& bucket) RGWSysObjectCtx obj_ctx = store->svc.sysobj->init_obj_ctx(); - int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL); + int r = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL, null_yield); if (r < 0) { ldout(store->ctx(), 0) << "could not get bucket info for bucket=" << bucket << " r=" << r << dendl; return r; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 0c88d48bd32..d630d4dc18b 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -2369,7 +2369,7 @@ int RGWRados::Bucket::update_bucket_id(const string& new_bucket_id) auto obj_ctx = store->svc.sysobj->init_obj_ctx(); bucket_info.objv_tracker.clear(); - int ret = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, nullptr, nullptr); + int ret = store->get_bucket_instance_info(obj_ctx, bucket, bucket_info, nullptr, nullptr, null_yield); if (ret < 0) { return ret; } @@ -3212,7 +3212,7 @@ int RGWRados::BucketShard::init(const rgw_bucket& _bucket, RGWBucketInfo* bucket_info_p = bucket_info_out ? bucket_info_out : &bucket_info; - int ret = store->get_bucket_instance_info(obj_ctx, bucket, *bucket_info_p, NULL, NULL); + int ret = store->get_bucket_instance_info(obj_ctx, bucket, *bucket_info_p, NULL, NULL, null_yield); if (ret < 0) { return ret; } @@ -3239,7 +3239,7 @@ int RGWRados::BucketShard::init(const rgw_bucket& _bucket, RGWBucketInfo bucket_info; RGWBucketInfo* bucket_info_p = bucket_info_out ? bucket_info_out : &bucket_info; - int ret = store->get_bucket_instance_info(obj_ctx, bucket, *bucket_info_p, NULL, NULL); + int ret = store->get_bucket_instance_info(obj_ctx, bucket, *bucket_info_p, NULL, NULL, null_yield); if (ret < 0) { return ret; } @@ -5052,7 +5052,7 @@ int RGWRados::set_bucket_owner(rgw_bucket& bucket, ACLOwner& owner) if (bucket.bucket_id.empty()) { r = get_bucket_info(obj_ctx, bucket.tenant, bucket.name, info, NULL, null_yield, &attrs); } else { - r = get_bucket_instance_info(obj_ctx, bucket, info, nullptr, &attrs); + r = get_bucket_instance_info(obj_ctx, bucket, info, nullptr, &attrs, null_yield); } if (r < 0) { ldout(cct, 0) << "NOTICE: get_bucket_info on bucket=" << bucket.name << " returned err=" << r << dendl; @@ -5634,7 +5634,7 @@ int RGWRados::delete_obj_index(const rgw_obj& obj, ceph::real_time mtime) auto obj_ctx = svc.sysobj->init_obj_ctx(); RGWBucketInfo bucket_info; - int ret = get_bucket_instance_info(obj_ctx, obj.bucket, bucket_info, NULL, NULL); + int ret = get_bucket_instance_info(obj_ctx, obj.bucket, bucket_info, NULL, NULL, null_yield); if (ret < 0) { ldout(cct, 0) << "ERROR: " << __func__ << "() get_bucket_instance_info(bucket=" << obj.bucket << ") returned ret=" << ret << dendl; return ret; @@ -8113,7 +8113,7 @@ void RGWRados::get_bucket_instance_obj(const rgw_bucket& bucket, rgw_raw_obj& ob } int RGWRados::get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const string& meta_key, RGWBucketInfo& info, - real_time *pmtime, map *pattrs) + real_time *pmtime, map *pattrs, optional_yield y) { size_t pos = meta_key.find(':'); if (pos == string::npos) { @@ -8126,7 +8126,7 @@ int RGWRados::get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const string& m } int RGWRados::get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const rgw_bucket& bucket, RGWBucketInfo& info, - real_time *pmtime, map *pattrs) + real_time *pmtime, map *pattrs, optional_yield y) { string oid; if (bucket.oid.empty()) { @@ -8442,7 +8442,7 @@ int RGWRados::update_containers_stats(map& m) vector headers; RGWBucketInfo bucket_info; - int ret = get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL); + int ret = get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL, null_yield); if (ret < 0) { return ret; } @@ -9696,7 +9696,7 @@ int RGWRados::cls_user_get_bucket_stats(const rgw_bucket& bucket, cls_user_bucke vector headers; RGWBucketInfo bucket_info; auto obj_ctx = svc.sysobj->init_obj_ctx(); - int ret = get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL); + int ret = get_bucket_instance_info(obj_ctx, bucket, bucket_info, NULL, NULL, null_yield); if (ret < 0) { return ret; } diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 09704da8301..010f196f919 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -2136,8 +2136,8 @@ public: RGWBucketEntryPoint& entry_point, RGWObjVersionTracker *objv_tracker, ceph::real_time *pmtime, map *pattrs, rgw_cache_entry_info *cache_info = NULL, boost::optional refresh_version = boost::none); - int get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const string& meta_key, RGWBucketInfo& info, ceph::real_time *pmtime, map *pattrs); - int get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const rgw_bucket& bucket, RGWBucketInfo& info, ceph::real_time *pmtime, map *pattrs); + int get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const string& meta_key, RGWBucketInfo& info, ceph::real_time *pmtime, map *pattrs, optional_yield y); + int get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const rgw_bucket& bucket, RGWBucketInfo& info, ceph::real_time *pmtime, map *pattrs, optional_yield y); int get_bucket_instance_from_oid(RGWSysObjectCtx& obj_ctx, const string& oid, RGWBucketInfo& info, ceph::real_time *pmtime, map *pattrs, rgw_cache_entry_info *cache_info = NULL, boost::optional refresh_version = boost::none); diff --git a/src/rgw/rgw_rest_log.cc b/src/rgw/rgw_rest_log.cc index ae44aff815a..145be15e759 100644 --- a/src/rgw/rgw_rest_log.cc +++ b/src/rgw/rgw_rest_log.cc @@ -392,13 +392,13 @@ void RGWOp_BILog_List::execute() { } if (!bucket_instance.empty()) { - http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL); + http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL, s->yield); if (http_ret < 0) { dout(5) << "could not get bucket instance info for bucket instance id=" << bucket_instance << dendl; return; } } else { /* !bucket_name.empty() */ - http_ret = store->get_bucket_info(*s->sysobj_ctx, tenant_name, bucket_name, bucket_info, NULL, null_yield, NULL); + http_ret = store->get_bucket_info(*s->sysobj_ctx, tenant_name, bucket_name, bucket_info, NULL, s->yield, NULL); if (http_ret < 0) { dout(5) << "could not get bucket info for bucket=" << bucket_name << dendl; return; @@ -483,13 +483,13 @@ void RGWOp_BILog_Info::execute() { } if (!bucket_instance.empty()) { - http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL); + http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL, s->yield); if (http_ret < 0) { dout(5) << "could not get bucket instance info for bucket instance id=" << bucket_instance << dendl; return; } } else { /* !bucket_name.empty() */ - http_ret = store->get_bucket_info(*s->sysobj_ctx, tenant_name, bucket_name, bucket_info, NULL, null_yield, NULL); + http_ret = store->get_bucket_info(*s->sysobj_ctx, tenant_name, bucket_name, bucket_info, NULL, s->yield, NULL); if (http_ret < 0) { dout(5) << "could not get bucket info for bucket=" << bucket_name << dendl; return; @@ -545,13 +545,13 @@ void RGWOp_BILog_Delete::execute() { } if (!bucket_instance.empty()) { - http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL); + http_ret = store->get_bucket_instance_info(*s->sysobj_ctx, bucket_instance, bucket_info, NULL, NULL, s->yield); if (http_ret < 0) { dout(5) << "could not get bucket instance info for bucket instance id=" << bucket_instance << dendl; return; } } else { /* !bucket_name.empty() */ - http_ret = store->get_bucket_info(*s->sysobj_ctx, tenant_name, bucket_name, bucket_info, NULL, null_yield, NULL); + http_ret = store->get_bucket_info(*s->sysobj_ctx, tenant_name, bucket_name, bucket_info, NULL, s->yield, NULL); if (http_ret < 0) { dout(5) << "could not get bucket info for bucket=" << bucket_name << dendl; return; @@ -911,7 +911,7 @@ void RGWOp_BILog_Status::execute() // read the bucket instance info for num_shards auto ctx = store->svc.sysobj->init_obj_ctx(); RGWBucketInfo info; - http_ret = store->get_bucket_instance_info(ctx, bucket, info, nullptr, nullptr); + http_ret = store->get_bucket_instance_info(ctx, bucket, info, nullptr, nullptr, s->yield); if (http_ret < 0) { ldout(s->cct, 4) << "failed to read bucket info: " << cpp_strerror(http_ret) << dendl; return;