From: Daniel Gryniewicz Date: Tue, 4 Aug 2020 19:02:05 +0000 (-0400) Subject: Zipper - Remove more instances of getRados() from rgw_op.cc X-Git-Tag: v16.1.0~1144^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=95e64870df58a5202830741729c1aab545973273;p=ceph.git Zipper - Remove more instances of getRados() from rgw_op.cc - RGWGetObj and RGWPutObj Signed-off-by: Daniel Gryniewicz --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 47e1f346ac7..224a0de8775 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -2055,7 +2055,7 @@ int RGWGetObj::get_data_cb(bufferlist& bl, off_t bl_ofs, off_t bl_len) /* garbage collection related handling */ utime_t start_time = ceph_clock_now(); if (start_time > gc_invalidate_time) { - int r = store->getRados()->defer_gc(s->obj_ctx, s->bucket->get_info(), s->object->get_obj(), s->yield); + int r = store->defer_gc(s->obj_ctx, s->bucket.get(), s->object.get(), s->yield); if (r < 0) { ldpp_dout(this, 0) << "WARNING: could not defer gc entry for obj" << dendl; } @@ -2120,7 +2120,6 @@ void RGWGetObj::execute() perfcounter->inc(l_rgw_get); - RGWRados::Object op_target(store->getRados(), s->bucket->get_info(), *static_cast(s->obj_ctx), s->object->get_obj()); std::unique_ptr read_op(s->object->get_read_op(s->obj_ctx)); op_ret = get_params(); @@ -3491,16 +3490,20 @@ int RGWPutObj::verify_permission() RGWAccessControlPolicy cs_acl(s->cct); boost::optional policy; map cs_attrs; - rgw_bucket cs_bucket(copy_source_bucket_info.bucket); - rgw_obj_key cs_object(copy_source_object_name, copy_source_version_id); + std::unique_ptr cs_bucket; + int ret = store->get_bucket(NULL, copy_source_bucket_info, &cs_bucket); + if (ret < 0) + return ret; + + std::unique_ptr cs_object = + cs_bucket->get_object(rgw_obj_key(copy_source_object_name, copy_source_version_id)); - rgw_obj obj(cs_bucket, cs_object); - store->getRados()->set_atomic(s->obj_ctx, obj); - store->getRados()->set_prefetch_data(s->obj_ctx, obj); + cs_object->set_atomic(s->obj_ctx); + cs_object->set_prefetch_data(s->obj_ctx); /* check source object permissions */ if (read_obj_policy(store, s, copy_source_bucket_info, cs_attrs, &cs_acl, nullptr, - policy, cs_bucket, cs_object, true) < 0) { + policy, cs_bucket->get_key(), cs_object->get_key(), true) < 0) { return -EACCES; } @@ -3510,10 +3513,10 @@ int RGWPutObj::verify_permission() auto usr_policy_res = Effect::Pass; for (auto& user_policy : s->iam_user_policies) { if (usr_policy_res = user_policy.eval(s->env, *s->auth.identity, - cs_object.instance.empty() ? + cs_object->get_instance().empty() ? rgw::IAM::s3GetObject : rgw::IAM::s3GetObjectVersion, - rgw::ARN(obj)); usr_policy_res == Effect::Deny) + rgw::ARN(cs_object->get_obj())); usr_policy_res == Effect::Deny) return -EACCES; else if (usr_policy_res == Effect::Allow) break; @@ -3521,10 +3524,10 @@ int RGWPutObj::verify_permission() rgw::IAM::Effect e = Effect::Pass; if (policy) { e = policy->eval(s->env, *s->auth.identity, - cs_object.instance.empty() ? + cs_object->get_instance().empty() ? rgw::IAM::s3GetObject : rgw::IAM::s3GetObjectVersion, - rgw::ARN(obj)); + rgw::ARN(cs_object->get_obj())); } if (e == Effect::Deny) { return -EACCES; @@ -3647,7 +3650,6 @@ int RGWPutObj::get_data(const off_t fst, const off_t lst, bufferlist& bl) std::unique_ptr decrypt; RGWCompressionInfo cs_info; map attrs; - map::iterator attr_iter; int ret = 0; uint64_t obj_size; @@ -3656,20 +3658,22 @@ int RGWPutObj::get_data(const off_t fst, const off_t lst, bufferlist& bl) new_ofs = fst; new_end = lst; - rgw_obj_key obj_key(copy_source_object_name, copy_source_version_id); - rgw_obj obj(copy_source_bucket_info.bucket, obj_key); + std::unique_ptr bucket; + ret = store->get_bucket(nullptr, copy_source_bucket_info, &bucket); + if (ret < 0) + return ret; - RGWRados::Object op_target(store->getRados(), copy_source_bucket_info, *static_cast(s->obj_ctx), obj); - RGWRados::Object::Read read_op(&op_target); - read_op.params.obj_size = &obj_size; - read_op.params.attrs = &attrs; + std::unique_ptr obj = bucket->get_object(rgw_obj_key(copy_source_object_name, copy_source_version_id)); + std::unique_ptr read_op(obj->get_read_op(s->obj_ctx)); - ret = read_op.prepare(s->yield); + ret = read_op->prepare(s->yield); if (ret < 0) return ret; + obj_size = obj->get_obj_size(); + bool need_decompress; - op_ret = rgw_compression_info_from_attrset(attrs, need_decompress, cs_info); + op_ret = rgw_compression_info_from_attrset(obj->get_attrs().attrs, need_decompress, cs_info); if (op_ret < 0) { ldpp_dout(s, 0) << "ERROR: failed to decode compression info" << dendl; return -EIO; @@ -3683,11 +3687,11 @@ int RGWPutObj::get_data(const off_t fst, const off_t lst, bufferlist& bl) filter = &*decompress; } - attr_iter = attrs.find(RGW_ATTR_MANIFEST); + auto attr_iter = obj->get_attrs().find(RGW_ATTR_MANIFEST); op_ret = this->get_decrypt_filter(&decrypt, filter, - attrs, - attr_iter != attrs.end() ? &(attr_iter->second) : nullptr); + obj->get_attrs().attrs, + attr_iter != obj->get_attrs().end() ? &(attr_iter->second) : nullptr); if (decrypt != nullptr) { filter = decrypt.get(); } @@ -3695,12 +3699,12 @@ int RGWPutObj::get_data(const off_t fst, const off_t lst, bufferlist& bl) return ret; } - ret = read_op.range_to_ofs(obj_size, new_ofs, new_end); + ret = obj->range_to_ofs(obj_size, new_ofs, new_end); if (ret < 0) return ret; filter->fixup_range(new_ofs, new_end); - ret = read_op.iterate(new_ofs, new_end, filter, s->yield); + ret = read_op->iterate(new_ofs, new_end, filter, s->yield); if (ret >= 0) ret = filter->flush(); diff --git a/src/rgw/rgw_sal.cc b/src/rgw/rgw_sal.cc index b776a5a6917..0f323a4a66c 100644 --- a/src/rgw/rgw_sal.cc +++ b/src/rgw/rgw_sal.cc @@ -734,6 +734,10 @@ int RGWRadosStore::forward_request_to_master(RGWUser* user, obj_version *objv, return 0; } +int RGWRadosStore::defer_gc(RGWObjectCtx *rctx, RGWBucket* bucket, RGWObject* obj, optional_yield y) +{ + return rados->defer_gc(rctx, bucket->get_info(), obj->get_obj(), y); +} int RGWRadosStore::create_bucket(RGWUser& u, const rgw_bucket& b, const string& zonegroup_id, diff --git a/src/rgw/rgw_sal.h b/src/rgw/rgw_sal.h index f017a4c37ab..f330199fbb3 100644 --- a/src/rgw/rgw_sal.h +++ b/src/rgw/rgw_sal.h @@ -85,6 +85,8 @@ class RGWStore : public DoutPrefixProvider { virtual bool is_meta_master() = 0; virtual int forward_request_to_master(RGWUser* user, obj_version *objv, bufferlist& in_data, JSONParser *jp, req_info& info) = 0; + virtual int defer_gc(RGWObjectCtx *rctx, RGWBucket* bucket, RGWObject* obj, + optional_yield y) = 0; virtual void finalize(void)=0; @@ -633,6 +635,8 @@ class RGWRadosStore : public RGWStore { virtual bool is_meta_master() override; virtual int forward_request_to_master(RGWUser* user, obj_version *objv, bufferlist& in_data, JSONParser *jp, req_info& info) override; + virtual int defer_gc(RGWObjectCtx *rctx, RGWBucket* bucket, RGWObject* obj, + optional_yield y) override; void setRados(RGWRados * st) { rados = st; } RGWRados *getRados(void) { return rados; }