From: Shilpa Jagannath Date: Wed, 10 Jun 2020 14:09:55 +0000 (+0530) Subject: rgw: fetch updated bucketinfo rather than bucket_id in guard_reshard X-Git-Tag: v18.0.0~787^2~159 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=9f68c54fc104d74a15abbf01985341d32285f5ef;p=ceph.git rgw: fetch updated bucketinfo rather than bucket_id in guard_reshard To be able to read the updated layout. Signed-off-by: Shilpa Jagannath --- diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 40040e8137f1d..19e32f25aea42 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -2620,7 +2620,7 @@ done_err: * fixes an issue where head objects were supposed to have a locator created, but ended * up without one */ -int RGWRados::fix_tail_obj_locator(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, rgw_obj_key& key, bool fix, bool *need_fix, optional_yield y) +int RGWRados::fix_tail_obj_locator(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info, rgw_obj_key& key, bool fix, bool *need_fix, optional_yield y) { std::unique_ptr bucket; store->get_bucket(nullptr, bucket_info, &bucket); @@ -5049,7 +5049,7 @@ int RGWRados::bucket_set_reshard(const DoutPrefixProvider *dpp, const RGWBucketI return CLSRGWIssueSetBucketResharding(index_pool.ioctx(), bucket_objs, entry, cct->_conf->rgw_bucket_index_max_aio)(); } -int RGWRados::defer_gc(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, optional_yield y) +int RGWRados::defer_gc(const DoutPrefixProvider *dpp, void *ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, optional_yield y) { RGWObjectCtx *rctx = static_cast(ctx); std::string oid, key; @@ -5439,7 +5439,7 @@ static bool has_olh_tag(map& attrs) } int RGWRados::get_olh_target_state(const DoutPrefixProvider *dpp, RGWObjectCtx& - obj_ctx, const RGWBucketInfo& bucket_info, + obj_ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState *olh_state, RGWObjState **target_state, RGWObjManifest **target_manifest, optional_yield y) @@ -5466,7 +5466,7 @@ int RGWRados::get_olh_target_state(const DoutPrefixProvider *dpp, RGWObjectCtx& } int RGWRados::get_obj_state_impl(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, - const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, + RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, bool follow_olh, optional_yield y, bool assume_noent) { @@ -5652,7 +5652,7 @@ int RGWRados::get_obj_state_impl(const DoutPrefixProvider *dpp, RGWObjectCtx *rc return 0; } -int RGWRados::get_obj_state(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, +int RGWRados::get_obj_state(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, bool follow_olh, optional_yield y, bool assume_noent) { int ret; @@ -5768,7 +5768,7 @@ int RGWRados::Object::Stat::finish(const DoutPrefixProvider *dpp) } int RGWRados::append_atomic_test(const DoutPrefixProvider *dpp, - const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, + RGWBucketInfo& bucket_info, rgw::sal::Object* obj, ObjectOperation& op, RGWObjState **pstate, RGWObjManifest** pmanifest, optional_yield y) { @@ -5914,14 +5914,14 @@ int RGWRados::Object::prepare_atomic_modification(const DoutPrefixProvider *dpp, * bl: the contents of the attr * Returns: 0 on success, -ERR# otherwise. */ -int RGWRados::set_attr(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, const char *name, bufferlist& bl) +int RGWRados::set_attr(const DoutPrefixProvider *dpp, void *ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, const char *name, bufferlist& bl) { map attrs; attrs[name] = bl; return set_attrs(dpp, ctx, bucket_info, obj, attrs, NULL, null_yield); } -int RGWRados::set_attrs(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* src_obj, +int RGWRados::set_attrs(const DoutPrefixProvider *dpp, void *ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* src_obj, map& attrs, map* rmattrs, optional_yield y) @@ -6196,22 +6196,15 @@ int RGWRados::Bucket::UpdateIndex::guard_reshard(const DoutPrefixProvider *dpp, break; } ldpp_dout(dpp, 0) << "NOTICE: resharding operation on bucket index detected, blocking" << dendl; - string new_bucket_id; - r = store->block_while_resharding(bs, &new_bucket_id, - target->bucket_info, null_yield, dpp); + r = store->block_while_resharding(bs, target->bucket_info, null_yield, dpp); if (r == -ERR_BUSY_RESHARDING) { continue; } if (r < 0) { return r; } - ldpp_dout(dpp, 20) << "reshard completion identified, new_bucket_id=" << new_bucket_id << dendl; + ldpp_dout(dpp, 20) << "reshard completion identified" << dendl; i = 0; /* resharding is finished, make sure we can retry */ - r = target->update_bucket_id(new_bucket_id, dpp); - if (r < 0) { - ldpp_dout(dpp, 0) << "ERROR: update_bucket_id() new_bucket_id=" << new_bucket_id << " returned r=" << r << dendl; - return r; - } invalidate_bs(); } // for loop @@ -6598,7 +6591,7 @@ int RGWRados::Object::Read::iterate(const DoutPrefixProvider *dpp, int64_t ofs, } int RGWRados::iterate_obj(const DoutPrefixProvider *dpp, RGWObjectCtx& obj_ctx, - const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, + RGWBucketInfo& bucket_info, rgw::sal::Object* obj, off_t ofs, off_t end, uint64_t max_chunk_size, iterate_obj_cb cb, void *arg, optional_yield y) { @@ -6797,7 +6790,7 @@ int RGWRados::olh_init_modification(const DoutPrefixProvider *dpp, const RGWBuck int RGWRados::guard_reshard(const DoutPrefixProvider *dpp, BucketShard *bs, const rgw_obj& obj_instance, - const RGWBucketInfo& bucket_info, + RGWBucketInfo& bucket_info, std::function call) { rgw_obj obj; @@ -6815,20 +6808,15 @@ int RGWRados::guard_reshard(const DoutPrefixProvider *dpp, break; } ldpp_dout(dpp, 0) << "NOTICE: resharding operation on bucket index detected, blocking" << dendl; - string new_bucket_id; - r = block_while_resharding(bs, &new_bucket_id, bucket_info, null_yield, dpp); + r = block_while_resharding(bs, bucket_info, null_yield, dpp); if (r == -ERR_BUSY_RESHARDING) { continue; } if (r < 0) { return r; } - ldpp_dout(dpp, 20) << "reshard completion identified, new_bucket_id=" << new_bucket_id << dendl; + ldpp_dout(dpp, 20) << "reshard completion identified" << dendl; i = 0; /* resharding is finished, make sure we can retry */ - - obj = *pobj; - obj.bucket.update_bucket_id(new_bucket_id); - pobj = &obj; } // for loop if (r < 0) { @@ -6839,8 +6827,7 @@ int RGWRados::guard_reshard(const DoutPrefixProvider *dpp, } int RGWRados::block_while_resharding(RGWRados::BucketShard *bs, - string *new_bucket_id, - const RGWBucketInfo& bucket_info, + RGWBucketInfo& bucket_info, optional_yield y, const DoutPrefixProvider *dpp) { @@ -6852,18 +6839,15 @@ int RGWRados::block_while_resharding(RGWRados::BucketShard *bs, // lambda successfully fetches a new bucket id, it sets // new_bucket_id and returns 0, otherwise it returns a negative // error code - auto fetch_new_bucket_id = - [this, &bucket_info, dpp](const std::string& log_tag, - std::string* new_bucket_id) -> int { - RGWBucketInfo fresh_bucket_info = bucket_info; - int ret = try_refresh_bucket_info(fresh_bucket_info, nullptr, dpp); + auto fetch_new_bucket_info = + [this, &bucket_info, dpp](const std::string& log_tag) -> int { + int ret = try_refresh_bucket_info(bucket_info, nullptr, dpp); if (ret < 0) { ldpp_dout(dpp, 0) << __func__ << " ERROR: failed to refresh bucket info after reshard at " << log_tag << ": " << cpp_strerror(-ret) << dendl; return ret; } - *new_bucket_id = fresh_bucket_info.bucket.bucket_id; return 0; }; @@ -6872,7 +6856,7 @@ int RGWRados::block_while_resharding(RGWRados::BucketShard *bs, auto& ref = bs->bucket_obj.get_ref(); ret = cls_rgw_get_bucket_resharding(ref.pool.ioctx(), ref.obj.oid, &entry); if (ret == -ENOENT) { - return fetch_new_bucket_id("get_bucket_resharding_failed", new_bucket_id); + return fetch_new_bucket_info("get_bucket_resharding_failed"); } else if (ret < 0) { ldpp_dout(dpp, 0) << __func__ << " ERROR: failed to get bucket resharding : " << cpp_strerror(-ret) << @@ -6881,8 +6865,7 @@ int RGWRados::block_while_resharding(RGWRados::BucketShard *bs, } if (!entry.resharding_in_progress()) { - return fetch_new_bucket_id("get_bucket_resharding_succeeded", - new_bucket_id); + return fetch_new_bucket_info("get_bucket_resharding_succeeded"); } ldpp_dout(dpp, 20) << "NOTICE: reshard still in progress; " << @@ -6942,9 +6925,9 @@ int RGWRados::block_while_resharding(RGWRados::BucketShard *bs, return -ERR_BUSY_RESHARDING; } -int RGWRados::bucket_index_link_olh(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& olh_state, const rgw_obj& obj_instance, - bool delete_marker, - const string& op_tag, +int RGWRados::bucket_index_link_olh(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info, + RGWObjState& olh_state, const rgw_obj& obj_instance, + bool delete_marker, const string& op_tag, struct rgw_bucket_dir_entry_meta *meta, uint64_t olh_epoch, real_time unmod_since, bool high_precision_time, @@ -6995,8 +6978,11 @@ void RGWRados::bucket_index_guard_olh_op(const DoutPrefixProvider *dpp, RGWObjSt op.cmpxattr(RGW_ATTR_OLH_ID_TAG, CEPH_OSD_CMPXATTR_OP_EQ, olh_state.olh_tag); } -int RGWRados::bucket_index_unlink_instance(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw_obj& obj_instance, - const string& op_tag, const string& olh_tag, uint64_t olh_epoch, rgw_zone_set *_zones_trace) +int RGWRados::bucket_index_unlink_instance(const DoutPrefixProvider *dpp, + RGWBucketInfo& bucket_info, + const rgw_obj& obj_instance, + const string& op_tag, const string& olh_tag, + uint64_t olh_epoch, rgw_zone_set *_zones_trace) { rgw_rados_ref ref; int r = get_obj_head_ref(dpp, bucket_info, obj_instance, &ref); @@ -7031,9 +7017,9 @@ int RGWRados::bucket_index_unlink_instance(const DoutPrefixProvider *dpp, const } int RGWRados::bucket_index_read_olh_log(const DoutPrefixProvider *dpp, - const RGWBucketInfo& bucket_info, RGWObjState& state, + RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& obj_instance, uint64_t ver_marker, - map > *log, + std::map > *log, bool *is_truncated) { rgw_rados_ref ref; @@ -7139,7 +7125,10 @@ int RGWRados::repair_olh(const DoutPrefixProvider *dpp, RGWObjState* state, cons return 0; } -int RGWRados::bucket_index_trim_olh_log(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& obj_instance, uint64_t ver) +int RGWRados::bucket_index_trim_olh_log(const DoutPrefixProvider *dpp, + RGWBucketInfo& bucket_info, + RGWObjState& state, + const rgw_obj& obj_instance, uint64_t ver) { rgw_rados_ref ref; int r = get_obj_head_ref(dpp, bucket_info, obj_instance, &ref); @@ -7174,7 +7163,10 @@ int RGWRados::bucket_index_trim_olh_log(const DoutPrefixProvider *dpp, const RGW return 0; } -int RGWRados::bucket_index_clear_olh(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& obj_instance) +int RGWRados::bucket_index_clear_olh(const DoutPrefixProvider *dpp, + RGWBucketInfo& bucket_info, + RGWObjState& state, + const rgw_obj& obj_instance) { rgw_rados_ref ref; int r = get_obj_head_ref(dpp, bucket_info, obj_instance, &ref); @@ -7218,7 +7210,7 @@ static int decode_olh_info(const DoutPrefixProvider *dpp, CephContext* cct, cons int RGWRados::apply_olh_log(const DoutPrefixProvider *dpp, RGWObjState& state, - const RGWBucketInfo& bucket_info, + RGWBucketInfo& bucket_info, const rgw::sal::Object* obj, bufferlist& olh_tag, std::map >& log, @@ -7388,7 +7380,7 @@ int RGWRados::apply_olh_log(const DoutPrefixProvider *dpp, /* * read olh log and apply it */ -int RGWRados::update_olh(const DoutPrefixProvider *dpp, RGWObjState *state, const RGWBucketInfo& bucket_info, const rgw::sal::Object* obj, rgw_zone_set *zones_trace) +int RGWRados::update_olh(const DoutPrefixProvider *dpp, RGWObjState *state, RGWBucketInfo& bucket_info, const rgw::sal::Object* obj, rgw_zone_set *zones_trace) { map > log; bool is_truncated; @@ -7409,7 +7401,7 @@ int RGWRados::update_olh(const DoutPrefixProvider *dpp, RGWObjState *state, cons } int RGWRados::set_olh(const DoutPrefixProvider *dpp, RGWObjectCtx& obj_ctx, - const RGWBucketInfo& bucket_info, + RGWBucketInfo& bucket_info, rgw::sal::Object* target_obj, bool delete_marker, rgw_bucket_dir_entry_meta *meta, uint64_t olh_epoch, real_time unmod_since, bool high_precision_time, @@ -7425,7 +7417,7 @@ int RGWRados::set_olh(const DoutPrefixProvider *dpp, RGWObjectCtx& obj_ctx, int ret = 0; int i; - + #define MAX_ECANCELED_RETRY 100 for (i = 0; i < MAX_ECANCELED_RETRY; i++) { if (ret == -ECANCELED) { @@ -7578,7 +7570,8 @@ int RGWRados::get_olh(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket return decode_olh_info(dpp, cct, iter->second, olh); } -void RGWRados::check_pending_olh_entries(const DoutPrefixProvider *dpp, map& pending_entries, +void RGWRados::check_pending_olh_entries(const DoutPrefixProvider *dpp, + map& pending_entries, map *rm_pending_entries) { map::iterator iter = pending_entries.begin(); @@ -7642,7 +7635,7 @@ int RGWRados::remove_olh_pending_entries(const DoutPrefixProvider *dpp, const RG return 0; } -int RGWRados::follow_olh(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjectCtx& obj_ctx, RGWObjState *state, rgw::sal::Object* olh_obj, rgw_obj *target) +int RGWRados::follow_olh(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info, RGWObjectCtx& obj_ctx, RGWObjState *state, rgw::sal::Object* olh_obj, rgw_obj *target) { map pending_entries; rgw_filter_attrset(state->attrset, RGW_ATTR_OLH_PENDING_PREFIX, &pending_entries); @@ -7896,6 +7889,7 @@ int RGWRados::try_refresh_bucket_info(RGWBucketInfo& info, .set_mtime(pmtime) .set_attrs(pattrs) .set_refresh_version(rv)); + } int RGWRados::put_bucket_instance_info(RGWBucketInfo& info, bool exclusive, @@ -9189,7 +9183,7 @@ int RGWRados::remove_objs_from_index(const DoutPrefixProvider *dpp, int RGWRados::check_disk_state(const DoutPrefixProvider *dpp, librados::IoCtx io_ctx, - const RGWBucketInfo& bucket_info, + RGWBucketInfo& bucket_info, rgw_bucket_dir_entry& list_state, rgw_bucket_dir_entry& object, bufferlist& suggested_updates, diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index dfaf08e36b35a..c020261fde4c2 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -400,12 +400,12 @@ class RGWRados uint64_t max_bucket_id; int get_olh_target_state(const DoutPrefixProvider *dpp, RGWObjectCtx& rctx, - const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, + RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState *olh_state, RGWObjState **target_state, RGWObjManifest **target_manifest, optional_yield y); - int get_obj_state_impl(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, + int get_obj_state_impl(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, bool follow_olh, optional_yield y, bool assume_noent = false); - int append_atomic_test(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, + int append_atomic_test(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, librados::ObjectOperation& op, RGWObjState **state, RGWObjManifest** pmanifest, optional_yield y); @@ -1245,23 +1245,23 @@ public: * bl: the contents of the attr * Returns: 0 on success, -ERR# otherwise. */ - int set_attr(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, const char *name, bufferlist& bl); + int set_attr(const DoutPrefixProvider *dpp, void *ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, const char *name, bufferlist& bl); - int set_attrs(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, + int set_attrs(const DoutPrefixProvider *dpp, void *ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, std::map& attrs, std::map* rmattrs, optional_yield y); - int get_obj_state(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, + int get_obj_state(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, bool follow_olh, optional_yield y, bool assume_noent = false); - int get_obj_state(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, optional_yield y) { + int get_obj_state(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, RGWObjState **state, RGWObjManifest** manifest, optional_yield y) { return get_obj_state(dpp, rctx, bucket_info, obj, state, manifest, true, y); } using iterate_obj_cb = int (*)(const DoutPrefixProvider*, const rgw_raw_obj&, off_t, off_t, off_t, bool, RGWObjState*, void*); - int iterate_obj(const DoutPrefixProvider *dpp, RGWObjectCtx& ctx, const RGWBucketInfo& bucket_info, + int iterate_obj(const DoutPrefixProvider *dpp, RGWObjectCtx& ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, off_t ofs, off_t end, uint64_t max_chunk_size, iterate_obj_cb cb, void *arg, optional_yield y); @@ -1288,11 +1288,10 @@ public: int guard_reshard(const DoutPrefixProvider *dpp, BucketShard *bs, const rgw_obj& obj_instance, - const RGWBucketInfo& bucket_info, + RGWBucketInfo& bucket_info, std::function call); int block_while_resharding(RGWRados::BucketShard *bs, - std::string *new_bucket_id, - const RGWBucketInfo& bucket_info, + RGWBucketInfo& bucket_info, optional_yield y, const DoutPrefixProvider *dpp); @@ -1300,23 +1299,29 @@ public: int olh_init_modification(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& olh_obj, std::string *op_tag); int olh_init_modification_impl(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& olh_obj, std::string *op_tag); int bucket_index_link_olh(const DoutPrefixProvider *dpp, - const RGWBucketInfo& bucket_info, RGWObjState& olh_state, + RGWBucketInfo& bucket_info, RGWObjState& olh_state, const rgw_obj& obj_instance, bool delete_marker, const std::string& op_tag, struct rgw_bucket_dir_entry_meta *meta, uint64_t olh_epoch, ceph::real_time unmod_since, bool high_precision_time, rgw_zone_set *zones_trace = nullptr, bool log_data_change = false); - int bucket_index_unlink_instance(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw_obj& obj_instance, const std::string& op_tag, const std::string& olh_tag, uint64_t olh_epoch, rgw_zone_set *zones_trace = nullptr); - int bucket_index_read_olh_log(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& obj_instance, uint64_t ver_marker, + int bucket_index_unlink_instance(const DoutPrefixProvider *dpp, + RGWBucketInfo& bucket_info, + const rgw_obj& obj_instance, + const std::string& op_tag, const std::string& olh_tag, + uint64_t olh_epoch, rgw_zone_set *zones_trace = nullptr); + int bucket_index_read_olh_log(const DoutPrefixProvider *dpp, + RGWBucketInfo& bucket_info, RGWObjState& state, + const rgw_obj& obj_instance, uint64_t ver_marker, std::map > *log, bool *is_truncated); - int bucket_index_trim_olh_log(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& obj_state, const rgw_obj& obj_instance, uint64_t ver); - int bucket_index_clear_olh(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& obj_instance); - int apply_olh_log(const DoutPrefixProvider *dpp, RGWObjState& obj_state, const RGWBucketInfo& bucket_info, const rgw::sal::Object* obj, + int bucket_index_trim_olh_log(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info, RGWObjState& obj_state, const rgw_obj& obj_instance, uint64_t ver); + int bucket_index_clear_olh(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& obj_instance); + int apply_olh_log(const DoutPrefixProvider *dpp, RGWObjState& obj_state, RGWBucketInfo& bucket_info, const rgw::sal::Object* obj, bufferlist& obj_tag, std::map >& log, uint64_t *plast_ver, rgw_zone_set *zones_trace = nullptr); - int update_olh(const DoutPrefixProvider *dpp, RGWObjState *state, const RGWBucketInfo& bucket_info, const rgw::sal::Object* obj, rgw_zone_set *zones_trace = nullptr); - int set_olh(const DoutPrefixProvider *dpp, RGWObjectCtx& obj_ctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* target_obj, bool delete_marker, rgw_bucket_dir_entry_meta *meta, + int update_olh(const DoutPrefixProvider *dpp, RGWObjState *state, RGWBucketInfo& bucket_info, const rgw::sal::Object* obj, rgw_zone_set *zones_trace = nullptr); + int set_olh(const DoutPrefixProvider *dpp, RGWObjectCtx& obj_ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* target_obj, bool delete_marker, rgw_bucket_dir_entry_meta *meta, uint64_t olh_epoch, ceph::real_time unmod_since, bool high_precision_time, optional_yield y, rgw_zone_set *zones_trace = nullptr, bool log_data_change = false); int repair_olh(const DoutPrefixProvider *dpp, RGWObjState* state, const RGWBucketInfo& bucket_info, @@ -1326,7 +1331,7 @@ public: void check_pending_olh_entries(const DoutPrefixProvider *dpp, std::map& pending_entries, std::map *rm_pending_entries); int remove_olh_pending_entries(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjState& state, const rgw_obj& olh_obj, std::map& pending_attrs); - int follow_olh(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, RGWObjectCtx& ctx, RGWObjState *state, rgw::sal::Object* olh_obj, rgw_obj *target); + int follow_olh(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info, RGWObjectCtx& ctx, RGWObjState *state, rgw::sal::Object* olh_obj, rgw_obj *target); int get_olh(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw_obj& obj, RGWOLHInfo *olh); void gen_rand_obj_instance_name(rgw_obj_key *target_key); @@ -1475,7 +1480,7 @@ public: int list_gc_objs(int *index, std::string& marker, uint32_t max, bool expired_only, std::list& result, bool *truncated, bool& processing_queue); int process_gc(bool expired_only); bool process_expire_objects(const DoutPrefixProvider *dpp); - int defer_gc(const DoutPrefixProvider *dpp, void *ctx, const RGWBucketInfo& bucket_info, rgw::sal::Object* obj, optional_yield y); + int defer_gc(const DoutPrefixProvider *dpp, void *ctx, RGWBucketInfo& bucket_info, rgw::sal::Object* obj, optional_yield y); int process_lc(const std::unique_ptr& optional_bucket); int list_lc_progress(std::string& marker, uint32_t max_entries, @@ -1495,7 +1500,7 @@ public: librados::IoCtx& dst_ioctx, const std::string& dst_oid, const std::string& dst_locator); int fix_head_obj_locator(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, bool copy_obj, bool remove_bad, rgw_obj_key& key); - int fix_tail_obj_locator(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, rgw_obj_key& key, bool fix, bool *need_fix, optional_yield y); + int fix_tail_obj_locator(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info, rgw_obj_key& key, bool fix, bool *need_fix, optional_yield y); int check_quota(const DoutPrefixProvider *dpp, const rgw_user& bucket_owner, rgw_bucket& bucket, RGWQuota& quota, uint64_t obj_size, @@ -1532,7 +1537,7 @@ public: */ int check_disk_state(const DoutPrefixProvider *dpp, librados::IoCtx io_ctx, - const RGWBucketInfo& bucket_info, + RGWBucketInfo& bucket_info, rgw_bucket_dir_entry& list_state, rgw_bucket_dir_entry& object, bufferlist& suggested_updates, diff --git a/src/rgw/rgw_reshard.cc b/src/rgw/rgw_reshard.cc index d0104951da301..7091fb1c36a6f 100644 --- a/src/rgw/rgw_reshard.cc +++ b/src/rgw/rgw_reshard.cc @@ -668,6 +668,12 @@ int RGWBucketReshard::do_reshard(int num_shards, return ret; } + ret = bucket_info_updater.complete(); + if (ret < 0) { + ldout(store->ctx(), 0) << __func__ << ": failed to update bucket info ret=" << ret << dendl; + /* don't error out, reshard process succeeded */ + } + return 0; // NB: some error clean-up is done by ~BucketInfoReshardUpdate } // RGWBucketReshard::do_reshard diff --git a/src/rgw/services/svc_bi_rados.cc b/src/rgw/services/svc_bi_rados.cc index ed4bb39cc4ca5..446b50b465d32 100644 --- a/src/rgw/services/svc_bi_rados.cc +++ b/src/rgw/services/svc_bi_rados.cc @@ -156,33 +156,6 @@ static void get_bucket_index_objects(const string& bucket_oid_base, } } -/* -static void get_bucket_index_objects(const string& bucket_oid_base, - uint32_t num_shards, - map *_bucket_objects, - int shard_id = -1) -{ - auto& bucket_objects = *_bucket_objects; - if (!num_shards) { - bucket_objects[0] = bucket_oid_base; - } else { - char buf[bucket_oid_base.size() + 32]; - if (shard_id < 0) { - for (uint32_t i = 0; i < num_shards; ++i) { - snprintf(buf, sizeof(buf), "%s.%d", bucket_oid_base.c_str(), i); - bucket_objects[i] = buf; - } - } else { - if ((uint32_t)shard_id > num_shards) { - return; - } - snprintf(buf, sizeof(buf), "%s.%d", bucket_oid_base.c_str(), shard_id); - bucket_objects[shard_id] = buf; - } - } -} -*/ - static void get_bucket_instance_ids(const RGWBucketInfo& bucket_info, int shard_id, map *result)