From f0612bad226b00f21c8f065a5e7f01b723a332a8 Mon Sep 17 00:00:00 2001 From: Mohammad Fatemipour Date: Sun, 19 Dec 2021 22:03:55 +0330 Subject: [PATCH] rgw: fix bad memory usage of bucket chown method In RGWBucketCtl::chown we have one RGWObjectCtx for all objects of a bucket. In RGWObjectCtx there is a cache mechanism (std::map) for states of objects that will grows continuously. for buckets with millions of objects this mechanism leads to huge memory usage. in chown process we really do not need this caching mechanism so we could create one RGWObjectCtx for every 1000 objects to limit usage of memory. Fixes: https://tracker.ceph.com/issues/53599 Signed-off-by: Mohammad Fatemipour (cherry picked from commit cf2d83ef81458524715c23e802977dc0760c847f) Conflicts: src/rgw/rgw_bucket.cc Cherry-pick notes: - Conflicts due to Pacific impementation differences in RGWBucketCtl::chown --- src/rgw/rgw_bucket.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 26e30cc023c79..89cc597730cb8 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -3186,7 +3186,6 @@ int RGWBucketCtl::chown(rgw::sal::RGWRadosStore *store, RGWBucketInfo& bucket_in const rgw_user& user_id, const std::string& display_name, const std::string& marker, optional_yield y, const DoutPrefixProvider *dpp) { - RGWObjectCtx obj_ctx(store); std::vector objs; map common_prefixes; @@ -3204,6 +3203,7 @@ int RGWBucketCtl::chown(rgw::sal::RGWRadosStore *store, RGWBucketInfo& bucket_in //Loop through objects and update object acls to point to bucket owner do { + RGWObjectCtx obj_ctx(store); objs.clear(); int ret = list_op.list_objects(dpp, max_entries, &objs, &common_prefixes, &is_truncated, y); if (ret < 0) { -- 2.39.5