From: Daniel Gryniewicz Date: Tue, 31 Aug 2021 17:41:09 +0000 (-0400) Subject: RGW - Remove extra src_object from Copy OP X-Git-Tag: v17.1.0~851^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=854e629c5e075e8e53c8c907b06dc1f132c7b6db;p=ceph-ci.git RGW - Remove extra src_object from Copy OP req_state has a src_object, and it's used from places that don't have access to the Copy OP. Remove the version from the Copy OP, and consolidate on the one in req_state. Signed-off-by: Daniel Gryniewicz --- diff --git a/src/rgw/rgw_file.h b/src/rgw/rgw_file.h index bdbfa56021a..c05562881d6 100644 --- a/src/rgw/rgw_file.h +++ b/src/rgw/rgw_file.h @@ -2666,8 +2666,8 @@ public: dest_policy = s3policy; /* src_object required before RGWCopyObj::verify_permissions() */ rgw_obj_key k = rgw_obj_key(src_name); - src_object = s->bucket->get_object(k); - s->object = src_object->clone(); // needed to avoid trap at rgw_op.cc:5150 + s->src_object = s->bucket->get_object(k); + s->object = s->src_object->clone(); // needed to avoid trap at rgw_op.cc:5150 return ret; } diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 502d70e2158..66ec854a33b 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -5111,17 +5111,17 @@ int RGWCopyObj::verify_permission(optional_yield y) return op_ret; } - src_object->set_bucket(src_bucket.get()); + s->src_object->set_bucket(src_bucket.get()); /* get buckets info (source and dest) */ if (s->local_source && source_zone.empty()) { - src_object->set_atomic(s->obj_ctx); - src_object->set_prefetch_data(s->obj_ctx); + s->src_object->set_atomic(s->obj_ctx); + s->src_object->set_prefetch_data(s->obj_ctx); rgw_placement_rule src_placement; /* check source object permissions */ op_ret = read_obj_policy(this, store, s, src_bucket->get_info(), src_bucket->get_attrs(), &src_acl, &src_placement.storage_class, - src_policy, src_bucket.get(), src_object.get(), y); + src_policy, src_bucket.get(), s->src_object.get(), y); if (op_ret < 0) { return op_ret; } @@ -5141,14 +5141,14 @@ int RGWCopyObj::verify_permission(optional_yield y) if (src_policy || ! s->iam_user_policies.empty() || !s->session_policies.empty()) { auto [has_s3_existing_tag, has_s3_resource_tag] = rgw_check_policy_condition(this, src_policy, s->iam_user_policies, s->session_policies); if (has_s3_existing_tag || has_s3_resource_tag) - rgw_iam_add_objtags(this, s, src_object.get(), has_s3_existing_tag, has_s3_resource_tag); + rgw_iam_add_objtags(this, s, s->src_object.get(), has_s3_existing_tag, has_s3_resource_tag); auto identity_policy_res = eval_identity_or_session_policies(s->iam_user_policies, s->env, boost::none, - src_object->get_instance().empty() ? + s->src_object->get_instance().empty() ? rgw::IAM::s3GetObject : rgw::IAM::s3GetObjectVersion, - ARN(src_object->get_obj())); + ARN(s->src_object->get_obj())); if (identity_policy_res == Effect::Deny) { return -EACCES; } @@ -5156,10 +5156,10 @@ int RGWCopyObj::verify_permission(optional_yield y) rgw::IAM::PolicyPrincipal princ_type = rgw::IAM::PolicyPrincipal::Other; if (src_policy) { e = src_policy->eval(s->env, *s->auth.identity, - src_object->get_instance().empty() ? + s->src_object->get_instance().empty() ? rgw::IAM::s3GetObject : rgw::IAM::s3GetObjectVersion, - ARN(src_object->get_obj()), + ARN(s->src_object->get_obj()), princ_type); } if (e == Effect::Deny) { @@ -5168,10 +5168,10 @@ int RGWCopyObj::verify_permission(optional_yield y) if (!s->session_policies.empty()) { auto session_policy_res = eval_identity_or_session_policies(s->session_policies, s->env, boost::none, - src_object->get_instance().empty() ? + s->src_object->get_instance().empty() ? rgw::IAM::s3GetObject : rgw::IAM::s3GetObjectVersion, - ARN(src_object->get_obj())); + ARN(s->src_object->get_obj())); if (session_policy_res == Effect::Deny) { return -EACCES; } @@ -5199,7 +5199,7 @@ int RGWCopyObj::verify_permission(optional_yield y) } //remove src object tags as it may interfere with policy evaluation of destination obj if (has_s3_existing_tag || has_s3_resource_tag) - rgw_iam_remove_objtags(this, s, src_object.get(), has_s3_existing_tag, has_s3_resource_tag); + rgw_iam_remove_objtags(this, s, s->src_object.get(), has_s3_existing_tag, has_s3_resource_tag); } else if (!src_acl.verify_permission(this, *s->auth.identity, s->perm_mask, @@ -5389,7 +5389,7 @@ void RGWCopyObj::execute(optional_yield y) dest_object->gen_rand_obj_instance_name(); } - src_object->set_atomic(s->obj_ctx); + s->src_object->set_atomic(s->obj_ctx); dest_object->set_atomic(s->obj_ctx); encode_delete_at_attr(delete_at, attrs); @@ -5409,7 +5409,7 @@ void RGWCopyObj::execute(optional_yield y) { // get src object size (cached in obj_ctx from verify_permission()) RGWObjState* astate = nullptr; - op_ret = src_object->get_obj_state(this, s->obj_ctx, &astate, s->yield, true); + op_ret = s->src_object->get_obj_state(this, s->obj_ctx, &astate, s->yield, true); if (op_ret < 0) { return; } @@ -5435,7 +5435,7 @@ void RGWCopyObj::execute(optional_yield y) } RGWObjectCtx& obj_ctx = *static_cast(s->obj_ctx); - op_ret = src_object->copy_object(obj_ctx, + op_ret = s->src_object->copy_object(obj_ctx, s->user.get(), &s->info, source_zone, diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index 3d4cc1e2b19..7556a55b5d6 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -1497,7 +1497,6 @@ protected: rgw::sal::Attrs attrs; std::string src_tenant_name, src_bucket_name, src_obj_name; std::unique_ptr src_bucket; - std::unique_ptr src_object; std::string dest_tenant_name, dest_bucket_name, dest_obj_name; std::unique_ptr dest_bucket; std::unique_ptr dest_object; diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index d9fcd8dc133..36ba47f2cde 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -3239,7 +3239,6 @@ int RGWCopyObj_ObjStore_S3::get_params(optional_yield y) src_tenant_name = s->src_tenant_name; src_bucket_name = s->src_bucket_name; - src_object = s->src_object->clone(); dest_tenant_name = s->bucket->get_tenant(); dest_bucket_name = s->bucket->get_name(); dest_obj_name = s->object->get_name(); @@ -3269,8 +3268,8 @@ int RGWCopyObj_ObjStore_S3::get_params(optional_yield y) if (source_zone.empty() && (dest_tenant_name.compare(src_tenant_name) == 0) && (dest_bucket_name.compare(src_bucket_name) == 0) && - (dest_obj_name.compare(src_object->get_name()) == 0) && - src_object->get_instance().empty() && + (dest_obj_name.compare(s->src_object->get_name()) == 0) && + s->src_object->get_instance().empty() && (attrs_mod != rgw::sal::ATTRSMOD_REPLACE)) { need_to_check_storage_class = true; } diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 17f8850b05a..98c0b54a77c 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -1382,7 +1382,6 @@ int RGWCopyObj_ObjStore_SWIFT::get_params(optional_yield y) src_tenant_name = s->src_tenant_name; src_bucket_name = s->src_bucket_name; - src_object = s->src_object->clone(); dest_tenant_name = s->bucket_tenant; dest_bucket_name = s->bucket_name; dest_obj_name = s->object->get_name(); @@ -1429,7 +1428,7 @@ void RGWCopyObj_ObjStore_SWIFT::dump_copy_info() { /* Dump X-Copied-From. */ dump_header(s, "X-Copied-From", url_encode(src_bucket->get_name()) + - "/" + url_encode(src_object->get_name())); + "/" + url_encode(s->src_object->get_name())); /* Dump X-Copied-From-Account. */ /* XXX tenant */