From: Samarah Date: Thu, 3 Aug 2023 20:59:55 +0000 (-0400) Subject: rgw/cache: this commit adds `optional_yield` to ssd and redis driver X-Git-Tag: v20.0.0~2219^2~63 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1fe54e1c36e9ffc77cbe5d9f115163009deac071;p=ceph.git rgw/cache: this commit adds `optional_yield` to ssd and redis driver and squashes the following commits. RGW: Add `optional_yield` parameter to Cache Driver methods RGW: Add `optional_yield` parameter to SSD Driver methods rgw/cache: fix compilation errors related to optional_yield. Signed-off-by: Samarah Co-authored-by: Pritha Srivastava --- diff --git a/src/rgw/driver/d4n/d4n_policy.cc b/src/rgw/driver/d4n/d4n_policy.cc index 6283779f4aee3..1986939c6a493 100644 --- a/src/rgw/driver/d4n/d4n_policy.cc +++ b/src/rgw/driver/d4n/d4n_policy.cc @@ -1,3 +1,4 @@ +#include "../../../common/async/yield_context.h" #include "d4n_policy.h" #define dout_subsys ceph_subsys_rgw @@ -220,7 +221,8 @@ CacheBlock LFUDAPolicy::find_victim(const DoutPrefixProvider* dpp, rgw::cache::C int minWeight = INT_MAX; for (auto it = entries.begin(); it != entries.end(); ++it) { - std::string localWeightStr = cacheNode->get_attr(dpp, it->key, "localWeight"); // should represent block -Sam + optional_yield y = null_yield; + std::string localWeightStr = cacheNode->get_attr(dpp, it->key, "localWeight", y); // should represent block -Sam if (!std::stoi(localWeightStr)) { // maybe do this in some sort of initialization procedure instead of here? -Sam /* Local weight hasn't been set */ @@ -251,14 +253,16 @@ CacheBlock LFUDAPolicy::find_victim(const DoutPrefixProvider* dpp, rgw::cache::C int LFUDAPolicy::get_block(const DoutPrefixProvider* dpp, CacheBlock* block, rgw::cache::CacheDriver* cacheNode) { std::string key = "rgw-object:" + block->cacheObj.objName + ":directory"; - std::string localWeightStr = cacheNode->get_attr(dpp, block->cacheObj.objName, "localWeight"); // change to block name eventually -Sam + optional_yield y = null_yield; + std::string localWeightStr = cacheNode->get_attr(dpp, block->cacheObj.objName, "localWeight", y); // change to block name eventually -Sam int localWeight = -1; if (!client.is_connected()) find_client(dpp, &client); if (localWeightStr.empty()) { // figure out where to set local weight -Sam - int ret = cacheNode->set_attr(dpp, block->cacheObj.objName, "localWeight", std::to_string(get_age())); + optional_yield y = null_yield; + int ret = cacheNode->set_attr(dpp, block->cacheObj.objName, "localWeight", std::to_string(get_age()), y); localWeight = get_age(); if (ret < 0) @@ -306,7 +310,7 @@ int LFUDAPolicy::get_block(const DoutPrefixProvider* dpp, CacheBlock* block, rgw // do I need to add the block to the local cache here? -Sam // update hosts list for block as well? check read workflow -Sam localWeight += age; - return cacheNode->set_attr(dpp, block->cacheObj.objName, "localWeight", std::to_string(localWeight)); + return cacheNode->set_attr(dpp, block->cacheObj.objName, "localWeight", std::to_string(localWeight), y); } } @@ -324,7 +328,8 @@ uint64_t LFUDAPolicy::eviction(const DoutPrefixProvider* dpp, rgw::cache::CacheD std::string key = "rgw-object:" + victim.cacheObj.objName + ":directory"; std::string hosts; int globalWeight = get_global_weight(key); - int localWeight = std::stoi(cacheNode->get_attr(dpp, victim.cacheObj.objName, "localWeight")); // change to block name eventually -Sam + optional_yield y = null_yield; + int localWeight = std::stoi(cacheNode->get_attr(dpp, victim.cacheObj.objName, "localWeight", y)); // change to block name eventually -Sam int avgWeight = get_min_avg_weight(); if (exist_key(key)) { @@ -346,7 +351,8 @@ uint64_t LFUDAPolicy::eviction(const DoutPrefixProvider* dpp, rgw::cache::CacheD if (hosts.empty()) { /* Last copy */ if (globalWeight > 0) { localWeight += globalWeight; - int ret = cacheNode->set_attr(dpp, victim.cacheObj.objName, "localWeight", std::to_string(localWeight)); + optional_yield y = null_yield; + int ret = cacheNode->set_attr(dpp, victim.cacheObj.objName, "localWeight", std::to_string(localWeight), y); if (!ret) ret = set_global_weight(key, 0); @@ -371,7 +377,7 @@ uint64_t LFUDAPolicy::eviction(const DoutPrefixProvider* dpp, rgw::cache::CacheD return -2; ldpp_dout(dpp, 10) << "RGW D4N Policy: Block " << victim.cacheObj.objName << " has been evicted." << dendl; - int ret = cacheNode->delete_data(dpp, victim.cacheObj.objName); + int ret = cacheNode->delete_data(dpp, victim.cacheObj.objName, y); if (!ret) { uint64_t num_entries = 100; //cacheNode->get_num_entries(dpp) TODO - correct this diff --git a/src/rgw/driver/d4n/rgw_sal_d4n.cc b/src/rgw/driver/d4n/rgw_sal_d4n.cc index 5b31f2b4107bc..960e61d1688d8 100644 --- a/src/rgw/driver/d4n/rgw_sal_d4n.cc +++ b/src/rgw/driver/d4n/rgw_sal_d4n.cc @@ -222,7 +222,7 @@ int D4NFilterObject::set_obj_attrs(const DoutPrefixProvider* dpp, Attrs* setattr } } - int update_attrsReturn = driver->get_cache_driver()->set_attrs(dpp, this->get_key().get_oid(), *setattrs); + int update_attrsReturn = driver->get_cache_driver()->set_attrs(dpp, this->get_key().get_oid(), *setattrs, y); if (update_attrsReturn < 0) { ldpp_dout(dpp, 20) << "D4N Filter: Cache set object attributes operation failed." << dendl; @@ -242,7 +242,7 @@ int D4NFilterObject::set_obj_attrs(const DoutPrefixProvider* dpp, Attrs* setattr } } - int del_attrsReturn = driver->get_cache_driver()->delete_attrs(dpp, this->get_key().get_oid(), *delattrs); + int del_attrsReturn = driver->get_cache_driver()->delete_attrs(dpp, this->get_key().get_oid(), *delattrs, y); if (del_attrsReturn < 0) { ldpp_dout(dpp, 20) << "D4N Filter: Cache delete object attributes operation failed." << dendl; @@ -258,7 +258,7 @@ int D4NFilterObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* d rgw_obj* target_obj) { rgw::sal::Attrs attrs; - int get_attrsReturn = driver->get_cache_driver()->get_attrs(dpp, this->get_key().get_oid(), attrs); + int get_attrsReturn = driver->get_cache_driver()->get_attrs(dpp, this->get_key().get_oid(), attrs, y); if (get_attrsReturn < 0) { ldpp_dout(dpp, 20) << "D4N Filter: Cache get object attributes operation failed." << dendl; @@ -284,7 +284,7 @@ int D4NFilterObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_va { Attrs update; update[(std::string)attr_name] = attr_val; - int update_attrsReturn = driver->get_cache_driver()->update_attrs(dpp, this->get_key().get_oid(), update); + int update_attrsReturn = driver->get_cache_driver()->update_attrs(dpp, this->get_key().get_oid(), update, y); if (update_attrsReturn < 0) { ldpp_dout(dpp, 20) << "D4N Filter: Cache modify object attribute operation failed." << dendl; @@ -307,7 +307,7 @@ int D4NFilterObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* /* Ensure delAttr exists */ if (std::find_if(currentattrs.begin(), currentattrs.end(), [&](const auto& pair) { return pair.first == attr->first; }) != currentattrs.end()) { - int delAttrReturn = driver->get_cache_driver()->delete_attrs(dpp, this->get_key().get_oid(), delattr); + int delAttrReturn = driver->get_cache_driver()->delete_attrs(dpp, this->get_key().get_oid(), delattr, y); if (delAttrReturn < 0) { ldpp_dout(dpp, 20) << "D4N Filter: Cache delete object attribute operation failed." << dendl; @@ -359,7 +359,7 @@ int D4NFilterObject::D4NFilterReadOp::prepare(optional_yield y, const DoutPrefix rgw::sal::Attrs attrs; int getObjReturn = source->driver->get_cache_driver()->get_attrs(dpp, source->get_key().get_oid(), - attrs); + attrs, y); int ret = next->prepare(y, dpp); @@ -801,13 +801,13 @@ int D4NFilterObject::D4NFilterDeleteOp::delete_obj(const DoutPrefixProvider* dpp currentFields.push_back(attrs->first); } - int delObjReturn = source->driver->get_cache_driver()->delete_data(dpp, source->get_key().get_oid()); + int delObjReturn = source->driver->get_cache_driver()->delete_data(dpp, source->get_key().get_oid(), y); if (delObjReturn < 0) { ldpp_dout(dpp, 20) << "D4N Filter: Cache delete object operation failed." << dendl; } else { Attrs delattrs = source->get_attrs(); - delObjReturn = source->driver->get_cache_driver()->delete_attrs(dpp, source->get_key().get_oid(), delattrs); + delObjReturn = source->driver->get_cache_driver()->delete_attrs(dpp, source->get_key().get_oid(), delattrs, y); ldpp_dout(dpp, 20) << "D4N Filter: Cache delete operation succeeded." << dendl; } @@ -816,7 +816,7 @@ int D4NFilterObject::D4NFilterDeleteOp::delete_obj(const DoutPrefixProvider* dpp int D4NFilterWriter::prepare(optional_yield y) { - int del_dataReturn = driver->get_cache_driver()->delete_data(save_dpp, obj->get_key().get_oid()); + int del_dataReturn = driver->get_cache_driver()->delete_data(save_dpp, obj->get_key().get_oid(), y); if (del_dataReturn < 0) { ldpp_dout(save_dpp, 20) << "D4N Filter: Cache delete data operation failed." << dendl; diff --git a/src/rgw/rgw_cache_driver.h b/src/rgw/rgw_cache_driver.h index f9e980a013059..44403d248ddc9 100644 --- a/src/rgw/rgw_cache_driver.h +++ b/src/rgw/rgw_cache_driver.h @@ -18,18 +18,18 @@ class CacheDriver { virtual ~CacheDriver() = default; virtual int initialize(CephContext* cct, const DoutPrefixProvider* dpp) = 0; - virtual int put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs) = 0; - virtual int get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs) = 0; + virtual int put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs, optional_yield y) = 0; + virtual int get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs, optional_yield y) = 0; virtual rgw::AioResultList get_async (const DoutPrefixProvider* dpp, optional_yield y, rgw::Aio* aio, const std::string& key, off_t ofs, uint64_t len, uint64_t cost, uint64_t id) = 0; virtual int put_async(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs) = 0; - virtual int append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data) = 0; - virtual int delete_data(const DoutPrefixProvider* dpp, const::std::string& key) = 0; - virtual int get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) = 0; - virtual int set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) = 0; - virtual int update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) = 0; - virtual int delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs) = 0; - virtual std::string get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name) = 0; - virtual int set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attr_val) = 0; + virtual int append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data, optional_yield y) = 0; + virtual int delete_data(const DoutPrefixProvider* dpp, const::std::string& key, optional_yield y) = 0; + virtual int get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) = 0; + virtual int set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) = 0; + virtual int update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) = 0; + virtual int delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs, optional_yield y) = 0; + virtual std::string get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, optional_yield y) = 0; + virtual int set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attr_val, optional_yield y) = 0; /* Partition */ virtual Partition get_current_partition_info(const DoutPrefixProvider* dpp) = 0; diff --git a/src/rgw/rgw_redis_driver.cc b/src/rgw/rgw_redis_driver.cc index f02c40e745230..64f4c4c61d843 100644 --- a/src/rgw/rgw_redis_driver.cc +++ b/src/rgw/rgw_redis_driver.cc @@ -159,7 +159,7 @@ int RedisDriver::initialize(CephContext* cct, const DoutPrefixProvider* dpp) return 0; } -int RedisDriver::put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs) +int RedisDriver::put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs, optional_yield y) { std::string entry = partition_info.location + key; @@ -190,7 +190,7 @@ int RedisDriver::put(const DoutPrefixProvider* dpp, const std::string& key, buff return 0; // why is offset necessarily 0? -Sam } -int RedisDriver::get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs) +int RedisDriver::get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs, optional_yield y) { std::string entry = partition_info.location + key; @@ -227,7 +227,7 @@ int RedisDriver::get(const DoutPrefixProvider* dpp, const std::string& key, off_ return 0; } -int RedisDriver::append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data) +int RedisDriver::append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data, optional_yield y) { std::string value; std::string entry = partition_info.location + key; @@ -272,7 +272,7 @@ int RedisDriver::append_data(const DoutPrefixProvider* dpp, const::std::string& return 0; } -int RedisDriver::delete_data(const DoutPrefixProvider* dpp, const::std::string& key) +int RedisDriver::delete_data(const DoutPrefixProvider* dpp, const::std::string& key, optional_yield y) { std::string entry = partition_info.location + key; @@ -319,7 +319,7 @@ int RedisDriver::delete_data(const DoutPrefixProvider* dpp, const::std::string& return 0; } -int RedisDriver::get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) +int RedisDriver::get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) { std::string entry = partition_info.location + key; @@ -352,7 +352,7 @@ int RedisDriver::get_attrs(const DoutPrefixProvider* dpp, const std::string& key return 0; } -int RedisDriver::set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) +int RedisDriver::set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) { if (attrs.empty()) return -1; @@ -385,7 +385,7 @@ return -1; return 0; } -int RedisDriver::update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) +int RedisDriver::update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) { std::string entry = partition_info.location + key; @@ -414,7 +414,7 @@ int RedisDriver::update_attrs(const DoutPrefixProvider* dpp, const std::string& return 0; } -int RedisDriver::delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs) +int RedisDriver::delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs, optional_yield y) { std::string entry = partition_info.location + key; @@ -474,7 +474,7 @@ if (reply.is_array()) { return -2; } -std::string RedisDriver::get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name) +std::string RedisDriver::get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, optional_yield y) { std::string entry = partition_info.location + key; std::string attrValue; @@ -519,7 +519,7 @@ std::string RedisDriver::get_attr(const DoutPrefixProvider* dpp, const std::stri return attrValue; } -int RedisDriver::set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attrVal) +int RedisDriver::set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attrVal, optional_yield y) { std::string entry = partition_info.location + key; int result = 0; diff --git a/src/rgw/rgw_redis_driver.h b/src/rgw/rgw_redis_driver.h index 4c12578ab1769..7de75471a2f55 100644 --- a/src/rgw/rgw_redis_driver.h +++ b/src/rgw/rgw_redis_driver.h @@ -34,16 +34,16 @@ class RedisDriver : public CacheDriver { static std::vector list_partitions(const DoutPrefixProvider* dpp); virtual int initialize(CephContext* cct, const DoutPrefixProvider* dpp) override; - virtual int put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs) override; - virtual int get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs) override; - virtual int append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data) override; - virtual int delete_data(const DoutPrefixProvider* dpp, const::std::string& key) override; - virtual int get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) override; - virtual int set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) override; - virtual int update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) override; - virtual int delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs) override; - virtual std::string get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name) override; - virtual int set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attr_val) override; + virtual int put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data, optional_yield y) override; + virtual int delete_data(const DoutPrefixProvider* dpp, const::std::string& key, optional_yield y) override; + virtual int get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs, optional_yield y) override; + virtual std::string get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, optional_yield y) override; + virtual int set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attr_val, optional_yield y) override; virtual rgw::AioResultList get_async(const DoutPrefixProvider* dpp, optional_yield y, rgw::Aio* aio, const std::string& key, off_t ofs, uint64_t len, uint64_t cost, uint64_t id) override; virtual int put_async(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs) override; diff --git a/src/rgw/rgw_ssd_driver.cc b/src/rgw/rgw_ssd_driver.cc index 2f89fef73cfc0..cf581fb1aaf89 100644 --- a/src/rgw/rgw_ssd_driver.cc +++ b/src/rgw/rgw_ssd_driver.cc @@ -98,7 +98,7 @@ int SSDDriver::initialize(CephContext* cct, const DoutPrefixProvider* dpp) return 0; } -int SSDDriver::put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs) +int SSDDriver::put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs, optional_yield y) { std::string location = partition_info.location + key; @@ -129,7 +129,7 @@ int SSDDriver::put(const DoutPrefixProvider* dpp, const std::string& key, buffer this->free_space = space.available; if (attrs.size() > 0) { - r = set_attrs(dpp, key, attrs); + r = set_attrs(dpp, key, attrs, y); if (r < 0) { ldpp_dout(dpp, 0) << "ERROR: put::set_attrs: failed to set attrs, r = " << r << dendl; return r; @@ -139,7 +139,7 @@ int SSDDriver::put(const DoutPrefixProvider* dpp, const std::string& key, buffer return 0; } -int SSDDriver::get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs) +int SSDDriver::get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs, optional_yield y) { char buffer[len]; std::string location = partition_info.location + key; @@ -170,7 +170,7 @@ int SSDDriver::get(const DoutPrefixProvider* dpp, const std::string& key, off_t ceph::encode(buffer, bl); if (attrs.size() > 0) { - r = get_attrs(dpp, key, attrs); + r = get_attrs(dpp, key, attrs, y); if (r < 0) { ldpp_dout(dpp, 0) << "ERROR: put::get_attrs: failed to get attrs, r = " << r << dendl; return r; @@ -266,7 +266,7 @@ int SSDDriver::put_async(const DoutPrefixProvider* dpp, const std::string& key, return 0; } -int SSDDriver::delete_data(const DoutPrefixProvider* dpp, const::std::string& key) +int SSDDriver::delete_data(const DoutPrefixProvider* dpp, const::std::string& key, optional_yield y) { std::string location = partition_info.location + key; @@ -281,7 +281,7 @@ int SSDDriver::delete_data(const DoutPrefixProvider* dpp, const::std::string& ke return 0; } -int SSDDriver::append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data) +int SSDDriver::append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data, optional_yield y) { std::string location = partition_info.location + key; @@ -368,7 +368,7 @@ void SSDDriver::AsyncReadOp::libaio_cb_aio_dispatch(sigval sigval) ceph::async::dispatch(std::move(p), ec, std::move(op.result)); } -int SSDDriver::update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) +int SSDDriver::update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) { std::string location = partition_info.location + key; ldpp_dout(dpp, 20) << "SSDCache: " << __func__ << "(): location=" << location << dendl; @@ -386,7 +386,7 @@ int SSDDriver::update_attrs(const DoutPrefixProvider* dpp, const std::string& ke return 0; } -int SSDDriver::delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs) +int SSDDriver::delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs, optional_yield y) { std::string location = partition_info.location + key; ldpp_dout(dpp, 20) << "SSDCache: " << __func__ << "(): location=" << location << dendl; @@ -401,7 +401,7 @@ int SSDDriver::delete_attrs(const DoutPrefixProvider* dpp, const std::string& ke return 0; } -int SSDDriver::get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) +int SSDDriver::get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) { std::string location = partition_info.location + key; ldpp_dout(dpp, 20) << "SSDCache: " << __func__ << "(): location=" << location << dendl; @@ -426,7 +426,7 @@ int SSDDriver::get_attrs(const DoutPrefixProvider* dpp, const std::string& key, keyptr += keylen; continue; } - std::string attr_value = get_attr(dpp, key, attr_name); + std::string attr_value = get_attr(dpp, key, attr_name, y); bufferlist bl_value; ceph::encode(attr_value, bl_value); attrs.emplace(std::move(attr_name), std::move(bl_value)); @@ -435,7 +435,7 @@ int SSDDriver::get_attrs(const DoutPrefixProvider* dpp, const std::string& key, return 0; } -int SSDDriver::set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) +int SSDDriver::set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) { std::string location = partition_info.location + key; ldpp_dout(dpp, 20) << "SSDCache: " << __func__ << "(): location=" << location << dendl; @@ -443,7 +443,7 @@ int SSDDriver::set_attrs(const DoutPrefixProvider* dpp, const std::string& key, for (auto& [attr_name, attr_val_bl] : attrs) { ldpp_dout(dpp, 20) << "SSDCache: " << __func__ << "(): attr_name = " << attr_name << " attr_val_bl length: " << attr_val_bl.length() << dendl; if (attr_val_bl.length() != 0) { - auto ret = set_attr(dpp, key, attr_name, attr_val_bl.c_str()); + auto ret = set_attr(dpp, key, attr_name, attr_val_bl.c_str(), y); if (ret < 0) { ldpp_dout(dpp, 0) << "SSDCache: " << __func__ << "(): could not set attr value for attr name: " << attr_name << " key: " << key << dendl; return ret; @@ -453,7 +453,7 @@ int SSDDriver::set_attrs(const DoutPrefixProvider* dpp, const std::string& key, return 0; } -std::string SSDDriver::get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name) +std::string SSDDriver::get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, optional_yield y) { std::string location = partition_info.location + key; ldpp_dout(dpp, 20) << "SSDCache: " << __func__ << "(): location=" << location << dendl; @@ -474,7 +474,7 @@ std::string SSDDriver::get_attr(const DoutPrefixProvider* dpp, const std::string return attr_val; } -int SSDDriver::set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attr_val) +int SSDDriver::set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attr_val, optional_yield y) { std::string location = partition_info.location + key; ldpp_dout(dpp, 20) << "SSDCache: " << __func__ << "(): location=" << location << dendl; diff --git a/src/rgw/rgw_ssd_driver.h b/src/rgw/rgw_ssd_driver.h index e012180827a20..9472eec3ecc40 100644 --- a/src/rgw/rgw_ssd_driver.h +++ b/src/rgw/rgw_ssd_driver.h @@ -12,18 +12,18 @@ public: virtual ~SSDDriver(); virtual int initialize(CephContext* cct, const DoutPrefixProvider* dpp) override; - virtual int put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs) override; - virtual int get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs) override; + virtual int put(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int get(const DoutPrefixProvider* dpp, const std::string& key, off_t offset, uint64_t len, bufferlist& bl, rgw::sal::Attrs& attrs, optional_yield y) override; virtual rgw::AioResultList get_async (const DoutPrefixProvider* dpp, optional_yield y, rgw::Aio* aio, const std::string& key, off_t ofs, uint64_t len, uint64_t cost, uint64_t id) override; virtual int put_async(const DoutPrefixProvider* dpp, const std::string& key, bufferlist& bl, uint64_t len, rgw::sal::Attrs& attrs) override; - virtual int append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data); - virtual int delete_data(const DoutPrefixProvider* dpp, const::std::string& key) override; - virtual int get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) override; - virtual int set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) override; - virtual int update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs) override; - virtual int delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs) override; - virtual std::string get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name) override; - virtual int set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attr_val) override; + virtual int append_data(const DoutPrefixProvider* dpp, const::std::string& key, bufferlist& bl_data, optional_yield y) override; + virtual int delete_data(const DoutPrefixProvider* dpp, const::std::string& key, optional_yield y) override; + virtual int get_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int set_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int update_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& attrs, optional_yield y) override; + virtual int delete_attrs(const DoutPrefixProvider* dpp, const std::string& key, rgw::sal::Attrs& del_attrs, optional_yield y) override; + virtual std::string get_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, optional_yield y) override; + virtual int set_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name, const std::string& attr_val, optional_yield y) override; int delete_attr(const DoutPrefixProvider* dpp, const std::string& key, const std::string& attr_name); /* Partition */