From 02c6a56f49571183cd599932b26ff90c2b4b7683 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Wed, 2 Feb 2022 18:25:33 +0000 Subject: [PATCH] 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 --- src/rgw/rgw_cr_rados.cc | 10 ++++++++-- src/rgw/rgw_cr_rados.h | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/rgw/rgw_cr_rados.cc b/src/rgw/rgw_cr_rados.cc index 2a3d26e0a30..7af1f5a7fec 100644 --- a/src/rgw/rgw_cr_rados.cc +++ b/src/rgw/rgw_cr_rados.cc @@ -605,15 +605,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 cb9d0f09408..23ee4a6a9d0 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; -- 2.39.5