From: Casey Bodley Date: Thu, 14 May 2020 15:43:39 +0000 (-0400) Subject: rgw: add quota enforcement to CopyObj X-Git-Tag: v15.2.5~123^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=042e1c20a75260723ddd1af1df5ad42e44fed18a;p=ceph.git rgw: add quota enforcement to CopyObj Fixes: https://tracker.ceph.com/issues/45382 Signed-off-by: Casey Bodley (cherry picked from commit 70d397541cc8c0a68b3e420a78fec8f0f66f06b0) --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 51e21fe36123..d42249272904 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -5243,6 +5243,24 @@ void RGWCopyObj::execute() encode_delete_at_attr(delete_at, attrs); + if (!s->system_request) { // no quota enforcement for system requests + // get src object size (cached in obj_ctx from verify_permission()) + RGWObjState* astate = nullptr; + op_ret = store->getRados()->get_obj_state(s->obj_ctx, src_bucket_info, src_obj, + &astate, true, s->yield, false); + if (op_ret < 0) { + return; + } + // enforce quota against the destination bucket owner + op_ret = store->getRados()->check_quota(dest_bucket_info.owner, + dest_bucket_info.bucket, + user_quota, bucket_quota, + astate->accounted_size); + if (op_ret < 0) { + return; + } + } + bool high_precision_time = (s->system_request); /* Handle object versioning of Swift API. In case of copying to remote this