From dc94595b670bd4a0a84012e965069efc869099cf Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Sun, 14 Jul 2019 12:42:19 -0700 Subject: [PATCH] rgw: fixes following rebase Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_admin.cc | 9 +- src/rgw/rgw_aio.cc | 2 +- src/rgw/rgw_bucket.cc | 129 ++++++++++++++++------------ src/rgw/rgw_bucket.h | 16 ++-- src/rgw/rgw_cr_tools.cc | 4 +- src/rgw/rgw_data_sync.cc | 4 +- src/rgw/rgw_lc.cc | 7 +- src/rgw/rgw_metadata.cc | 53 ++++-------- src/rgw/rgw_metadata.h | 28 +++--- src/rgw/rgw_op.cc | 51 ++++++----- src/rgw/rgw_otp.cc | 26 ++++-- src/rgw/rgw_otp.h | 6 +- src/rgw/rgw_putobj_processor.cc | 2 +- src/rgw/rgw_rados.cc | 38 +++----- src/rgw/rgw_rados.h | 60 ------------- src/rgw/rgw_reshard.cc | 5 +- src/rgw/rgw_rest.cc | 2 +- src/rgw/rgw_rest_metadata.cc | 6 +- src/rgw/rgw_rest_swift.cc | 2 +- src/rgw/rgw_rest_user_policy.cc | 8 +- src/rgw/rgw_sync.cc | 4 +- src/rgw/rgw_tools.cc | 13 ++- src/rgw/rgw_tools.h | 2 + src/rgw/rgw_trim_datalog.cc | 3 + src/rgw/rgw_user.cc | 2 +- src/rgw/rgw_user.h | 4 +- src/rgw/services/svc_bi.h | 3 +- src/rgw/services/svc_bi_rados.cc | 14 +-- src/rgw/services/svc_bi_rados.h | 6 +- src/rgw/services/svc_bilog_rados.cc | 2 +- src/rgw/services/svc_bucket.h | 3 +- src/rgw/services/svc_bucket_sobj.cc | 15 ++-- src/rgw/services/svc_bucket_sobj.h | 3 +- src/rgw/services/svc_meta_be.cc | 15 ++-- src/rgw/services/svc_meta_be.h | 23 +++-- src/rgw/services/svc_otp.cc | 33 ++++--- src/rgw/services/svc_otp.h | 18 ++-- src/rgw/services/svc_rados.cc | 8 +- src/rgw/services/svc_rados.h | 2 +- src/rgw/services/svc_tier_rados.h | 6 +- src/rgw/services/svc_user_rados.cc | 2 +- src/tools/ceph-dencoder/rgw_types.h | 4 +- 42 files changed, 327 insertions(+), 316 deletions(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 084dd78c1bc..d75b375914c 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -6809,7 +6809,7 @@ next: } if (opt_cmd == OPT_METADATA_GET) { - int ret = store->ctl.meta.mgr->get(metadata_key, formatter); + int ret = store->ctl.meta.mgr->get(metadata_key, formatter, null_yield); if (ret < 0) { cerr << "ERROR: can't get key: " << cpp_strerror(-ret) << std::endl; return -ret; @@ -6825,7 +6825,7 @@ next: cerr << "ERROR: failed to read input: " << cpp_strerror(-ret) << std::endl; return -ret; } - ret = store->ctl.meta.mgr->put(metadata_key, bl, RGWMDLogSyncType::APPLY_ALWAYS); + ret = store->ctl.meta.mgr->put(metadata_key, bl, null_yield, RGWMDLogSyncType::APPLY_ALWAYS); if (ret < 0) { cerr << "ERROR: can't put key: " << cpp_strerror(-ret) << std::endl; return -ret; @@ -6833,7 +6833,7 @@ next: } if (opt_cmd == OPT_METADATA_RM) { - int ret = store->ctl.meta.mgr->remove(metadata_key); + int ret = store->ctl.meta.mgr->remove(metadata_key, null_yield); if (ret < 0) { cerr << "ERROR: can't remove key: " << cpp_strerror(-ret) << std::endl; return -ret; @@ -7740,6 +7740,7 @@ next: int ret = store->ctl.meta.mgr->mutate(RGWSI_MetaBackend_OTP::get_meta_key(user_id), mtime, &objv_tracker, + null_yield, MDLOG_STATUS_WRITE, [&] { return store->svc.cls->mfa.create_mfa(user_id, config, &objv_tracker, mtime, null_yield); @@ -7775,6 +7776,7 @@ next: int ret = store->ctl.meta.mgr->mutate(RGWSI_MetaBackend_OTP::get_meta_key(user_id), mtime, &objv_tracker, + null_yield, MDLOG_STATUS_WRITE, [&] { return store->svc.cls->mfa.remove_mfa(user_id, totp_serial, &objv_tracker, mtime, null_yield); @@ -7918,6 +7920,7 @@ next: ret = store->ctl.meta.mgr->mutate(RGWSI_MetaBackend_OTP::get_meta_key(user_id), mtime, &objv_tracker, + null_yield, MDLOG_STATUS_WRITE, [&] { return store->svc.cls->mfa.create_mfa(user_id, config, &objv_tracker, mtime, null_yield); diff --git a/src/rgw/rgw_aio.cc b/src/rgw/rgw_aio.cc index c42d8051e1d..92fd6e84605 100644 --- a/src/rgw/rgw_aio.cc +++ b/src/rgw/rgw_aio.cc @@ -89,7 +89,7 @@ Aio::OpFunc aio_abstract(Op&& op, boost::asio::io_context& context, auto ex = get_associated_executor(init.completion_handler); auto& ref = r.obj.get_ref(); - librados::async_operate(context, ref.ioctx, ref.obj.oid, &op, 0, + librados::async_operate(context, ref.pool.ioctx(), ref.obj.oid, &op, 0, bind_executor(ex, Handler{aio, r})); }; } diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 48f4d1b22e3..898d922b1dd 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -290,7 +290,8 @@ void check_bad_user_bucket_mapping(RGWRados *store, const rgw_user& user_id, if (fix) { cout << "fixing" << std::endl; r = store->ctl.bucket->link_bucket(user_id, actual_bucket, - bucket_info.creation_time); + bucket_info.creation_time, + null_yield); if (r < 0) { cerr << "failed to fix bucket: " << cpp_strerror(-r) << std::endl; } @@ -392,7 +393,7 @@ int rgw_remove_bucket(RGWRados *store, rgw_bucket& bucket, bool delete_children, return ret; } - ret = store->ctl.bucket->unlink_bucket(info.owner, bucket, false); + ret = store->ctl.bucket->unlink_bucket(info.owner, bucket, null_yield, false); if (ret < 0) { lderr(store->ctx()) << "ERROR: unable to remove user bucket information" << dendl; } @@ -557,7 +558,7 @@ int rgw_remove_bucket_bypass_gc(RGWRados *store, rgw_bucket& bucket, return ret; } - ret = store->ctl.bucket->unlink_bucket(info.owner, bucket, false); + ret = store->ctl.bucket->unlink_bucket(info.owner, bucket, null_yield, false); if (ret < 0) { lderr(store->ctx()) << "ERROR: unable to remove user bucket information" << dendl; } @@ -609,7 +610,7 @@ int RGWBucket::init(RGWRados *storage, RGWBucketAdminOpState& op_state) return 0; } -int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) +int RGWBucket::link(RGWBucketAdminOpState& op_state, optional_yield y, std::string *err_msg) { if (!op_state.is_user_op()) { set_err_msg(err_msg, "empty user id"); @@ -640,9 +641,9 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) auto bucket_ctl = store->ctl.bucket; - int r = bucket_ctl->read_bucket_instance_info(bucket, &bucket_info, null_yield, RGWBucketCtl::BucketInstance::GetParams() + int r = bucket_ctl->read_bucket_instance_info(bucket, &bucket_info, y, RGWBucketCtl::BucketInstance::GetParams() .set_attrs(&attrs) - .set_objv_tracker(&objv_tracker), + .set_objv_tracker(&objv_tracker) .set_bectx_params(&obj_ctx)); if (r < 0) { return r; @@ -662,7 +663,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) return -EIO; } - r = store->ctl.bucket->unlink_bucket(owner.get_id(), bucket, false); + r = store->ctl.bucket->unlink_bucket(owner.get_id(), bucket, y, false); if (r < 0) { set_err_msg(err_msg, "could not unlink policy from user " + owner.get_id().to_str()); return r; @@ -679,9 +680,10 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) // ...and encode the acl policy.encode(attrs[RGW_ATTR_ACL]); - r = bucket_ctl->store_bucket_instance_info(bucket, bucket_info, RGWBucketCtl::BucketInstance::PutParams() - .set_attrs(&attrs) - .set_objv_tracker(&objv_tracker)); + r = bucket_ctl->store_bucket_instance_info(bucket, bucket_info, y, + RGWBucketCtl::BucketInstance::PutParams() + .set_attrs(&attrs) + .set_objv_tracker(&objv_tracker)); if (r < 0) { return r; } @@ -691,7 +693,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) RGWBucketEntryPoint be; map be_attrs; RGWObjVersionTracker be_ot; - r = bucket_ctl->read_bucket_entrypoint_info(bucket, &be, null_yield, RGWBucketCtl::Bucket::GetParams() + r = bucket_ctl->read_bucket_entrypoint_info(bucket, &be, y, RGWBucketCtl::Bucket::GetParams() .set_objv_tracker(&be_ot) .set_attrs(&be_attrs)); if (r < 0) { @@ -701,7 +703,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) be.owner = bucket_info.owner; be_attrs[RGW_ATTR_ACL] = attrs[RGW_ATTR_ACL]; - r = bucket_ctl->store_bucket_entrypoint_info(bucket, be, null_yield, RGWBucketCtl::Bucket::PutParams() + r = bucket_ctl->store_bucket_entrypoint_info(bucket, be, y, RGWBucketCtl::Bucket::PutParams() .set_objv_tracker(&be_ot) .set_attrs(&be_attrs)); if (r < 0) { @@ -711,7 +713,8 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) /* link to user */ r = store->ctl.bucket->link_bucket(user_info.user_id, bucket_info.bucket, - ceph::real_time()); + ceph::real_time(), + y); if (r < 0) { return r; } @@ -720,7 +723,7 @@ int RGWBucket::link(RGWBucketAdminOpState& op_state, std::string *err_msg) return 0; } -int RGWBucket::unlink(RGWBucketAdminOpState& op_state, std::string *err_msg) +int RGWBucket::unlink(RGWBucketAdminOpState& op_state, optional_yield y, std::string *err_msg) { rgw_bucket bucket = op_state.get_bucket(); @@ -729,7 +732,7 @@ int RGWBucket::unlink(RGWBucketAdminOpState& op_state, std::string *err_msg) return -EINVAL; } - int r = store->ctl.bucket->unlink_bucket(user_info.user_id, bucket); + int r = store->ctl.bucket->unlink_bucket(user_info.user_id, bucket, y); if (r < 0) { set_err_msg(err_msg, "error unlinking bucket" + cpp_strerror(-r)); } @@ -1144,7 +1147,7 @@ int RGWBucketAdminOp::unlink(RGWRados *store, RGWBucketAdminOpState& op_state) if (ret < 0) return ret; - return bucket.unlink(op_state); + return bucket.unlink(op_state, null_yield); } int RGWBucketAdminOp::link(RGWRados *store, RGWBucketAdminOpState& op_state, string *err) @@ -1155,7 +1158,7 @@ int RGWBucketAdminOp::link(RGWRados *store, RGWBucketAdminOpState& op_state, str if (ret < 0) return ret; - return bucket.link(op_state, err); + return bucket.link(op_state, null_yield, err); } @@ -1688,7 +1691,7 @@ int RGWBucketAdminOp::clear_stale_instances(RGWRados *store, int ret = purge_bucket_instance(store, binfo); if (ret == 0){ auto md_key = "bucket.instance:" + binfo.bucket.get_key(); - ret = store->ctl.meta.mgr->remove(md_key); + ret = store->ctl.meta.mgr->remove(md_key, null_yield); } formatter->open_object_section("delete_status"); formatter->dump_string("bucket_instance", binfo.bucket.get_key()); @@ -1754,7 +1757,7 @@ int RGWBucketAdminOp::fix_lc_shards(RGWRados *store, process_single_lc_entry(store, formatter, user_id.tenant, bucket_name); formatter->flush(cout); } else { - int ret = store->meta_mgr->list_keys_init("bucket", marker, &handle); + int ret = store->ctl.meta.mgr->list_keys_init("bucket", marker, &handle); if (ret < 0) { std::cerr << "ERROR: can't get key: " << cpp_strerror(-ret) << std::endl; return ret; @@ -1763,13 +1766,13 @@ int RGWBucketAdminOp::fix_lc_shards(RGWRados *store, { formatter->open_array_section("lc_fix_status"); auto sg = make_scope_guard([&store, &handle, &formatter](){ - store->meta_mgr->list_keys_complete(handle); + store->ctl.meta.mgr->list_keys_complete(handle); formatter->close_section(); // lc_fix_status formatter->flush(cout); }); do { list keys; - ret = store->meta_mgr->list_keys_next(handle, default_max_keys, keys, &truncated); + ret = store->ctl.meta.mgr->list_keys_next(handle, default_max_keys, keys, &truncated); if (ret < 0 && ret != -ENOENT) { std::cerr << "ERROR: lists_keys_next(): " << cpp_strerror(-ret) << std::endl; return ret; @@ -2417,12 +2420,12 @@ public: * it immediately and don't want to invalidate our cached objv_version or the bucket obj removal * will incorrectly fail. */ - ret = ctl.bucket->unlink_bucket(be.owner, be.bucket, false); + ret = ctl.bucket->unlink_bucket(be.owner, be.bucket, y, false); if (ret < 0) { lderr(svc.bucket->ctx()) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl; } - ret = svc.bucket->remove_bucket_entrypoint_info(ctx, entry, &objv_tracker); + ret = svc.bucket->remove_bucket_entrypoint_info(ctx, entry, &objv_tracker, y); if (ret < 0) { lderr(svc.bucket->ctx()) << "could not delete bucket=" << entry << dendl; } @@ -2451,7 +2454,8 @@ public: RGWMetadataHandlerPut_Bucket(RGWBucketMetadataHandler *_handler, RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker, - RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, type), + optional_yield y, + RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, y, type), bhandler(_handler) { obj = static_cast(_obj); } @@ -2468,9 +2472,10 @@ public: int RGWBucketMetadataHandler::do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, + optional_yield y, RGWMDLogSyncType type) { - RGWMetadataHandlerPut_Bucket put_op(this, op, entry, obj, objv_tracker, type); + RGWMetadataHandlerPut_Bucket put_op(this, op, entry, obj, objv_tracker, y, type); return do_put_operate(&put_op); } @@ -2493,7 +2498,8 @@ int RGWMetadataHandlerPut_Bucket::put_checked() false, mtime, pattrs, - &objv_tracker); + &objv_tracker, + y); } int RGWMetadataHandlerPut_Bucket::put_post() @@ -2504,9 +2510,9 @@ int RGWMetadataHandlerPut_Bucket::put_post() /* link bucket */ if (be.linked) { - ret = bhandler->ctl.bucket->link_bucket(be.owner, be.bucket, be.creation_time, false); + ret = bhandler->ctl.bucket->link_bucket(be.owner, be.bucket, be.creation_time, y, false); } else { - ret = bhandler->ctl.bucket->unlink_bucket(be.owner, be.bucket, false); + ret = bhandler->ctl.bucket->unlink_bucket(be.owner, be.bucket, y, false); } return ret; @@ -2670,7 +2676,7 @@ public: /* link new bucket */ - ret = ctl.bucket->link_bucket(new_be.owner, new_be.bucket, new_be.creation_time, false, y); + ret = ctl.bucket->link_bucket(new_be.owner, new_be.bucket, new_be.creation_time, y, false); if (ret < 0) { ldout(cct, 0) << "ERROR: failed to link new bucket for bucket=" << new_be.bucket << " ret=" << ret << dendl; return ret; @@ -2678,7 +2684,7 @@ public: /* clean up old stuff */ - ret = ctl.bucket->unlink_bucket(be.owner, entry_bucket, false, y); + ret = ctl.bucket->unlink_bucket(be.owner, entry_bucket, y, false); if (ret < 0) { lderr(cct) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl; } @@ -2716,7 +2722,7 @@ public: if (entry.find("-deleted-") != string::npos) { RGWObjVersionTracker ot; RGWMetadataObject *robj; - int ret = do_get(op, entry, &robj); + int ret = do_get(op, entry, &robj, y); if (ret != -ENOENT) { if (ret < 0) { return ret; @@ -2802,6 +2808,7 @@ public: int do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker, + optional_yield y, RGWMDLogSyncType sync_type) override; int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker, @@ -2814,7 +2821,7 @@ public: if (ret < 0 && ret != -ENOENT) return ret; - return svc.bucket->remove_bucket_instance_info(ctx, entry, &bci.info.objv_tracker); + return svc.bucket->remove_bucket_instance_info(ctx, entry, &bci.info.objv_tracker, y); } int call(std::function f) { @@ -2840,7 +2847,8 @@ public: RGWBucketInstanceMetadataHandler *_handler, RGWSI_MetaBackend_Handler::Op *_op, string& entry, RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker, - RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, _op, entry, obj, objv_tracker, type), + optional_yield y, + RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, _op, entry, obj, objv_tracker, y, type), bihandler(_handler) { obj = static_cast(_obj); @@ -2929,7 +2937,8 @@ int RGWMetadataHandlerPut_BucketInstance::put_checked() orig_info, false, mtime, - pattrs); + pattrs, + y); } int RGWMetadataHandlerPut_BucketInstance::put_post() @@ -2949,7 +2958,7 @@ class RGWArchiveBucketInstanceMetadataHandler : public RGWBucketInstanceMetadata public: RGWArchiveBucketInstanceMetadataHandler() {} - int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker) override { + int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y) override { ldout(cct, 0) << "SKIP: bucket instance removal is not allowed on archive zone: bucket.instance:" << entry << dendl; return 0; } @@ -3000,9 +3009,9 @@ int RGWBucketCtl::read_bucket_entrypoint_info(const rgw_bucket& bucket, params.objv_tracker, params.mtime, params.attrs, + y, params.cache_info, - params.refresh_version, - y); + params.refresh_version); }); } @@ -3032,7 +3041,8 @@ int RGWBucketCtl::remove_bucket_entrypoint_info(const rgw_bucket& bucket, return bm_handler->call([&](RGWSI_Bucket_EP_Ctx& ctx) { return svc.bucket->remove_bucket_entrypoint_info(ctx, RGWSI_Bucket::get_entrypoint_meta_key(bucket), - params.objv_tracker); + params.objv_tracker, + y); }); } @@ -3048,9 +3058,9 @@ int RGWBucketCtl::read_bucket_instance_info(const rgw_bucket& bucket, info, params.mtime, params.attrs, + y, params.cache_info, - params.refresh_version, - y); + params.refresh_version); }); if (ret < 0) { @@ -3078,7 +3088,7 @@ int RGWBucketCtl::read_bucket_info(const rgw_bucket& bucket, if (b->bucket_id.empty()) { ep.emplace(); - int r = read_bucket_entrypoint_info(*b, &(*ep), RGWBucketCtl::Bucket::GetParams() + int r = read_bucket_entrypoint_info(*b, &(*ep), y, RGWBucketCtl::Bucket::GetParams() .set_bectx_params(params.bectx_params) .set_objv_tracker(ep_objv_tracker)); if (r < 0) { @@ -3094,9 +3104,9 @@ int RGWBucketCtl::read_bucket_info(const rgw_bucket& bucket, info, params.mtime, params.attrs, + y, params.cache_info, - params.refresh_version, - y); + params.refresh_version); }); if (ret < 0) { @@ -3137,7 +3147,7 @@ int RGWBucketCtl::store_bucket_instance_info(const rgw_bucket& bucket, ceph::optional_ref_default _params) { return bmi_handler->call([&](RGWSI_Bucket_BI_Ctx& ctx) { - return do_store_bucket_instance_info(ctx, bucket, info, _params, y); + return do_store_bucket_instance_info(ctx, bucket, info, y, _params); }); } @@ -3165,7 +3175,8 @@ int RGWBucketCtl::do_store_linked_bucket_info(RGWSI_Bucket_X_Ctx& ctx, bool exclusive, real_time mtime, obj_version *pep_objv, map *pattrs, - bool create_entry_point) + bool create_entry_point, + optional_yield y) { bool create_head = !info.has_instance_obj || create_entry_point; @@ -3174,7 +3185,8 @@ int RGWBucketCtl::do_store_linked_bucket_info(RGWSI_Bucket_X_Ctx& ctx, info, orig_info, exclusive, - mtime, pattrs); + mtime, pattrs, + y); if (ret < 0) { return ret; } @@ -3202,7 +3214,8 @@ int RGWBucketCtl::do_store_linked_bucket_info(RGWSI_Bucket_X_Ctx& ctx, exclusive, mtime, pattrs, - &ot); + &ot, + y); if (ret < 0) return ret; @@ -3278,10 +3291,11 @@ int RGWBucketCtl::set_bucket_instance_attrs(RGWBucketInfo& bucket_info, int RGWBucketCtl::link_bucket(const rgw_user& user_id, const rgw_bucket& bucket, ceph::real_time creation_time, + optional_yield y, bool update_entrypoint) { return bm_handler->call([&](RGWSI_Bucket_EP_Ctx& ctx) { - return do_link_bucket(ctx, user_id, bucket, creation_time, update_entrypoint); + return do_link_bucket(ctx, user_id, bucket, creation_time, y, update_entrypoint); }); } @@ -3289,6 +3303,7 @@ int RGWBucketCtl::do_link_bucket(RGWSI_Bucket_EP_Ctx& ctx, const rgw_user& user_id, const rgw_bucket& bucket, ceph::real_time creation_time, + optional_yield y, bool update_entrypoint) { int ret; @@ -3305,7 +3320,8 @@ int RGWBucketCtl::do_link_bucket(RGWSI_Bucket_EP_Ctx& ctx, ret = svc.bucket->read_bucket_entrypoint_info(ctx, meta_key, &ep, &ot, - nullptr, &attrs); + nullptr, &attrs, + y); if (ret < 0 && ret != -ENOENT) { ldout(cct, 0) << "ERROR: store->get_bucket_entrypoint_info() returned: " << cpp_strerror(-ret) << dendl; @@ -3325,13 +3341,13 @@ int RGWBucketCtl::do_link_bucket(RGWSI_Bucket_EP_Ctx& ctx, ep.linked = true; ep.owner = user_id; ep.bucket = bucket; - ret = svc.bucket->store_bucket_entrypoint_info(ctx, meta_key, ep, false, real_time(), &attrs, &ot); + ret = svc.bucket->store_bucket_entrypoint_info(ctx, meta_key, ep, false, real_time(), &attrs, &ot, y); if (ret < 0) goto done_err; return 0; done_err: - int r = do_unlink_bucket(ctx, user_id, bucket, true); + int r = do_unlink_bucket(ctx, user_id, bucket, y, true); if (r < 0) { ldout(cct, 0) << "ERROR: failed unlinking bucket on error cleanup: " << cpp_strerror(-r) << dendl; @@ -3339,16 +3355,17 @@ done_err: return ret; } -int RGWBucketCtl::unlink_bucket(const rgw_user& user_id, const rgw_bucket& bucket, bool update_entrypoint) +int RGWBucketCtl::unlink_bucket(const rgw_user& user_id, const rgw_bucket& bucket, optional_yield y, bool update_entrypoint) { return bm_handler->call([&](RGWSI_Bucket_EP_Ctx& ctx) { - return do_unlink_bucket(ctx, user_id, bucket, update_entrypoint); + return do_unlink_bucket(ctx, user_id, bucket, y, update_entrypoint); }); } int RGWBucketCtl::do_unlink_bucket(RGWSI_Bucket_EP_Ctx& ctx, const rgw_user& user_id, const rgw_bucket& bucket, + optional_yield y, bool update_entrypoint) { int ret = ctl.user->remove_bucket(user_id, bucket); @@ -3364,7 +3381,7 @@ int RGWBucketCtl::do_unlink_bucket(RGWSI_Bucket_EP_Ctx& ctx, RGWObjVersionTracker ot; map attrs; string meta_key = RGWSI_Bucket::get_entrypoint_meta_key(bucket); - ret = svc.bucket->read_bucket_entrypoint_info(ctx, meta_key, &ep, &ot, nullptr, &attrs); + ret = svc.bucket->read_bucket_entrypoint_info(ctx, meta_key, &ep, &ot, nullptr, &attrs, y); if (ret == -ENOENT) return 0; if (ret < 0) @@ -3379,7 +3396,7 @@ int RGWBucketCtl::do_unlink_bucket(RGWSI_Bucket_EP_Ctx& ctx, } ep.linked = false; - return svc.bucket->store_bucket_entrypoint_info(ctx, meta_key, ep, false, real_time(), &attrs, &ot); + return svc.bucket->store_bucket_entrypoint_info(ctx, meta_key, ep, false, real_time(), &attrs, &ot, y); } int RGWBucketCtl::read_bucket_stats(const rgw_bucket& bucket, @@ -3402,7 +3419,7 @@ int RGWBucketCtl::read_buckets_stats(map& m, int RGWBucketCtl::sync_user_stats(const rgw_user& user_id, const RGWBucketInfo& bucket_info) { RGWBucketEnt ent; - int r = svc.bi->read_stats(bucket_info, &ent); + int r = svc.bi->read_stats(bucket_info, &ent, null_yield); if (r < 0) { ldout(cct, 20) << __func__ << "(): failed to read bucket stats (r=" << r << ")" << dendl; return r; diff --git a/src/rgw/rgw_bucket.h b/src/rgw/rgw_bucket.h index 748ed236c4a..8b8444b6f11 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -339,8 +339,8 @@ public: std::string *err_msg = NULL); int remove(RGWBucketAdminOpState& op_state, optional_yield y, bool bypass_gc = false, bool keep_index_consistent = true, std::string *err_msg = NULL); - int link(RGWBucketAdminOpState& op_state, std::string *err_msg = NULL); - int unlink(RGWBucketAdminOpState& op_state, std::string *err_msg = NULL); + int link(RGWBucketAdminOpState& op_state, optional_yield y, std::string *err_msg = NULL); + int unlink(RGWBucketAdminOpState& op_state, optional_yield y, std::string *err_msg = NULL); int set_quota(RGWBucketAdminOpState& op_state, std::string *err_msg = NULL); int remove_object(RGWBucketAdminOpState& op_state, std::string *err_msg = NULL); @@ -777,8 +777,8 @@ public: optional_yield y, ceph::optional_ref_default params = std::nullopt); int remove_bucket_instance_info(const rgw_bucket& bucket, - optional_yield y, RGWBucketInfo& info, + optional_yield y, ceph::optional_ref_default params = std::nullopt); /* @@ -790,7 +790,8 @@ public: int read_bucket_info(const rgw_bucket& bucket, RGWBucketInfo *info, optional_yield y, - ceph::optional_ref_default _params = std::nullopt); + ceph::optional_ref_default _params = std::nullopt, + RGWObjVersionTracker *ep_objv_tracker = nullptr); int set_bucket_instance_attrs(RGWBucketInfo& bucket_info, @@ -802,10 +803,12 @@ public: int link_bucket(const rgw_user& user_id, const rgw_bucket& bucket, ceph::real_time creation_time, + optional_yield y, bool update_entrypoint = true); int unlink_bucket(const rgw_user& user_id, const rgw_bucket& bucket, + optional_yield y, bool update_entrypoint = true); int read_buckets_stats(map& m, @@ -835,17 +838,20 @@ private: bool exclusive, real_time mtime, obj_version *pep_objv, map *pattrs, - bool create_entry_point); + bool create_entry_point, + optional_yield); int do_link_bucket(RGWSI_Bucket_EP_Ctx& ctx, const rgw_user& user, const rgw_bucket& bucket, ceph::real_time creation_time, + optional_yield y, bool update_entrypoint); int do_unlink_bucket(RGWSI_Bucket_EP_Ctx& ctx, const rgw_user& user_id, const rgw_bucket& bucket, + optional_yield y, bool update_entrypoint); }; diff --git a/src/rgw/rgw_cr_tools.cc b/src/rgw/rgw_cr_tools.cc index 90c8f6c2558..dc1abd813bb 100644 --- a/src/rgw/rgw_cr_tools.cc +++ b/src/rgw/rgw_cr_tools.cc @@ -209,10 +209,10 @@ int RGWBucketCreateLocalCR::Request::_send_request() bucket = info.bucket; } - ret = store->ctl.bucket->link_bucket(user, bucket, info.creation_time, false); + ret = store->ctl.bucket->link_bucket(user, bucket, info.creation_time, null_yield, false); if (ret && !existed && ret != -EEXIST) { /* if it exists (or previously existed), don't remove it! */ - int r = store->ctl.bucket->unlink_bucket(user, bucket); + int r = store->ctl.bucket->unlink_bucket(user, bucket, null_yield); if (r < 0) { ldout(cct, 0) << "WARNING: failed to unlink bucket: ret=" << r << dendl; } diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index b75451d8c81..dda12a87dd1 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -829,10 +829,10 @@ public: char buf[16]; snprintf(buf, sizeof(buf), ":%d", i); s = key + buf; - yield entries_index->append(s, store->svc.data_log_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, i)); + yield entries_index->append(s, store->svc.datalog_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, i)); } } else { - yield entries_index->append(key, store->svc.data_log_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, -1)); + yield entries_index->append(key, store->svc.datalog_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, -1)); } } truncated = result.truncated; diff --git a/src/rgw/rgw_lc.cc b/src/rgw/rgw_lc.cc index a4493704072..388fc836512 100644 --- a/src/rgw/rgw_lc.cc +++ b/src/rgw/rgw_lc.cc @@ -28,6 +28,7 @@ #include "fmt/format.h" #include "services/svc_sys_obj.h" +#include "services/svc_zone.h" #include "services/svc_tier_rados.h" #define dout_context g_ceph_context @@ -1434,7 +1435,8 @@ int RGWLC::set_bucket_config(RGWBucketInfo& bucket_info, attrs[RGW_ATTR_LC] = std::move(lc_bl); int ret = store->ctl.bucket->set_bucket_instance_attrs(bucket_info, attrs, - &bucket_info.objv_tracker); + &bucket_info.objv_tracker, + null_yield); if (ret < 0) return ret; @@ -1455,7 +1457,8 @@ int RGWLC::remove_bucket_config(RGWBucketInfo& bucket_info, map attrs = bucket_attrs; attrs.erase(RGW_ATTR_LC); int ret = store->ctl.bucket->set_bucket_instance_attrs(bucket_info, attrs, - &bucket_info.objv_tracker); + &bucket_info.objv_tracker, + null_yield); rgw_bucket& bucket = bucket_info.bucket; diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index 6cf5b44a06b..c9395a26c51 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -320,21 +320,14 @@ public: return -ENOTSUP; } - int remove(string& entry, RGWObjVersionTracker& objv_tracker optional_yield y, override { - return -ENOTSUP; - } - - int mutate(const string& entry, - const ceph::real_time& mtime, - RGWObjVersionTracker *objv_tracker, - RGWMDLogStatus op_type, - std::function f) { + int remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y) override { return -ENOTSUP; } int mutate(const string& entry, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, + optional_yield y, RGWMDLogStatus op_type, std::function f) { return -ENOTSUP; @@ -411,7 +404,8 @@ RGWMetadataHandler_GenericMetaBE::Put::Put(RGWMetadataHandler_GenericMetaBE *_ha RGWMetadataHandlerPut_SObj::RGWMetadataHandlerPut_SObj(RGWMetadataHandler_GenericMetaBE *handler, RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, - RGWMDLogSyncType type) : Put(handler, op, entry, obj, objv_tracker, type) { + optional_yield y, + RGWMDLogSyncType type) : Put(handler, op, entry, obj, objv_tracker, y, type) { } RGWMetadataHandlerPut_SObj::~RGWMetadataHandlerPut_SObj() { @@ -486,21 +480,21 @@ int RGWMetadataHandler_GenericMetaBE::do_put_operate(Put *put_op) return 0; } -int RGWMetadataHandler_GenericMetaBE::get(string& entry, RGWMetadataObject **obj) +int RGWMetadataHandler_GenericMetaBE::get(string& entry, RGWMetadataObject **obj, optional_yield y) { return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) { return do_get(op, entry, obj, y); }); } -int RGWMetadataHandler_GenericMetaBE::put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, RGWMDLogSyncType type) +int RGWMetadataHandler_GenericMetaBE::put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield y, RGWMDLogSyncType type) { return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) { return do_put(op, entry, obj, objv_tracker, y, type); }); } -int RGWMetadataHandler_GenericMetaBE::remove(string& entry, RGWObjVersionTracker& objv_tracker) +int RGWMetadataHandler_GenericMetaBE::remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y) { return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) { return do_remove(op, entry, objv_tracker, y); @@ -510,6 +504,7 @@ int RGWMetadataHandler_GenericMetaBE::remove(string& entry, RGWObjVersionTracker int RGWMetadataHandler_GenericMetaBE::mutate(const string& entry, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, + optional_yield y, RGWMDLogStatus op_type, std::function f) { @@ -518,21 +513,7 @@ int RGWMetadataHandler_GenericMetaBE::mutate(const string& entry, return op->mutate(entry, params, objv_tracker, - f); - }); -} - -int RGWMetadataHandler_GenericMetaBE::mutate(const string& entry, - const ceph::real_time& mtime, - RGWObjVersionTracker *objv_tracker, - RGWMDLogStatus op_type, - std::function f) -{ - return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) { - RGWSI_MetaBackend::MutateParams params(mtime, op_type); - return op->mutate(entry, - params, - objv_tracker, + y, f); }); } @@ -648,7 +629,7 @@ int RGWMetadataManager::find_handler(const string& metadata_key, RGWMetadataHand } -int RGWMetadataManager::get(string& metadata_key, Formatter *f) +int RGWMetadataManager::get(string& metadata_key, Formatter *f, optional_yield y) { RGWMetadataHandler *handler; string entry; @@ -659,7 +640,7 @@ int RGWMetadataManager::get(string& metadata_key, Formatter *f) RGWMetadataObject *obj; - ret = handler->get(entry, &obj); + ret = handler->get(entry, &obj, y); if (ret < 0) { return ret; } @@ -681,6 +662,7 @@ int RGWMetadataManager::get(string& metadata_key, Formatter *f) } int RGWMetadataManager::put(string& metadata_key, bufferlist& bl, + optional_yield y, RGWMDLogSyncType sync_type, obj_version *existing_version) { @@ -721,7 +703,7 @@ int RGWMetadataManager::put(string& metadata_key, bufferlist& bl, return -EINVAL; } - ret = handler->put(entry, obj, objv_tracker, sync_type); + ret = handler->put(entry, obj, objv_tracker, y, sync_type); if (existing_version) { *existing_version = objv_tracker.read_version; } @@ -731,7 +713,7 @@ int RGWMetadataManager::put(string& metadata_key, bufferlist& bl, return ret; } -int RGWMetadataManager::remove(string& metadata_key) +int RGWMetadataManager::remove(string& metadata_key, optional_yield y) { RGWMetadataHandler *handler; string entry; @@ -742,7 +724,7 @@ int RGWMetadataManager::remove(string& metadata_key) } RGWMetadataObject *obj; - ret = handler->get(entry, &obj); + ret = handler->get(entry, &obj, y); if (ret < 0) { return ret; } @@ -750,12 +732,13 @@ int RGWMetadataManager::remove(string& metadata_key) objv_tracker.read_version = obj->get_version(); delete obj; - return handler->remove(entry, objv_tracker); + return handler->remove(entry, objv_tracker, y); } int RGWMetadataManager::mutate(const string& metadata_key, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, + optional_yield y, RGWMDLogStatus op_type, std::function f) { @@ -767,7 +750,7 @@ int RGWMetadataManager::mutate(const string& metadata_key, return ret; } - return handler->mutate(entry, mtime, objv_tracker, op_type, f); + return handler->mutate(entry, mtime, objv_tracker, y, op_type, f); } int RGWMetadataManager::get_shard_id(const string& section, const string& entry, int *shard_id) diff --git a/src/rgw/rgw_metadata.h b/src/rgw/rgw_metadata.h index aca64f6afe2..194074d5daa 100644 --- a/src/rgw/rgw_metadata.h +++ b/src/rgw/rgw_metadata.h @@ -68,13 +68,14 @@ public: virtual RGWMetadataObject *get_meta_obj(JSONObj *jo, const obj_version& objv, const ceph::real_time& mtime) = 0; - virtual int get(string& entry, RGWMetadataObject **obj) = 0; - virtual int put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, RGWMDLogSyncType type) = 0; - virtual int remove(string& entry, RGWObjVersionTracker& objv_tracker) = 0; + virtual int get(string& entry, RGWMetadataObject **obj, optional_yield) = 0; + virtual int put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield, RGWMDLogSyncType type) = 0; + virtual int remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield) = 0; virtual int mutate(const string& entry, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, + optional_yield y, RGWMDLogStatus op_type, std::function f) = 0; @@ -102,11 +103,11 @@ public: protected: RGWSI_MetaBackend_Handler *be_handler; - virtual int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj) = 0; + virtual int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj, optional_yield y) = 0; virtual int do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *obj, - RGWObjVersionTracker& objv_tracker, RGWMDLogSyncType type) = 0; + RGWObjVersionTracker& objv_tracker, optional_yield y, RGWMDLogSyncType type) = 0; virtual int do_put_operate(Put *put_op); - virtual int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker) = 0; + virtual int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y) = 0; public: RGWMetadataHandler_GenericMetaBE() {} @@ -156,13 +157,14 @@ public: } }; - int get(string& entry, RGWMetadataObject **obj) override; - int put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, RGWMDLogSyncType type) override; - int remove(string& entry, RGWObjVersionTracker& objv_tracker) override; + int get(string& entry, RGWMetadataObject **obj, optional_yield) override; + int put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield, RGWMDLogSyncType type) override; + int remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield) override; int mutate(const string& entry, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, + optional_yield y, RGWMDLogStatus op_type, std::function f) override; @@ -233,12 +235,7 @@ public: int mutate(const string& metadata_key, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, - RGWMDLogStatus op_type, - std::function f); - - int mutate(const string& metadata_key, - const ceph::real_time& mtime, - RGWObjVersionTracker *objv_tracker, + optional_yield y, RGWMDLogStatus op_type, std::function f); @@ -268,6 +265,7 @@ protected: public: RGWMetadataHandlerPut_SObj(RGWMetadataHandler_GenericMetaBE *handler, RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, + optional_yield y, RGWMDLogSyncType type); ~RGWMetadataHandlerPut_SObj(); diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 53167ca2ccd..8ccc7392c5a 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -695,7 +695,7 @@ int rgw_build_bucket_policies(RGWRados* store, struct req_state* s) /* handle user ACL only for those APIs which support it */ if (s->user_acl) { map uattrs; - ret = store->ctl.user->get_attrs_by_uid(acct_acl_user.uid, &uattrs); + ret = store->ctl.user->get_attrs_by_uid(acct_acl_user.uid, &uattrs, s->yield); if (!ret) { ret = get_user_policy_from_attr(s->cct, store, uattrs, *s->user_acl); } @@ -721,7 +721,7 @@ int rgw_build_bucket_policies(RGWRados* store, struct req_state* s) if (! s->user->user_id.empty() && s->auth.identity->get_identity_type() != TYPE_ROLE) { try { map uattrs; - if (ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &uattrs); ! ret) { + if (ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &uattrs, s->yield); ! ret) { if (s->iam_user_policies.empty()) { s->iam_user_policies = get_iam_user_policy_from_attr(s->cct, store, uattrs, s->user->user_id.tenant); } else { @@ -1199,7 +1199,7 @@ void RGWPutBucketTags::execute() { op_ret = retry_raced_bucket_write(store, s, [this] { map attrs = s->bucket_attrs; attrs[RGW_ATTR_TAGS] = tags_bl; - return rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker); + return store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, &s->bucket_info.objv_tracker, s->yield); }); } @@ -1228,7 +1228,7 @@ void RGWDeleteBucketTags::execute() op_ret = retry_raced_bucket_write(store, s, [this] { map attrs = s->bucket_attrs; attrs.erase(RGW_ATTR_TAGS); - op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker); + op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, &s->bucket_info.objv_tracker, s->yield); if (op_ret < 0) { ldpp_dout(this, 0) << "RGWDeleteBucketTags() failed to remove RGW_ATTR_TAGS on bucket=" << s->bucket.name @@ -2300,7 +2300,7 @@ void RGWListBuckets::execute() } if (supports_account_metadata()) { - op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &attrs); + op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &attrs, s->yield); if (op_ret < 0) { goto send_end; } @@ -3258,10 +3258,10 @@ void RGWCreateBucket::execute() } op_ret = store->ctl.bucket->link_bucket(s->user->user_id, s->bucket, - info.creation_time, false); + info.creation_time, s->yield, false); if (op_ret && !existed && op_ret != -EEXIST) { /* if it exists (or previously existed), don't remove it! */ - op_ret = store->ctl.bucket->unlink_bucket(s->user->user_id, s->bucket); + op_ret = store->ctl.bucket->unlink_bucket(s->user->user_id, s->bucket, s->yield); if (op_ret < 0) { ldpp_dout(this, 0) << "WARNING: failed to unlink bucket: ret=" << op_ret << dendl; @@ -3318,7 +3318,8 @@ void RGWCreateBucket::execute() /* This will also set the quota on the bucket. */ op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); } while (op_ret == -ECANCELED && tries++ < 20); /* Restore the proper return code. */ @@ -3430,7 +3431,7 @@ void RGWDeleteBucket::execute() if (op_ret == 0) { op_ret = store->ctl.bucket->unlink_bucket(s->bucket_info.owner, - s->bucket, false); + s->bucket, s->yield, false); if (op_ret < 0) { ldpp_dout(this, 0) << "WARNING: failed to unlink bucket: ret=" << op_ret << dendl; @@ -4325,6 +4326,7 @@ int RGWPutMetadataAccount::init_processing() } op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &orig_attrs, + s->yield, &acct_op_tracker); if (op_ret < 0) { return op_ret; @@ -4497,7 +4499,8 @@ void RGWPutMetadataBucket::execute() * to this fact, the new quota settings can be serialized with * the same call. */ op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); return op_ret; }); } @@ -5365,7 +5368,8 @@ void RGWPutACLs::execute() attrs = s->bucket_attrs; attrs[RGW_ATTR_ACL] = bl; op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); } if (op_ret == -ECANCELED) { op_ret = 0; /* lost a race, but it's ok because acls are immutable */ @@ -5479,7 +5483,8 @@ void RGWDeleteLC::execute() map attrs = s->bucket_attrs; attrs.erase(RGW_ATTR_LC); op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); if (op_ret < 0) { ldpp_dout(this, 0) << "RGWLC::RGWDeleteLC() failed to set attrs on bucket=" << s->bucket.name << " returned err=" << op_ret << dendl; @@ -5536,7 +5541,8 @@ void RGWPutCORS::execute() map attrs = s->bucket_attrs; attrs[RGW_ATTR_CORS] = cors_bl; return store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); }); } @@ -5571,7 +5577,8 @@ void RGWDeleteCORS::execute() map attrs = s->bucket_attrs; attrs.erase(RGW_ATTR_CORS); op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); if (op_ret < 0) { ldpp_dout(this, 0) << "RGWLC::RGWDeleteCORS() failed to set attrs on bucket=" << s->bucket.name << " returned err=" << op_ret << dendl; @@ -6517,7 +6524,7 @@ bool RGWBulkDelete::Deleter::delete_single(const acct_path_t& path) } else { ret = store->delete_bucket(binfo, ot, s->yield); if (0 == ret) { - ret = store->ctl.bucket->unlink_bucket(binfo.owner, binfo.bucket, false); + ret = store->ctl.bucket->unlink_bucket(binfo.owner, binfo.bucket, s->yield, false); if (ret < 0) { ldpp_dout(s, 0) << "WARNING: failed to unlink bucket: ret=" << ret << dendl; } @@ -6889,10 +6896,11 @@ int RGWBulkUploadOp::handle_dir(const boost::string_ref path) } op_ret = store->ctl.bucket->link_bucket(s->user->user_id, bucket, - out_info.creation_time, false); + out_info.creation_time, + s->yield, false); if (op_ret && !existed && op_ret != -EEXIST) { /* if it exists (or previously existed), don't remove it! */ - op_ret = store->ctl.bucket->unlink_bucket(s->user->user_id, bucket); + op_ret = store->ctl.bucket->unlink_bucket(s->user->user_id, bucket, s->yield); if (op_ret < 0) { ldpp_dout(this, 0) << "WARNING: failed to unlink bucket: ret=" << op_ret << dendl; } @@ -7277,7 +7285,8 @@ void RGWSetAttrs::execute() s->bucket_attrs[iter.first] = std::move(iter.second); } op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); } } @@ -7499,7 +7508,8 @@ void RGWPutBucketPolicy::execute() attrs[RGW_ATTR_IAM_POLICY].clear(); attrs[RGW_ATTR_IAM_POLICY].append(p.text); op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); return op_ret; }); } catch (rgw::IAM::PolicyParseException& e) { @@ -7574,7 +7584,8 @@ void RGWDeleteBucketPolicy::execute() auto attrs = s->bucket_attrs; attrs.erase(RGW_ATTR_IAM_POLICY); op_ret = store->ctl.bucket->set_bucket_instance_attrs(s->bucket_info, attrs, - &s->bucket_info.objv_tracker); + &s->bucket_info.objv_tracker, + s->yield); return op_ret; }); } diff --git a/src/rgw/rgw_otp.cc b/src/rgw/rgw_otp.cc index 1478ae17050..33c6de8e7c5 100644 --- a/src/rgw/rgw_otp.cc +++ b/src/rgw/rgw_otp.cc @@ -91,7 +91,7 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase { return new RGWOTPMetadataObject(std::move(devices), objv, mtime); } - int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj) override { + int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj, optional_yield y) override { RGWObjVersionTracker objv_tracker; std::unique_ptr mdo(new RGWOTPMetadataObject); @@ -103,7 +103,8 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase { entry, &mdo->get_devs(), &mdo->get_mtime(), - &objv_tracker); + &objv_tracker, + y); if (ret < 0) { return ret; } @@ -117,6 +118,7 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase { int do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *_obj, RGWObjVersionTracker& objv_tracker, + optional_yield y, RGWMDLogSyncType type) override { RGWOTPMetadataObject *obj = static_cast(_obj); @@ -126,7 +128,8 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase { entry, obj->devices, obj->mtime, - &objv_tracker); + &objv_tracker, + y); if (ret < 0) { return ret; } @@ -134,14 +137,16 @@ class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase { return STATUS_APPLIED; } - int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker) override { + int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker, + optional_yield y) override { RGWSI_MBOTP_RemoveParams params; RGWSI_OTP_BE_Ctx be_ctx(op->ctx()); return svc.otp->remove_all(be_ctx, entry, - &objv_tracker); + &objv_tracker, + y); } public: @@ -167,30 +172,33 @@ void RGWOTPCtl::init(RGWOTPMetadataHandler *_meta_handler) int RGWOTPCtl::read_all(const rgw_user& uid, RGWOTPInfo *info, + optional_yield y, ceph::optional_ref_default _params) { auto& params = *_params; info->uid = uid; return meta_handler->call([&](RGWSI_OTP_BE_Ctx& ctx) { - return svc.otp->read_all(ctx, uid, &info->devices, params.mtime, params.objv_tracker); + return svc.otp->read_all(ctx, uid, &info->devices, params.mtime, params.objv_tracker, y); }); } int RGWOTPCtl::store_all(const RGWOTPInfo& info, + optional_yield y, ceph::optional_ref_default _params) { auto& params = *_params; return meta_handler->call([&](RGWSI_OTP_BE_Ctx& ctx) { - return svc.otp->store_all(ctx, info.uid, info.devices, params.mtime, params.objv_tracker); + return svc.otp->store_all(ctx, info.uid, info.devices, params.mtime, params.objv_tracker, y); }); } int RGWOTPCtl::remove_all(const rgw_user& uid, - ceph::optional_ref_default _params) + optional_yield y, + ceph::optional_ref_default _params) { auto& params = *_params; return meta_handler->call([&](RGWSI_OTP_BE_Ctx& ctx) { - return svc.otp->remove_all(ctx, uid, params.objv_tracker); + return svc.otp->remove_all(ctx, uid, params.objv_tracker, y); }); } diff --git a/src/rgw/rgw_otp.h b/src/rgw/rgw_otp.h index 6f2e9d8f7c0..7678070aff4 100644 --- a/src/rgw/rgw_otp.h +++ b/src/rgw/rgw_otp.h @@ -94,9 +94,9 @@ public: } }; - int read_all(const rgw_user& uid, RGWOTPInfo *info, ceph::optional_ref_default params); - int store_all(const RGWOTPInfo& info, ceph::optional_ref_default params); - int remove_all(const rgw_user& user, ceph::optional_ref_default params); + int read_all(const rgw_user& uid, RGWOTPInfo *info, optional_yield y, ceph::optional_ref_default params); + int store_all(const RGWOTPInfo& info, optional_yield y, ceph::optional_ref_default params); + int remove_all(const rgw_user& user, optional_yield y, ceph::optional_ref_default params); }; #endif diff --git a/src/rgw/rgw_putobj_processor.cc b/src/rgw/rgw_putobj_processor.cc index e7e09430823..58afda85d9f 100644 --- a/src/rgw/rgw_putobj_processor.cc +++ b/src/rgw/rgw_putobj_processor.cc @@ -561,7 +561,7 @@ int AppendObjectProcessor::prepare(optional_yield y) size_t pos = s.find("-"); cur_etag = s.substr(0, pos); } - cur_manifest = &astate->manifest; + cur_manifest = &(*astate->manifest); manifest.set_prefix(cur_manifest->get_prefix()); } manifest.set_multipart_part_rule(store->ctx()->_conf->rgw_obj_stripe_size, cur_part_num); diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 2efc833af5f..0426cbcc72b 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -2215,8 +2215,8 @@ int RGWRados::get_obj_head_ref(const RGWBucketInfo& bucket_info, const rgw_obj& ref->pool = svc.rados->pool(pool); - int r = ref->pool.open(RGWSI_RADOS::Pool::OpenParams() - .set_mostly_omap(false); + int r = ref->pool.open(RGWSI_RADOS::OpenParams() + .set_mostly_omap(false)); if (r < 0) { ldout(cct, 0) << "ERROR: failed opening data pool (pool=" << pool << "); r=" << r << dendl; return r; @@ -2236,8 +2236,8 @@ int RGWRados::get_raw_obj_ref(const rgw_raw_obj& obj, rgw_rados_ref *ref) ref->obj.pool = svc.zone->get_zone_params().domain_root; } ref->pool = svc.rados->pool(obj.pool); - int r = ref->pool.open(RGWSI_RADOS::Pool::OpenParams() - .set_mostly_omap(false); + int r = ref->pool.open(RGWSI_RADOS::OpenParams() + .set_mostly_omap(false)); if (r < 0) { ldout(cct, 0) << "ERROR: failed opening pool (pool=" << obj.pool << "); r=" << r << dendl; return r; @@ -4358,6 +4358,7 @@ int RGWRados::delete_bucket(RGWBucketInfo& bucket_info, RGWObjVersionTracker& ob RGWBucketEntryPoint ep; r = ctl.bucket->read_bucket_entrypoint_info(bucket_info.bucket, &ep, + null_yield, RGWBucketCtl::Bucket::GetParams() .set_objv_tracker(&objv_tracker)); if (r < 0 || @@ -4376,7 +4377,7 @@ int RGWRados::delete_bucket(RGWBucketInfo& bucket_info, RGWObjVersionTracker& ob } if (remove_ep) { - r = ctl.bucket->remove_bucket_entrypoint_info(bucket_info.bucket, + r = ctl.bucket->remove_bucket_entrypoint_info(bucket_info.bucket, null_yield, RGWBucketCtl::Bucket::RemoveParams() .set_objv_tracker(&objv_tracker)); if (r < 0) @@ -4386,7 +4387,7 @@ int RGWRados::delete_bucket(RGWBucketInfo& bucket_info, RGWObjVersionTracker& ob /* if the bucket is not synced we can remove the meta file */ if (!svc.zone->is_syncing_bucket_meta(bucket)) { RGWObjVersionTracker objv_tracker; - r = ctl.bucket->remove_bucket_instance_info(bucket, bucket_info); + r = ctl.bucket->remove_bucket_instance_info(bucket, bucket_info, null_yield); if (r < 0) { return r; } @@ -4654,17 +4655,6 @@ struct tombstone_entry { pg_ver(state.pg_ver) {} }; -struct tombstone_entry { - ceph::real_time mtime; - uint32_t zone_short_id; - uint64_t pg_ver; - - tombstone_entry() = default; - explicit tombstone_entry(const RGWObjState& state) - : mtime(state.mtime), zone_short_id(state.zone_short_id), - pg_ver(state.pg_ver) {} -}; - /** * Delete an object. * bucket: name of the bucket storing the object @@ -5152,7 +5142,7 @@ int RGWRados::get_obj_state_impl(RGWObjectCtx *rctx, const RGWBucketInfo& bucket if (need_follow_olh) { return get_olh_target_state(*rctx, bucket_info, obj, s, state, y); - } else if (obj.key.have_null_instance() && !s->has_manifest) { + } else if (obj.key.have_null_instance() && !s->manifest) { // read null version, and the head object only have olh info s->exists = false; return -ENOENT; @@ -5453,7 +5443,7 @@ int RGWRados::set_attrs(void *ctx, const RGWBucketInfo& bucket_info, rgw_obj& sr return r; // ensure null version object exist - if (src_obj.key.instance == "null" && !state->has_manifest) { + if (src_obj.key.instance == "null" && !state->manifest) { return -ENOENT; } @@ -7310,11 +7300,11 @@ int RGWRados::get_bucket_instance_info(RGWSysObjectCtx& obj_ctx, const rgw_bucke { RGWSI_MetaBackend_CtxParams bectx_params = RGWSI_MetaBackend_CtxParams_SObj(&obj_ctx); return ctl.bucket->read_bucket_instance_info(bucket, &info, + y, RGWBucketCtl::BucketInstance::GetParams() .set_mtime(pmtime) .set_attrs(pattrs) - .set_bectx_params(bectx_params), - .set_yield(y)); + .set_bectx_params(bectx_params)); } int RGWRados::get_bucket_info(RGWSysObjectCtx& obj_ctx, @@ -7343,7 +7333,7 @@ int RGWRados::try_refresh_bucket_info(RGWBucketInfo& info, auto rv = info.objv_tracker.read_version; - return ctl.bucket->read_bucket_info(bucket, &info, + return ctl.bucket->read_bucket_info(bucket, &info, null_yield, RGWBucketCtl::BucketInstance::GetParams() .set_mtime(pmtime) .set_attrs(pattrs) @@ -7353,7 +7343,7 @@ int RGWRados::try_refresh_bucket_info(RGWBucketInfo& info, int RGWRados::put_bucket_instance_info(RGWBucketInfo& info, bool exclusive, real_time mtime, map *pattrs) { - return ctl.bucket->store_bucket_instance_info(info.bucket, info, + return ctl.bucket->store_bucket_instance_info(info.bucket, info, null_yield, RGWBucketCtl::BucketInstance::PutParams() .set_exclusive(exclusive) .set_mtime(mtime) @@ -7387,7 +7377,7 @@ int RGWRados::put_linked_bucket_info(RGWBucketInfo& info, bool exclusive, real_t *pep_objv = ot.write_version; } } - ret = ctl.bucket->store_bucket_entrypoint_info(info.bucket, entry_point, RGWBucketCtl::Bucket::PutParams() + ret = ctl.bucket->store_bucket_entrypoint_info(info.bucket, entry_point, null_yield, RGWBucketCtl::Bucket::PutParams() .set_exclusive(exclusive) .set_objv_tracker(&ot) .set_mtime(mtime)); diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index ab66fc3c01e..6a0c3322e32 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -1502,64 +1502,4 @@ public: }; -class RGWRadosThread { - class Worker : public Thread { - CephContext *cct; - RGWRadosThread *processor; - Mutex lock; - Cond cond; - - void wait() { - Mutex::Locker l(lock); - cond.Wait(lock); - }; - - void wait_interval(const utime_t& wait_time) { - Mutex::Locker l(lock); - cond.WaitInterval(lock, wait_time); - } - - public: - Worker(CephContext *_cct, RGWRadosThread *_p) : cct(_cct), processor(_p), lock("RGWRadosThread::Worker") {} - void *entry() override; - void signal() { - Mutex::Locker l(lock); - cond.Signal(); - } - }; - - Worker *worker; - -protected: - CephContext *cct; - RGWRados *store; - - std::atomic down_flag = { false }; - - string thread_name; - - virtual uint64_t interval_msec() = 0; - virtual void stop_process() {} -public: - RGWRadosThread(RGWRados *_store, const string& thread_name = "radosgw") - : worker(NULL), cct(_store->ctx()), store(_store), thread_name(thread_name) {} - virtual ~RGWRadosThread() { - stop(); - } - - virtual int init() { return 0; } - virtual int process() = 0; - - bool going_down() { return down_flag; } - - void start(); - void stop(); - - void signal() { - if (worker) { - worker->signal(); - } - } -}; - #endif diff --git a/src/rgw/rgw_reshard.cc b/src/rgw/rgw_reshard.cc index cf7ce7ee52d..36f0acb43e5 100644 --- a/src/rgw/rgw_reshard.cc +++ b/src/rgw/rgw_reshard.cc @@ -630,7 +630,7 @@ int RGWBucketReshard::do_reshard(int num_shards, return -EIO; } - ret = store->ctl.bucket->link_bucket(new_bucket_info.owner, new_bucket_info.bucket, bucket_info.creation_time); + ret = store->ctl.bucket->link_bucket(new_bucket_info.owner, new_bucket_info.bucket, bucket_info.creation_time, null_yield); if (ret < 0) { lderr(store->ctx()) << "failed to link new bucket instance (bucket_id=" << new_bucket_info.bucket.bucket_id << ": " << cpp_strerror(-ret) << ")" << dendl; return ret; @@ -709,7 +709,7 @@ int RGWBucketReshard::execute(int num_shards, int max_op_entries, } ret = store->ctl.bucket->remove_bucket_instance_info(bucket_info.bucket, - bucket_info); + bucket_info, null_yield); if (ret < 0) { lderr(store->ctx()) << "Error: " << __func__ << " failed to clean old bucket info object \"" << @@ -740,6 +740,7 @@ error_out: ret2 = store->ctl.bucket->remove_bucket_instance_info(new_bucket_info.bucket, new_bucket_info, + null_yield, std::nullopt); if (ret2 < 0) { lderr(store->ctx()) << "Error: " << __func__ << diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc index 8c9ab5b8214..37ec4ac984e 100644 --- a/src/rgw/rgw_rest.cc +++ b/src/rgw/rgw_rest.cc @@ -1838,7 +1838,7 @@ int RGWHandler_REST::init_permissions(RGWOp* op) if (! s->user->user_id.empty() && s->auth.identity->get_identity_type() != TYPE_ROLE) { try { map uattrs; - if (auto ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &uattrs); ! ret) { + if (auto ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &uattrs, null_yield); ! ret) { if (s->iam_user_policies.empty()) { s->iam_user_policies = get_iam_user_policy_from_attr(s->cct, store, uattrs, s->user->user_id.tenant); } else { diff --git a/src/rgw/rgw_rest_metadata.cc b/src/rgw/rgw_rest_metadata.cc index 43d5d8d4b95..5cc0660fee0 100644 --- a/src/rgw/rgw_rest_metadata.cc +++ b/src/rgw/rgw_rest_metadata.cc @@ -56,7 +56,7 @@ void RGWOp_Metadata_Get::execute() { auto meta_mgr = store->ctl.meta.mgr; /* Get keys */ - http_ret = meta_mgr->get(metadata_key, s->formatter); + http_ret = meta_mgr->get(metadata_key, s->formatter, s->yield); if (http_ret < 0) { dout(5) << "ERROR: can't get key: " << cpp_strerror(http_ret) << dendl; return; @@ -262,7 +262,7 @@ void RGWOp_Metadata_Put::execute() { } } - http_ret = store->ctl.meta.mgr->put(metadata_key, bl, sync_type, + http_ret = store->ctl.meta.mgr->put(metadata_key, bl, s->yield, sync_type, &ondisk_version); if (http_ret < 0) { dout(5) << "ERROR: can't put key: " << cpp_strerror(http_ret) << dendl; @@ -293,7 +293,7 @@ void RGWOp_Metadata_Delete::execute() { string metadata_key; frame_metadata_key(s, metadata_key); - http_ret = store->ctl.meta.mgr->remove(metadata_key); + http_ret = store->ctl.meta.mgr->remove(metadata_key, s->yield); if (http_ret < 0) { dout(5) << "ERROR: can't remove key: " << cpp_strerror(http_ret) << dendl; return; diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 991149cb8ce..19406c8fcf1 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -545,7 +545,7 @@ static void dump_container_metadata(struct req_state *s, void RGWStatAccount_ObjStore_SWIFT::execute() { RGWStatAccount_ObjStore::execute(); - op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &attrs); + op_ret = store->ctl.user->get_attrs_by_uid(s->user->user_id, &attrs, s->yield); } void RGWStatAccount_ObjStore_SWIFT::send_response() diff --git a/src/rgw/rgw_rest_user_policy.cc b/src/rgw/rgw_rest_user_policy.cc index 6b64c8ca1c0..34b521b00a1 100644 --- a/src/rgw/rgw_rest_user_policy.cc +++ b/src/rgw/rgw_rest_user_policy.cc @@ -125,7 +125,7 @@ void RGWPutUserPolicy::execute() } map uattrs; - op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs); + op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield); if (op_ret == -ENOENT) { op_ret = -ERR_NO_SUCH_ENTITY; return; @@ -190,7 +190,7 @@ void RGWGetUserPolicy::execute() rgw_user user_id(user_name); map uattrs; - op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs); + op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield); if (op_ret == -ENOENT) { ldout(s->cct, 0) << "ERROR: attrs not found for user" << user_name << dendl; op_ret = -ERR_NO_SUCH_ENTITY; @@ -254,7 +254,7 @@ void RGWListUserPolicies::execute() rgw_user user_id(user_name); map uattrs; - op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs); + op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield); if (op_ret == -ENOENT) { ldout(s->cct, 0) << "ERROR: attrs not found for user" << user_name << dendl; op_ret = -ERR_NO_SUCH_ENTITY; @@ -323,7 +323,7 @@ void RGWDeleteUserPolicy::execute() } map uattrs; - op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs); + op_ret = store->ctl.user->get_attrs_by_uid(user_id, &uattrs, s->yield); if (op_ret == -ENOENT) { op_ret = -ERR_NO_SUCH_ENTITY; return; diff --git a/src/rgw/rgw_sync.cc b/src/rgw/rgw_sync.cc index ea7f61883d6..5aab1234198 100644 --- a/src/rgw/rgw_sync.cc +++ b/src/rgw/rgw_sync.cc @@ -1087,7 +1087,7 @@ class RGWAsyncMetaStoreEntry : public RGWAsyncRadosRequest { bufferlist bl; protected: int _send_request() override { - int ret = store->ctl.meta.mgr->put(raw_key, bl, RGWMDLogSyncType::APPLY_ALWAYS); + int ret = store->ctl.meta.mgr->put(raw_key, bl, null_yield, RGWMDLogSyncType::APPLY_ALWAYS); if (ret < 0) { ldout(store->ctx(), 0) << "ERROR: can't store key: " << raw_key << " ret=" << ret << dendl; return ret; @@ -1139,7 +1139,7 @@ class RGWAsyncMetaRemoveEntry : public RGWAsyncRadosRequest { string raw_key; protected: int _send_request() override { - int ret = store->ctl.meta.mgr->remove(raw_key); + int ret = store->ctl.meta.mgr->remove(raw_key, null_yield); if (ret < 0) { ldout(store->ctx(), 0) << "ERROR: can't remove key: " << raw_key << " ret=" << ret << dendl; return ret; diff --git a/src/rgw/rgw_tools.cc b/src/rgw/rgw_tools.cc index c5570c3b05a..3dbc6343c38 100644 --- a/src/rgw/rgw_tools.cc +++ b/src/rgw/rgw_tools.cc @@ -124,7 +124,7 @@ void rgw_shard_name(const string& prefix, unsigned shard_id, string& name) } int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& oid, bufferlist& data, bool exclusive, - RGWObjVersionTracker *objv_tracker, real_time set_mtime, map *pattrs) + RGWObjVersionTracker *objv_tracker, real_time set_mtime, optional_yield y, map *pattrs) { map no_attrs; if (!pattrs) { @@ -139,13 +139,22 @@ int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const str .set_exclusive(exclusive) .set_mtime(set_mtime) .set_attrs(*pattrs) - .write(data, null_yield); + .write(data, y); return ret; } +int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& oid, bufferlist& data, bool exclusive, + RGWObjVersionTracker *objv_tracker, real_time set_mtime, map *pattrs) +{ + return rgw_put_system_obj(obj_ctx, pool, oid, data, exclusive, + objv_tracker, set_mtime, null_yield, pattrs); +} + int rgw_get_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& key, bufferlist& bl, RGWObjVersionTracker *objv_tracker, real_time *pmtime, optional_yield y, map *pattrs, + rgw_cache_entry_info *cache_info, + boost::optional refresh_version) { bufferlist::iterator iter; int request_len = READ_CHUNK_LEN; diff --git a/src/rgw/rgw_tools.h b/src/rgw/rgw_tools.h index 2653f3b5c74..0b3a9b30aaa 100644 --- a/src/rgw/rgw_tools.h +++ b/src/rgw/rgw_tools.h @@ -62,6 +62,8 @@ void rgw_shard_name(const string& prefix, unsigned shard_id, string& name); int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& oid, bufferlist& data, bool exclusive, RGWObjVersionTracker *objv_tracker, real_time set_mtime, map *pattrs = NULL); +int rgw_put_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& oid, bufferlist& data, bool exclusive, + RGWObjVersionTracker *objv_tracker, real_time set_mtime, optional_yield y, map *pattrs = NULL); int rgw_get_system_obj(RGWSysObjectCtx& obj_ctx, const rgw_pool& pool, const string& key, bufferlist& bl, RGWObjVersionTracker *objv_tracker, real_time *pmtime, optional_yield y, map *pattrs = NULL, rgw_cache_entry_info *cache_info = NULL, diff --git a/src/rgw/rgw_trim_datalog.cc b/src/rgw/rgw_trim_datalog.cc index 6cd2a164407..e2ccb075af9 100644 --- a/src/rgw/rgw_trim_datalog.cc +++ b/src/rgw/rgw_trim_datalog.cc @@ -11,6 +11,9 @@ #include "rgw_zone.h" #include "rgw_bucket.h" +#include "services/svc_zone.h" +#include "services/svc_datalog_rados.h" + #include #define dout_subsys ceph_subsys_rgw diff --git a/src/rgw/rgw_user.cc b/src/rgw/rgw_user.cc index 15974b95293..95c609d9667 100644 --- a/src/rgw/rgw_user.cc +++ b/src/rgw/rgw_user.cc @@ -2480,7 +2480,7 @@ public: RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield y, - RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, type), + RGWMDLogSyncType type) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, y, type), uhandler(_handler) { uobj = static_cast(obj); } diff --git a/src/rgw/rgw_user.h b/src/rgw/rgw_user.h index d83583b1bd2..08647510540 100644 --- a/src/rgw/rgw_user.h +++ b/src/rgw/rgw_user.h @@ -848,7 +848,7 @@ public: return *this; } - RemoveParams& set_yield(optional_yield _y) { + GetParams& set_yield(optional_yield _y) { y = _y; return *this; } @@ -887,7 +887,7 @@ public: return *this; } - RemoveParams& set_yield(optional_yield _y) { + PutParams& set_yield(optional_yield _y) { y = _y; return *this; } diff --git a/src/rgw/services/svc_bi.h b/src/rgw/services/svc_bi.h index 2ac2d730fa9..59f758aafd7 100644 --- a/src/rgw/services/svc_bi.h +++ b/src/rgw/services/svc_bi.h @@ -33,7 +33,8 @@ public: virtual int clean_index(RGWBucketInfo& bucket_info) = 0; virtual int read_stats(const RGWBucketInfo& bucket_info, - RGWBucketEnt *stats) = 0; + RGWBucketEnt *stats, + optional_yield y) = 0; virtual int handle_overwrite(const RGWBucketInfo& info, const RGWBucketInfo& orig_info) = 0; diff --git a/src/rgw/services/svc_bi_rados.cc b/src/rgw/services/svc_bi_rados.cc index 8de7d58c36c..7aee8539ddb 100644 --- a/src/rgw/services/svc_bi_rados.cc +++ b/src/rgw/services/svc_bi_rados.cc @@ -170,7 +170,7 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index(const RGWBucketInfo& bucket_info, int ret = open_bucket_index_base(bucket_info, index_pool, &bucket_oid_base); if (ret < 0) { ldout(cct, 20) << __func__ << ": open_bucket_index_pool() returned " - << r << dendl; + << ret << dendl; return ret; } @@ -237,7 +237,7 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index_shard(const RGWBucketInfo& bucket int ret = open_bucket_index_base(bucket_info, &pool, &bucket_oid_base); if (ret < 0) { ldout(cct, 20) << __func__ << ": open_bucket_index_pool() returned " - << r << dendl; + << ret << dendl; return ret; } @@ -264,7 +264,7 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index_shard(const RGWBucketInfo& bucket int ret = open_bucket_index_base(bucket_info, &index_pool, &bucket_oid_base); if (ret < 0) { ldout(cct, 20) << __func__ << ": open_bucket_index_pool() returned " - << r << dendl; + << ret << dendl; return ret; } @@ -281,7 +281,8 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index_shard(const RGWBucketInfo& bucket int RGWSI_BucketIndex_RADOS::cls_bucket_head(const RGWBucketInfo& bucket_info, int shard_id, vector *headers, - map *bucket_instance_ids) + map *bucket_instance_ids, + optional_yield y) { RGWSI_RADOS::Pool index_pool; map oids; @@ -347,12 +348,13 @@ int RGWSI_BucketIndex_RADOS::clean_index(RGWBucketInfo& bucket_info) } int RGWSI_BucketIndex_RADOS::read_stats(const RGWBucketInfo& bucket_info, - RGWBucketEnt *result) + RGWBucketEnt *result, + optional_yield y) { vector headers; result->bucket = bucket_info.bucket; - int r = cls_bucket_head(bucket_info, RGW_NO_SHARD, &headers, nullptr); + int r = cls_bucket_head(bucket_info, RGW_NO_SHARD, &headers, nullptr, y); if (r < 0) { return r; } diff --git a/src/rgw/services/svc_bi_rados.h b/src/rgw/services/svc_bi_rados.h index 11b7bb1e765..2ba3ac52a5e 100644 --- a/src/rgw/services/svc_bi_rados.h +++ b/src/rgw/services/svc_bi_rados.h @@ -58,7 +58,8 @@ class RGWSI_BucketIndex_RADOS : public RGWSI_BucketIndex int cls_bucket_head(const RGWBucketInfo& bucket_info, int shard_id, vector *headers, - map *bucket_instance_ids); + map *bucket_instance_ids, + optional_yield y); public: @@ -98,7 +99,8 @@ public: /* RADOS specific */ int read_stats(const RGWBucketInfo& bucket_info, - RGWBucketEnt *stats) override; + RGWBucketEnt *stats, + optional_yield y) override; int get_reshard_status(const RGWBucketInfo& bucket_info, std::list *status); diff --git a/src/rgw/services/svc_bilog_rados.cc b/src/rgw/services/svc_bilog_rados.cc index 704f0715aab..a1df7db2f06 100644 --- a/src/rgw/services/svc_bilog_rados.cc +++ b/src/rgw/services/svc_bilog_rados.cc @@ -179,7 +179,7 @@ int RGWSI_BILog_RADOS::get_log_status(const RGWBucketInfo& bucket_info, { vector headers; map bucket_instance_ids; - int r = svc.bi->cls_bucket_head(bucket_info, shard_id, &headers, &bucket_instance_ids); + int r = svc.bi->cls_bucket_head(bucket_info, shard_id, &headers, &bucket_instance_ids, null_yield); if (r < 0) return r; diff --git a/src/rgw/services/svc_bucket.h b/src/rgw/services/svc_bucket.h index d1d1705ec60..3f3816b51c3 100644 --- a/src/rgw/services/svc_bucket.h +++ b/src/rgw/services/svc_bucket.h @@ -54,7 +54,8 @@ public: virtual int remove_bucket_entrypoint_info(RGWSI_Bucket_EP_Ctx& ctx, const string& key, - RGWObjVersionTracker *objv_tracker) = 0; + RGWObjVersionTracker *objv_tracker, + optional_yield y) = 0; virtual int read_bucket_instance_info(RGWSI_Bucket_BI_Ctx& ctx, const string& key, diff --git a/src/rgw/services/svc_bucket_sobj.cc b/src/rgw/services/svc_bucket_sobj.cc index 6926ba30c38..4b1fab289f6 100644 --- a/src/rgw/services/svc_bucket_sobj.cc +++ b/src/rgw/services/svc_bucket_sobj.cc @@ -214,7 +214,7 @@ int RGWSI_Bucket_SObj::read_bucket_entrypoint_info(RGWSI_Bucket_EP_Ctx& ctx, auto params = RGWSI_MBSObj_GetParams(&bl, pattrs, pmtime).set_cache_info(cache_info) .set_refresh_version(refresh_version); - int ret = svc.meta_be->get_entry(ctx.get(), key, params, objv_tracker); + int ret = svc.meta_be->get_entry(ctx.get(), key, params, objv_tracker, y); if (ret < 0) { return ret; } @@ -243,7 +243,7 @@ int RGWSI_Bucket_SObj::store_bucket_entrypoint_info(RGWSI_Bucket_EP_Ctx& ctx, RGWSI_MBSObj_PutParams params(bl, pattrs, mtime, exclusive); - int ret = svc.meta_be->put(ctx.get(), key, params, objv_tracker); + int ret = svc.meta_be->put(ctx.get(), key, params, objv_tracker, y); if (ret == -EEXIST) { /* well, if it's exclusive we shouldn't overwrite it, because we might race with another * bucket operation on this specific bucket (e.g., being synced from the master), but @@ -386,6 +386,7 @@ int RGWSI_Bucket_SObj::read_bucket_info(RGWSI_Bucket_X_Ctx& ctx, return read_bucket_instance_info(ctx.bi, get_bi_meta_key(bucket), info, pmtime, pattrs, + y, &cache_info, refresh_version); } @@ -420,8 +421,8 @@ int RGWSI_Bucket_SObj::read_bucket_info(RGWSI_Bucket_X_Ctx& ctx, rgw_cache_entry_info entry_cache_info; int ret = read_bucket_entrypoint_info(ctx.ep, bucket_entry, &entry_point, &ot, &ep_mtime, pattrs, - &entry_cache_info, refresh_version, - y); + y, + &entry_cache_info, refresh_version); if (ret < 0) { /* only init these fields */ info->bucket = bucket; @@ -451,7 +452,8 @@ int RGWSI_Bucket_SObj::read_bucket_info(RGWSI_Bucket_X_Ctx& ctx, ret = read_bucket_instance_info(ctx.bi, get_bi_meta_key(entry_point.bucket), &e.info, &e.mtime, &e.attrs, - &cache_info, refresh_version, y); + y, + &cache_info, refresh_version); *info = e.info; if (ret < 0) { lderr(cct) << "ERROR: read_bucket_instance_from_oid failed: " << ret << dendl; @@ -466,7 +468,7 @@ int RGWSI_Bucket_SObj::read_bucket_info(RGWSI_Bucket_X_Ctx& ctx, *pattrs = e.attrs; /* chain to both bucket entry point and bucket instance */ - if (!binfo_cache->put(svc.cache, cache_key, &e, {&entry_cache_info, &cache_info}, y)) { + if (!binfo_cache->put(svc.cache, cache_key, &e, {&entry_cache_info, &cache_info})) { ldout(cct, 20) << "couldn't put binfo cache entry, might have raced with data changes" << dendl; } @@ -509,6 +511,7 @@ int RGWSI_Bucket_SObj::store_bucket_instance_info(RGWSI_Bucket_BI_Ctx& ctx, key, &_orig_info, nullptr, nullptr, + y, nullptr, boost::none); if (r < 0) { if (r != -ENOENT) { diff --git a/src/rgw/services/svc_bucket_sobj.h b/src/rgw/services/svc_bucket_sobj.h index 54962ea2f3f..210771416d4 100644 --- a/src/rgw/services/svc_bucket_sobj.h +++ b/src/rgw/services/svc_bucket_sobj.h @@ -58,7 +58,8 @@ class RGWSI_Bucket_SObj : public RGWSI_Bucket real_time *pmtime, map *pattrs, rgw_cache_entry_info *cache_info, - boost::optional refresh_version); + boost::optional refresh_version, + optional_yield y); int read_bucket_stats(const RGWBucketInfo& bucket_info, RGWBucketEnt *ent, diff --git a/src/rgw/services/svc_meta_be.cc b/src/rgw/services/svc_meta_be.cc index eb805f57c58..f6de0571535 100644 --- a/src/rgw/services/svc_meta_be.cc +++ b/src/rgw/services/svc_meta_be.cc @@ -72,9 +72,9 @@ int RGWSI_MetaBackend::do_mutate(RGWSI_MetaBackend::Context *ctx, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, RGWMDLogStatus op_type, + optional_yield y, std::function f, - bool generic_prepare, - optional_yield y) + bool generic_prepare) { int ret; @@ -124,9 +124,9 @@ int RGWSI_MetaBackend::put(Context *ctx, return do_mutate(ctx, key, params.mtime, objv_tracker, MDLOG_STATUS_WRITE, + y, f, - false, - y); + false); } int RGWSI_MetaBackend::remove(Context *ctx, @@ -141,19 +141,20 @@ int RGWSI_MetaBackend::remove(Context *ctx, return do_mutate(ctx, key, params.mtime, objv_tracker, MDLOG_STATUS_REMOVE, + y, f, - false, - y); + false); } int RGWSI_MetaBackend::mutate(Context *ctx, const std::string& key, MutateParams& params, RGWObjVersionTracker *objv_tracker, + optional_yield y, std::function f) { return do_mutate(ctx, key, params.mtime, objv_tracker, - params.op_type, + params.op_type, y, f, false); } diff --git a/src/rgw/services/svc_meta_be.h b/src/rgw/services/svc_meta_be.h index 9b07e0fbea4..4258ae91f6a 100644 --- a/src/rgw/services/svc_meta_be.h +++ b/src/rgw/services/svc_meta_be.h @@ -52,9 +52,9 @@ protected: const std::string& key, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, RGWMDLogStatus op_type, + optional_yield y, std::function f, - bool generic_prepare, - optional_yield y); + bool generic_prepare); virtual int pre_modify(Context *ctx, const std::string& key, @@ -193,6 +193,7 @@ public: const std::string& key, MutateParams& params, RGWObjVersionTracker *objv_tracker, + optional_yield y, std::function f); }; @@ -216,27 +217,31 @@ public: int get(const std::string& key, RGWSI_MetaBackend::GetParams ¶ms, - RGWObjVersionTracker *objv_tracker) { - return be->get(be_ctx, key, params, objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y) { + return be->get(be_ctx, key, params, objv_tracker, y); } int put(const std::string& key, RGWSI_MetaBackend::PutParams& params, - RGWObjVersionTracker *objv_tracker) { - return be->put(be_ctx, key, params, objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y) { + return be->put(be_ctx, key, params, objv_tracker, y); } int remove(const std::string& key, RGWSI_MetaBackend::RemoveParams& params, - RGWObjVersionTracker *objv_tracker) { - return be->remove(be_ctx, key, params, objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y) { + return be->remove(be_ctx, key, params, objv_tracker, y); } int mutate(const std::string& key, RGWSI_MetaBackend::MutateParams& params, RGWObjVersionTracker *objv_tracker, + optional_yield y, std::function f) { - return be->mutate(be_ctx, key, params, objv_tracker, f); + return be->mutate(be_ctx, key, params, objv_tracker, y, f); } int list_init(const string& marker) { diff --git a/src/rgw/services/svc_otp.cc b/src/rgw/services/svc_otp.cc index 750d4a57a64..092a962e41b 100644 --- a/src/rgw/services/svc_otp.cc +++ b/src/rgw/services/svc_otp.cc @@ -84,13 +84,14 @@ int RGWSI_OTP::read_all(RGWSI_OTP_BE_Ctx& ctx, const string& key, otp_devices_list_t *devices, real_time *pmtime, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { RGWSI_MBOTP_GetParams params; params.pdevices = devices; params.pmtime = pmtime; - int ret = svc.meta_be->get_entry(ctx.get(), key, params, objv_tracker); + int ret = svc.meta_be->get_entry(ctx.get(), key, params, objv_tracker, y); if (ret < 0) { return ret; } @@ -102,26 +103,29 @@ int RGWSI_OTP::read_all(RGWSI_OTP_BE_Ctx& ctx, const rgw_user& uid, otp_devices_list_t *devices, real_time *pmtime, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { return read_all(ctx, uid.to_str(), devices, pmtime, - objv_tracker); + objv_tracker, + y); } int RGWSI_OTP::store_all(RGWSI_OTP_BE_Ctx& ctx, const string& key, const otp_devices_list_t& devices, real_time mtime, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { RGWSI_MBOTP_PutParams params; params.mtime = mtime; params.devices = devices; - int ret = svc.meta_be->put_entry(ctx.get(), key, params, objv_tracker); + int ret = svc.meta_be->put_entry(ctx.get(), key, params, objv_tracker, y); if (ret < 0) { return ret; } @@ -133,22 +137,25 @@ int RGWSI_OTP::store_all(RGWSI_OTP_BE_Ctx& ctx, const rgw_user& uid, const otp_devices_list_t& devices, real_time mtime, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { return store_all(ctx, uid.to_str(), devices, mtime, - objv_tracker); + objv_tracker, + y); } int RGWSI_OTP::remove_all(RGWSI_OTP_BE_Ctx& ctx, const string& key, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { RGWSI_MBOTP_RemoveParams params; - int ret = svc.meta_be->remove_entry(ctx.get(), key, params, objv_tracker); + int ret = svc.meta_be->remove_entry(ctx.get(), key, params, objv_tracker, y); if (ret < 0) { return ret; } @@ -158,9 +165,11 @@ int RGWSI_OTP::remove_all(RGWSI_OTP_BE_Ctx& ctx, int RGWSI_OTP::remove_all(RGWSI_OTP_BE_Ctx& ctx, const rgw_user& uid, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { return remove_all(ctx, uid.to_str(), - objv_tracker); + objv_tracker, + y); } diff --git a/src/rgw/services/svc_otp.h b/src/rgw/services/svc_otp.h index 550712f2547..db1e1a18885 100644 --- a/src/rgw/services/svc_otp.h +++ b/src/rgw/services/svc_otp.h @@ -56,28 +56,34 @@ public: const string& key, otp_devices_list_t *devices, real_time *pmtime, - RGWObjVersionTracker *objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y); int read_all(RGWSI_OTP_BE_Ctx& ctx, const rgw_user& uid, otp_devices_list_t *devices, real_time *pmtime, - RGWObjVersionTracker *objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y); int store_all(RGWSI_OTP_BE_Ctx& ctx, const string& key, const otp_devices_list_t& devices, real_time mtime, - RGWObjVersionTracker *objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y); int store_all(RGWSI_OTP_BE_Ctx& ctx, const rgw_user& uid, const otp_devices_list_t& devices, real_time mtime, - RGWObjVersionTracker *objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y); int remove_all(RGWSI_OTP_BE_Ctx& ctx, const string& key, - RGWObjVersionTracker *objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y); int remove_all(RGWSI_OTP_BE_Ctx& ctx, const rgw_user& uid, - RGWObjVersionTracker *objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y); }; diff --git a/src/rgw/services/svc_rados.cc b/src/rgw/services/svc_rados.cc index c16e092925d..c139ee91c48 100644 --- a/src/rgw/services/svc_rados.cc +++ b/src/rgw/services/svc_rados.cc @@ -11,6 +11,10 @@ #define dout_subsys ceph_subsys_rgw +RGWSI_RADOS::RGWSI_RADOS(CephContext *cct) : RGWServiceInstance(cct) +{ +} + RGWSI_RADOS::~RGWSI_RADOS() { } @@ -88,7 +92,7 @@ int RGWSI_RADOS::pool_iterate(librados::IoCtx& io_ctx, return objs.size(); } -RGWSI_RADOS::Obj::Obj(Pool& pool, const string& oid) : rados_svc(pool.rados_svc), rados_handle(pool.rados_handle) +RGWSI_RADOS::Obj::Obj(Pool& pool, const string& oid) : rados_svc(pool.rados_svc) { ref.pool = pool; ref.obj = rgw_raw_obj(pool.get_pool(), oid); @@ -96,7 +100,7 @@ RGWSI_RADOS::Obj::Obj(Pool& pool, const string& oid) : rados_svc(pool.rados_svc) void RGWSI_RADOS::Obj::init(const rgw_raw_obj& obj) { - ref.pool = RGWSI_RADOS::Pool(rados_svc, obj.pool, rados_handle); + ref.pool = RGWSI_RADOS::Pool(rados_svc, obj.pool); ref.obj = obj; } diff --git a/src/rgw/services/svc_rados.h b/src/rgw/services/svc_rados.h index fe666e8f1b0..9d56e8f294a 100644 --- a/src/rgw/services/svc_rados.h +++ b/src/rgw/services/svc_rados.h @@ -61,7 +61,7 @@ private: bool *is_truncated); public: - RGWSI_RADOS(CephContext *cct) : RGWServiceInstance(cct) {} + RGWSI_RADOS(CephContext *cct); ~RGWSI_RADOS(); void init() {} diff --git a/src/rgw/services/svc_tier_rados.h b/src/rgw/services/svc_tier_rados.h index b1d5195b9a0..b4a9f9ec34c 100644 --- a/src/rgw/services/svc_tier_rados.h +++ b/src/rgw/services/svc_tier_rados.h @@ -60,10 +60,10 @@ public: s.append(part); return s; } - string& get_upload_id() const { + const string& get_upload_id() const { return upload_id; } - string& get_key() const { + const string& get_key() const { return oid; } bool from_meta(string& meta) { @@ -108,7 +108,7 @@ public: * @return true if the name provided is in the form of a multipart meta * object, false otherwise */ - bool filter(string& name, string& key) override; + bool filter(const string& name, string& key) override; }; class RGWSI_Tier_RADOS : public RGWServiceInstance diff --git a/src/rgw/services/svc_user_rados.cc b/src/rgw/services/svc_user_rados.cc index 624c0160ea1..33636b396db 100644 --- a/src/rgw/services/svc_user_rados.cc +++ b/src/rgw/services/svc_user_rados.cc @@ -523,7 +523,7 @@ int RGWSI_User_RADOS::get_user_info_from_index(RGWSI_MetaBackend::Context *_ctx, return -EIO; } - uinfo_cache->put(svc.cache, cache_key, &e, { &cache_info }, y); + uinfo_cache->put(svc.cache, cache_key, &e, { &cache_info }); *info = e.info; if (objv_tracker) diff --git a/src/tools/ceph-dencoder/rgw_types.h b/src/tools/ceph-dencoder/rgw_types.h index f916e66711a..2116eb0b1c6 100644 --- a/src/tools/ceph-dencoder/rgw_types.h +++ b/src/tools/ceph-dencoder/rgw_types.h @@ -109,7 +109,6 @@ TYPE(RGWUserInfo) TYPE(rgw_bucket) TYPE(RGWBucketInfo) TYPE(RGWBucketEnt) -TYPE(RGWUploadPartInfo) TYPE(rgw_obj) #include "rgw/rgw_log.h" @@ -120,6 +119,9 @@ TYPE(rgw_meta_sync_info) TYPE(rgw_meta_sync_marker) TYPE(rgw_meta_sync_status) +#include "rgw/rgw_multi.h" +TYPE(RGWUploadPartInfo) + #include "rgw/rgw_data_sync.h" TYPE(rgw_data_sync_info) TYPE(rgw_data_sync_marker) -- 2.39.5