From 665829501df70d80d7aa3c2227bfefb363f5b7bc Mon Sep 17 00:00:00 2001 From: "Adam C. Emerson" Date: Sat, 21 Nov 2020 18:20:57 -0500 Subject: [PATCH] rgw: Move get_oid back to RGWDataChangesLog Signed-off-by: Adam C. Emerson (cherry picked from commit bdd3528e54e399135f602e1f7e94d070d89b8c99) Signed-off-by: Adam C. Emerson --- src/rgw/rgw_datalog.cc | 32 +++++++++++++++++++++----------- src/rgw/rgw_datalog.h | 28 ++++++++++++---------------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/rgw/rgw_datalog.cc b/src/rgw/rgw_datalog.cc index 92ad1869d3f48..9fc2fff83c103 100644 --- a/src/rgw/rgw_datalog.cc +++ b/src/rgw/rgw_datalog.cc @@ -73,9 +73,14 @@ void rgw_data_change_log_entry::decode_json(JSONObj *obj) { class RGWDataChangesOmap final : public RGWDataChangesBE { using centries = std::list; std::vector oids; + std::string get_oid(int i) const { + return datalog.get_oid(i); + } public: - RGWDataChangesOmap(lr::IoCtx& ioctx, int num_shards) - : RGWDataChangesBE(ioctx) { + RGWDataChangesOmap(lr::IoCtx& ioctx, + RGWDataChangesLog& datalog, + int num_shards) + : RGWDataChangesBE(ioctx, datalog) { oids.reserve(num_shards); for (auto i = 0; i < num_shards; ++i) { oids.push_back(get_oid(i)); @@ -203,9 +208,14 @@ public: class RGWDataChangesFIFO final : public RGWDataChangesBE { using centries = std::vector; std::vector> fifos; + std::string get_oid(int i) const { + return datalog.get_oid(i); + } public: - RGWDataChangesFIFO(lr::IoCtx& ioctx, int shards) - : RGWDataChangesBE(ioctx) { + RGWDataChangesFIFO(lr::IoCtx& ioctx, + RGWDataChangesLog& datalog, + int shards) + : RGWDataChangesBE(ioctx, datalog) { fifos.resize(shards); for (auto i = 0; i < shards; ++i) { auto r = rgw::cls::fifo::FIFO::create(ioctx, get_oid(i), @@ -362,6 +372,7 @@ public: RGWDataChangesLog::RGWDataChangesLog(CephContext* cct) : cct(cct), num_shards(cct->_conf->rgw_data_log_num_shards), + prefix(get_prefix()), changes(cct->_conf->rgw_data_log_changes_size) {} int RGWDataChangesLog::start(const RGWZone* _zone, @@ -382,11 +393,10 @@ int RGWDataChangesLog::start(const RGWZone* _zone, << ", pool=" << log_pool << dendl; return -r; } + auto found = log_backing_type(ioctx, *defbacking, num_shards, - [this](int i) { - return RGWDataChangesBE::get_oid(cct, i); - }, - null_yield); + [this](int i) { return get_oid(i); }, + null_yield); if (!found) { lderr(cct) << __PRETTY_FUNCTION__ @@ -396,10 +406,10 @@ int RGWDataChangesLog::start(const RGWZone* _zone, try { switch (*found) { case log_type::omap: - be = std::make_unique(ioctx, num_shards); + be = std::make_unique(ioctx, *this, num_shards); break; case log_type::fifo: - be = std::make_unique(ioctx, num_shards); + be = std::make_unique(ioctx, *this, num_shards); break; } } catch (bs::system_error& e) { @@ -521,7 +531,7 @@ bool RGWDataChangesLog::filter_bucket(const rgw_bucket& bucket, } std::string RGWDataChangesLog::get_oid(int i) const { - return be->get_oid(i); + return fmt::format("{}.{}", prefix, i); } int RGWDataChangesLog::add_entry(const RGWBucketInfo& bucket_info, int shard_id) { diff --git a/src/rgw/rgw_datalog.h b/src/rgw/rgw_datalog.h index f6f52382f0947..387d50a1d4964 100644 --- a/src/rgw/rgw_datalog.h +++ b/src/rgw/rgw_datalog.h @@ -20,6 +20,7 @@ #include "include/buffer.h" #include "include/encoding.h" +#include "include/function2.hpp" #include "include/rados/librados.hpp" @@ -114,34 +115,24 @@ struct RGWDataChangesLogMarker { RGWDataChangesLogMarker() = default; }; +class RGWDataChangesLog; + class RGWDataChangesBE { protected: librados::IoCtx& ioctx; CephContext* const cct; + RGWDataChangesLog& datalog; private: - std::string prefix; - static std::string_view get_prefix(CephContext* cct) { - std::string_view prefix = cct->_conf->rgw_data_log_obj_prefix; - if (prefix.empty()) { - prefix = "data_log"sv; - } - return prefix; - } public: using entries = std::variant, std::vector>; - RGWDataChangesBE(librados::IoCtx& ioctx) + RGWDataChangesBE(librados::IoCtx& ioctx, + RGWDataChangesLog& datalog) : ioctx(ioctx), cct(static_cast(ioctx.cct())), - prefix(get_prefix(cct)) {} + datalog(datalog) {} virtual ~RGWDataChangesBE() = default; - static std::string get_oid(CephContext* cct, int i) { - return fmt::format("{}.{}", get_prefix(cct), i); - } - std::string get_oid(int i) { - return fmt::format("{}.{}", prefix, i); - } virtual void prepare(ceph::real_time now, const std::string& key, ceph::buffer::list&& entry, @@ -169,6 +160,11 @@ class RGWDataChangesLog { std::unique_ptr be; const int num_shards; + std::string get_prefix() { + auto prefix = cct->_conf->rgw_data_log_obj_prefix; + return prefix.empty() ? prefix : "data_log"s; + } + std::string prefix; ceph::mutex lock = ceph::make_mutex("RGWDataChangesLog::lock"); ceph::shared_mutex modified_lock = -- 2.39.5