From: Mykola Golub Date: Wed, 2 Feb 2022 18:25:33 +0000 (+0000) Subject: rgw: check bucket shard init status in RGWRadosBILogTrimCR X-Git-Tag: v16.2.11~264^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b15e2c3c7a02de5b10d9e7521140af64d87bf853;p=ceph.git rgw: check bucket shard init status in RGWRadosBILogTrimCR to avoid using not properly initialized bs.bucket_obj. Fixes: https://tracker.ceph.com/issues/54119 Signed-off-by: Mykola Golub (cherry picked from commit 02c6a56f49571183cd599932b26ff90c2b4b7683) --- diff --git a/src/rgw/rgw_cr_rados.cc b/src/rgw/rgw_cr_rados.cc index 70975c22a4ee..1174a3fc33b7 100644 --- a/src/rgw/rgw_cr_rados.cc +++ b/src/rgw/rgw_cr_rados.cc @@ -603,15 +603,21 @@ RGWRadosBILogTrimCR::RGWRadosBILogTrimCR(const DoutPrefixProvider *dpp, int shard_id, const std::string& start_marker, const std::string& end_marker) - : RGWSimpleCoroutine(store->ctx()), bs(store->getRados()), + : RGWSimpleCoroutine(store->ctx()), bucket_info(bucket_info), + shard_id(shard_id), bs(store->getRados()), start_marker(BucketIndexShardsManager::get_shard_marker(start_marker)), end_marker(BucketIndexShardsManager::get_shard_marker(end_marker)) { - bs.init(dpp, bucket_info, bucket_info.layout.current_index, shard_id); } int RGWRadosBILogTrimCR::send_request(const DoutPrefixProvider *dpp) { + int r = bs.init(dpp, bucket_info, bucket_info.layout.current_index, shard_id); + if (r < 0) { + ldpp_dout(dpp, -1) << "ERROR: bucket shard init failed ret=" << r << dendl; + return r; + } + bufferlist in; cls_rgw_bi_log_trim_op call; call.start_marker = std::move(start_marker); diff --git a/src/rgw/rgw_cr_rados.h b/src/rgw/rgw_cr_rados.h index 87fa65b5514a..c46c0394fefe 100644 --- a/src/rgw/rgw_cr_rados.h +++ b/src/rgw/rgw_cr_rados.h @@ -910,6 +910,8 @@ public: }; class RGWRadosBILogTrimCR : public RGWSimpleCoroutine { + const RGWBucketInfo& bucket_info; + int shard_id; RGWRados::BucketShard bs; std::string start_marker; std::string end_marker;