From 6d4149d3229c94b1a17b8d6669433ea98cb200c6 Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Mon, 12 Jun 2023 16:44:17 -0400 Subject: [PATCH] rgw: Thread optional_yield through RGWMetadataLog operations Signed-off-by: Adam C. Emerson --- src/rgw/driver/rados/rgw_metadata.cc | 17 +++++++++-------- src/rgw/driver/rados/rgw_rest_log.cc | 6 +++--- src/rgw/driver/rados/rgw_sync.cc | 2 +- src/rgw/rgw_admin.cc | 6 +++--- src/rgw/rgw_mdlog.h | 9 +++++---- src/rgw/services/svc_mdlog.cc | 4 ++-- src/rgw/services/svc_mdlog.h | 2 +- src/rgw/services/svc_meta_be_sobj.cc | 4 ++-- 8 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/rgw/driver/rados/rgw_metadata.cc b/src/rgw/driver/rados/rgw_metadata.cc index e3e49316eac..996f73e9abe 100644 --- a/src/rgw/driver/rados/rgw_metadata.cc +++ b/src/rgw/driver/rados/rgw_metadata.cc @@ -44,7 +44,7 @@ void rgw_shard_name(const string& prefix, unsigned shard_id, string& name) name = prefix + buf; } -int RGWMetadataLog::add_entry(const DoutPrefixProvider *dpp, const string& hash_key, const string& section, const string& key, bufferlist& bl) { +int RGWMetadataLog::add_entry(const DoutPrefixProvider *dpp, const string& hash_key, const string& section, const string& key, bufferlist& bl, optional_yield y) { if (!svc.zone->need_to_log_metadata()) return 0; @@ -54,7 +54,7 @@ int RGWMetadataLog::add_entry(const DoutPrefixProvider *dpp, const string& hash_ rgw_shard_name(prefix, cct->_conf->rgw_md_log_max_shards, hash_key, oid, &shard_id); mark_modified(shard_id); real_time now = real_clock::now(); - return svc.cls->timelog.add(dpp, oid, now, section, key, bl, null_yield); + return svc.cls->timelog.add(dpp, oid, now, section, key, bl, y); } int RGWMetadataLog::get_shard_id(const string& hash_key, int *shard_id) @@ -98,7 +98,8 @@ int RGWMetadataLog::list_entries(const DoutPrefixProvider *dpp, void *handle, int max_entries, list& entries, string *last_marker, - bool *truncated) { + bool *truncated, + optional_yield y) { LogListCtx *ctx = static_cast(handle); if (!max_entries) { @@ -109,7 +110,7 @@ int RGWMetadataLog::list_entries(const DoutPrefixProvider *dpp, void *handle, std::string next_marker; int ret = svc.cls->timelog.list(dpp, ctx->cur_oid, ctx->from_time, ctx->end_time, max_entries, entries, ctx->marker, - &next_marker, truncated, null_yield); + &next_marker, truncated, y); if ((ret < 0) && (ret != -ENOENT)) return ret; @@ -124,14 +125,14 @@ int RGWMetadataLog::list_entries(const DoutPrefixProvider *dpp, void *handle, return 0; } -int RGWMetadataLog::get_info(const DoutPrefixProvider *dpp, int shard_id, RGWMetadataLogInfo *info) +int RGWMetadataLog::get_info(const DoutPrefixProvider *dpp, int shard_id, RGWMetadataLogInfo *info, optional_yield y) { string oid; get_shard_oid(shard_id, oid); cls_log_header header; - int ret = svc.cls->timelog.info(dpp, oid, &header, null_yield); + int ret = svc.cls->timelog.info(dpp, oid, &header, y); if ((ret < 0) && (ret != -ENOENT)) return ret; @@ -173,13 +174,13 @@ int RGWMetadataLog::get_info_async(const DoutPrefixProvider *dpp, int shard_id, } int RGWMetadataLog::trim(const DoutPrefixProvider *dpp, int shard_id, const real_time& from_time, const real_time& end_time, - const string& start_marker, const string& end_marker) + const string& start_marker, const string& end_marker, optional_yield y) { string oid; get_shard_oid(shard_id, oid); return svc.cls->timelog.trim(dpp, oid, from_time, end_time, start_marker, - end_marker, nullptr, null_yield); + end_marker, nullptr, y); } int RGWMetadataLog::lock_exclusive(const DoutPrefixProvider *dpp, int shard_id, timespan duration, string& zone_id, string& owner_id) { diff --git a/src/rgw/driver/rados/rgw_rest_log.cc b/src/rgw/driver/rados/rgw_rest_log.cc index f4099807dad..c2e9b7cfa18 100644 --- a/src/rgw/driver/rados/rgw_rest_log.cc +++ b/src/rgw/driver/rados/rgw_rest_log.cc @@ -91,7 +91,7 @@ void RGWOp_MDLog_List::execute(optional_yield y) { meta_log.init_list_entries(shard_id, {}, {}, marker, &handle); op_ret = meta_log.list_entries(this, handle, max_entries, entries, - &last_marker, &truncated); + &last_marker, &truncated, y); meta_log.complete_list_entries(handle); } @@ -166,7 +166,7 @@ void RGWOp_MDLog_ShardInfo::execute(optional_yield y) { } RGWMetadataLog meta_log{s->cct, static_cast(driver)->svc()->zone, static_cast(driver)->svc()->cls, period}; - op_ret = meta_log.get_info(this, shard_id, &info); + op_ret = meta_log.get_info(this, shard_id, &info, y); } void RGWOp_MDLog_ShardInfo::send_response() { @@ -232,7 +232,7 @@ void RGWOp_MDLog_Delete::execute(optional_yield y) { } RGWMetadataLog meta_log{s->cct, static_cast(driver)->svc()->zone, static_cast(driver)->svc()->cls, period}; - op_ret = meta_log.trim(this, shard_id, {}, {}, {}, marker); + op_ret = meta_log.trim(this, shard_id, {}, {}, {}, marker, y); } void RGWOp_MDLog_Lock::execute(optional_yield y) { diff --git a/src/rgw/driver/rados/rgw_sync.cc b/src/rgw/driver/rados/rgw_sync.cc index 262e00ba9dc..dfd79194b8c 100644 --- a/src/rgw/driver/rados/rgw_sync.cc +++ b/src/rgw/driver/rados/rgw_sync.cc @@ -390,7 +390,7 @@ protected: mdlog->init_list_entries(shard_id, from_time, end_time, marker, &handle); - int ret = mdlog->list_entries(dpp, handle, max_entries, entries, &marker, &truncated); + int ret = mdlog->list_entries(dpp, handle, max_entries, entries, &marker, &truncated, null_yield); mdlog->complete_list_entries(handle); diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index eddb2e791d7..0e393bc3597 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -8786,7 +8786,7 @@ next: meta_log->init_list_entries(i, {}, {}, marker, &handle); bool truncated; do { - int ret = meta_log->list_entries(dpp(), handle, 1000, entries, NULL, &truncated); + int ret = meta_log->list_entries(dpp(), handle, 1000, entries, NULL, &truncated, null_yield); if (ret < 0) { cerr << "ERROR: meta_log->list_entries(): " << cpp_strerror(-ret) << std::endl; return -ret; @@ -8832,7 +8832,7 @@ next: for (; i < g_ceph_context->_conf->rgw_md_log_max_shards; i++) { RGWMetadataLogInfo info; - meta_log->get_info(dpp(), i, &info); + meta_log->get_info(dpp(), i, &info, null_yield); ::encode_json("info", info, formatter.get()); @@ -8911,7 +8911,7 @@ next: // trim until -ENODATA do { - ret = meta_log->trim(dpp(), shard_id, {}, {}, {}, marker); + ret = meta_log->trim(dpp(), shard_id, {}, {}, {}, marker, null_yield); } while (ret == 0); if (ret < 0 && ret != -ENODATA) { cerr << "ERROR: meta_log->trim(): " << cpp_strerror(-ret) << std::endl; diff --git a/src/rgw/rgw_mdlog.h b/src/rgw/rgw_mdlog.h index 6a6fb67d17a..152126890b7 100644 --- a/src/rgw/rgw_mdlog.h +++ b/src/rgw/rgw_mdlog.h @@ -102,7 +102,7 @@ public: oid = prefix + buf; } - int add_entry(const DoutPrefixProvider *dpp, const std::string& hash_key, const std::string& section, const std::string& key, bufferlist& bl); + int add_entry(const DoutPrefixProvider *dpp, const std::string& hash_key, const std::string& section, const std::string& key, bufferlist& bl, optional_yield y); int get_shard_id(const std::string& hash_key, int *shard_id); int store_entries_in_shard(const DoutPrefixProvider *dpp, std::list& entries, int shard_id, librados::AioCompletion *completion); @@ -128,10 +128,11 @@ public: int max_entries, std::list& entries, std::string *out_marker, - bool *truncated); + bool *truncated, + optional_yield y); - int trim(const DoutPrefixProvider *dpp, int shard_id, const real_time& from_time, const real_time& end_time, const std::string& start_marker, const std::string& end_marker); - int get_info(const DoutPrefixProvider *dpp, int shard_id, RGWMetadataLogInfo *info); + int trim(const DoutPrefixProvider *dpp, int shard_id, const real_time& from_time, const real_time& end_time, const std::string& start_marker, const std::string& end_marker, optional_yield y); + int get_info(const DoutPrefixProvider *dpp, int shard_id, RGWMetadataLogInfo *info, optional_yield y); int get_info_async(const DoutPrefixProvider *dpp, int shard_id, RGWMetadataLogInfoCompletion *completion); int lock_exclusive(const DoutPrefixProvider *dpp, int shard_id, timespan duration, std::string&zone_id, std::string& owner_id); int unlock(const DoutPrefixProvider *dpp, int shard_id, std::string& zone_id, std::string& owner_id); diff --git a/src/rgw/services/svc_mdlog.cc b/src/rgw/services/svc_mdlog.cc index 09a68d3d713..06459f5239e 100644 --- a/src/rgw/services/svc_mdlog.cc +++ b/src/rgw/services/svc_mdlog.cc @@ -529,10 +529,10 @@ RGWMetadataLog* RGWSI_MDLog::get_log(const std::string& period) return &insert.first->second; } -int RGWSI_MDLog::add_entry(const DoutPrefixProvider *dpp, const string& hash_key, const string& section, const string& key, bufferlist& bl) +int RGWSI_MDLog::add_entry(const DoutPrefixProvider *dpp, const string& hash_key, const string& section, const string& key, bufferlist& bl, optional_yield y) { ceph_assert(current_log); // must have called init() - return current_log->add_entry(dpp, hash_key, section, key, bl); + return current_log->add_entry(dpp, hash_key, section, key, bl, y); } int RGWSI_MDLog::get_shard_id(const string& hash_key, int *shard_id) diff --git a/src/rgw/services/svc_mdlog.h b/src/rgw/services/svc_mdlog.h index 703d6f6059e..8b37ba11e56 100644 --- a/src/rgw/services/svc_mdlog.h +++ b/src/rgw/services/svc_mdlog.h @@ -102,7 +102,7 @@ public: RGWObjVersionTracker *objv_tracker, optional_yield y, bool exclusive = false); - int add_entry(const DoutPrefixProvider *dpp, const std::string& hash_key, const std::string& section, const std::string& key, bufferlist& bl); + int add_entry(const DoutPrefixProvider *dpp, const std::string& hash_key, const std::string& section, const std::string& key, bufferlist& bl, optional_yield y); int get_shard_id(const std::string& hash_key, int *shard_id); diff --git a/src/rgw/services/svc_meta_be_sobj.cc b/src/rgw/services/svc_meta_be_sobj.cc index c0ff402fc58..45410c18238 100644 --- a/src/rgw/services/svc_meta_be_sobj.cc +++ b/src/rgw/services/svc_meta_be_sobj.cc @@ -57,7 +57,7 @@ int RGWSI_MetaBackend_SObj::pre_modify(const DoutPrefixProvider *dpp, RGWSI_Meta bufferlist logbl; encode(log_data, logbl); - ret = mdlog_svc->add_entry(dpp, ctx->module->get_hash_key(key), ctx->module->get_section(), key, logbl); + ret = mdlog_svc->add_entry(dpp, ctx->module->get_hash_key(key), ctx->module->get_section(), key, logbl, y); if (ret < 0) return ret; @@ -80,7 +80,7 @@ int RGWSI_MetaBackend_SObj::post_modify(const DoutPrefixProvider *dpp, bufferlist logbl; encode(log_data, logbl); - int r = mdlog_svc->add_entry(dpp, ctx->module->get_hash_key(key), ctx->module->get_section(), key, logbl); + int r = mdlog_svc->add_entry(dpp, ctx->module->get_hash_key(key), ctx->module->get_section(), key, logbl, y); if (ret < 0) return ret; -- 2.39.5