From a15e8736340c916120fef1f3a5ff1b982cf7c837 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Fri, 25 Jan 2019 16:42:50 -0500 Subject: [PATCH] rgw: bi_get() takes bucket_info and calls the bucket_info overload of BucketShard::init() to avoid reading the bucket info again Signed-off-by: Casey Bodley --- src/rgw/rgw_admin.cc | 2 +- src/rgw/rgw_rados.cc | 22 +++++++--------------- src/rgw/rgw_rados.h | 4 ++-- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index f55638c3fca6c..1d30d8d0f04bc 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -5829,7 +5829,7 @@ next: rgw_cls_bi_entry entry; - ret = store->bi_get(bucket, obj, bi_index_type, &entry); + ret = store->bi_get(bucket_info, obj, bi_index_type, &entry); if (ret < 0) { cerr << "ERROR: bi_get(): " << cpp_strerror(-ret) << std::endl; return -ret; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 242a39dac82fc..37cd1429d9a41 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -8673,16 +8673,11 @@ int RGWRados::stop_bi_log_entries(RGWBucketInfo& bucket_info, int shard_id) return CLSRGWIssueBucketBILogStop(index_ctx, bucket_objs, cct->_conf->rgw_bucket_index_max_aio)(); } -int RGWRados::bi_get_instance(const RGWBucketInfo& bucket_info, rgw_obj& obj, rgw_bucket_dir_entry *dirent) +int RGWRados::bi_get_instance(const RGWBucketInfo& bucket_info, const rgw_obj& obj, + rgw_bucket_dir_entry *dirent) { - rgw_rados_ref ref; - int r = get_obj_head_ref(bucket_info, obj, &ref); - if (r < 0) { - return r; - } - rgw_cls_bi_entry bi_entry; - r = bi_get(obj.bucket, obj, BIIndexType::Instance, &bi_entry); + int r = bi_get(bucket_info, obj, BIIndexType::Instance, &bi_entry); if (r < 0 && r != -ENOENT) { ldout(cct, 0) << "ERROR: bi_get() returned r=" << r << dendl; } @@ -8700,10 +8695,11 @@ int RGWRados::bi_get_instance(const RGWBucketInfo& bucket_info, rgw_obj& obj, rg return 0; } -int RGWRados::bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, rgw_cls_bi_entry *entry) +int RGWRados::bi_get(const RGWBucketInfo& bucket_info, const rgw_obj& obj, + BIIndexType index_type, rgw_cls_bi_entry *entry) { BucketShard bs(this); - int ret = bs.init(bucket, obj, nullptr /* no RGWBucketInfo */); + int ret = bs.init(bucket_info, obj); if (ret < 0) { ldout(cct, 5) << "bs.init() returned ret=" << ret << dendl; return ret; @@ -8711,11 +8707,7 @@ int RGWRados::bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, r cls_rgw_obj_key key(obj.key.get_index_key_name(), obj.key.instance); - ret = cls_rgw_bi_get(bs.index_ctx, bs.bucket_obj, index_type, key, entry); - if (ret < 0) - return ret; - - return 0; + return cls_rgw_bi_get(bs.index_ctx, bs.bucket_obj, index_type, key, entry); } void RGWRados::bi_put(ObjectWriteOperation& op, BucketShard& bs, rgw_cls_bi_entry& entry) diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 8afe70932fad5..fadda11cc01aa 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -2219,8 +2219,8 @@ public: int stop_bi_log_entries(RGWBucketInfo& bucket_info, int shard_id); int get_bi_log_status(RGWBucketInfo& bucket_info, int shard_id, map& max_marker); - int bi_get_instance(const RGWBucketInfo& bucket_info, rgw_obj& obj, rgw_bucket_dir_entry *dirent); - int bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, rgw_cls_bi_entry *entry); + int bi_get_instance(const RGWBucketInfo& bucket_info, const rgw_obj& obj, rgw_bucket_dir_entry *dirent); + int bi_get(const RGWBucketInfo& bucket_info, const rgw_obj& obj, BIIndexType index_type, rgw_cls_bi_entry *entry); void bi_put(librados::ObjectWriteOperation& op, BucketShard& bs, rgw_cls_bi_entry& entry); int bi_put(BucketShard& bs, rgw_cls_bi_entry& entry); int bi_put(rgw_bucket& bucket, rgw_obj& obj, rgw_cls_bi_entry& entry); -- 2.39.5