From: Adam C. Emerson Date: Tue, 12 May 2020 23:59:17 +0000 (-0400) Subject: rgw: Remove superfluous wrapper around datalog X-Git-Tag: v16.1.0~1154^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=56aa586f9cc40e32e4418b7715e3f6ea2118d7be;p=ceph.git rgw: Remove superfluous wrapper around datalog Signed-off-by: Adam C. Emerson --- diff --git a/src/rgw/CMakeLists.txt b/src/rgw/CMakeLists.txt index 8303f790e27..5d4ab489d10 100644 --- a/src/rgw/CMakeLists.txt +++ b/src/rgw/CMakeLists.txt @@ -28,7 +28,6 @@ set(librgw_common_srcs services/svc_bucket_sync_sobj.cc services/svc_cls.cc services/svc_config_key_rados.cc - services/svc_datalog_rados.cc services/svc_mdlog.cc services/svc_meta.cc services/svc_meta_be.cc diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index c16899f4426..73008201e83 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -62,7 +62,6 @@ extern "C" { #include "services/svc_sync_modules.h" #include "services/svc_cls.h" #include "services/svc_bilog_rados.h" -#include "services/svc_datalog_rados.h" #include "services/svc_mdlog.h" #include "services/svc_meta_be_otp.h" #include "services/svc_zone.h" diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index e1120a291eb..32f299efbc1 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -41,7 +41,6 @@ #include "services/svc_user.h" #include "services/svc_cls.h" #include "services/svc_bilog_rados.h" -#include "services/svc_datalog_rados.h" #include "include/rados/librados.hpp" // until everything is moved from rgw_common @@ -2024,28 +2023,29 @@ void rgw_data_change_log_entry::decode_json(JSONObj *obj) { } -RGWDataChangesLog::RGWDataChangesLog(RGWSI_Zone *zone_svc, RGWSI_Cls *cls_svc) - : cct(zone_svc->ctx()), changes(cct->_conf->rgw_data_log_changes_size) +RGWDataChangesLog::RGWDataChangesLog(CephContext* cct) + : cct(cct), + num_shards(cct->_conf->rgw_data_log_num_shards), + changes(cct->_conf->rgw_data_log_changes_size) {} + +void RGWDataChangesLog::init(RGWSI_Cls *cls_svc) { - svc.zone = zone_svc; svc.cls = cls_svc; - - num_shards = cct->_conf->rgw_data_log_num_shards; + assert(svc.cls); oids = new string[num_shards]; - - string prefix = cct->_conf->rgw_data_log_obj_prefix; - - if (prefix.empty()) { - prefix = "data_log"; - } - for (int i = 0; i < num_shards; i++) { oids[i] = get_oid(i); } +} - renew_thread = new ChangesRenewThread(cct, this); - renew_thread->create("rgw_dt_lg_renew"); +int RGWDataChangesLog::start(const RGWZone* _zone) +{ + zone = _zone; + assert(zone); + renew_thread = make_named_thread("rgw_dt_lg_renew", + &RGWDataChangesLog::renew_run, this); + return 0; } int RGWDataChangesLog::choose_oid(const rgw_bucket_shard& bs) { @@ -2058,7 +2058,7 @@ int RGWDataChangesLog::choose_oid(const rgw_bucket_shard& bs) { int RGWDataChangesLog::renew_entries() { - if (!svc.zone->need_to_log_data()) + if (!zone->log_data) return 0; /* we can't keep the bucket name as part of the cls_log_entry, and we need @@ -2374,35 +2374,34 @@ bool RGWDataChangesLog::going_down() RGWDataChangesLog::~RGWDataChangesLog() { down_flag = true; - renew_thread->stop(); - renew_thread->join(); - delete renew_thread; + if (renew_thread.joinable()) { + renew_stop(); + renew_thread.join(); + } delete[] oids; } -void *RGWDataChangesLog::ChangesRenewThread::entry() { +void RGWDataChangesLog::renew_run() { for (;;) { dout(2) << "RGWDataChangesLog::ChangesRenewThread: start" << dendl; - int r = log->renew_entries(); + int r = renew_entries(); if (r < 0) { dout(0) << "ERROR: RGWDataChangesLog::renew_entries returned error r=" << r << dendl; } - if (log->going_down()) + if (going_down()) break; int interval = cct->_conf->rgw_data_log_window * 3 / 4; - std::unique_lock locker{lock}; - cond.wait_for(locker, std::chrono::seconds(interval)); + std::unique_lock locker{renew_lock}; + renew_cond.wait_for(locker, std::chrono::seconds(interval)); } - - return NULL; } -void RGWDataChangesLog::ChangesRenewThread::stop() +void RGWDataChangesLog::renew_stop() { - std::lock_guard l{lock}; - cond.notify_all(); + std::lock_guard l{renew_lock}; + renew_cond.notify_all(); } void RGWDataChangesLog::mark_modified(int shard_id, const rgw_bucket_shard& bs) diff --git a/src/rgw/rgw_bucket.h b/src/rgw/rgw_bucket.h index 5e862bcf46b..127643187ce 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -32,6 +32,7 @@ class RGWBucketMetadataHandler; class RGWBucketInstanceMetadataHandler; class RGWUserCtl; class RGWBucketCtl; +class RGWZone; namespace rgw { namespace sal { class RGWRadosStore; @@ -492,9 +493,9 @@ struct RGWDataChangesLogMarker { class RGWDataChangesLog { CephContext *cct; rgw::BucketChangeObserver *observer = nullptr; + const RGWZone* zone; struct Svc { - RGWSI_Zone *zone{nullptr}; RGWSI_Cls *cls{nullptr}; } svc; @@ -528,27 +529,22 @@ class RGWDataChangesLog { void register_renew(rgw_bucket_shard& bs); void update_renewed(rgw_bucket_shard& bs, ceph::real_time& expiration); - class ChangesRenewThread : public Thread { - CephContext *cct; - RGWDataChangesLog *log; - ceph::mutex lock = ceph::make_mutex("ChangesRenewThread::lock"); - ceph::condition_variable cond; - - public: - ChangesRenewThread(CephContext *_cct, RGWDataChangesLog *_log) : cct(_cct), log(_log) {} - void *entry() override; - void stop(); - }; - - ChangesRenewThread* renew_thread; + ceph::mutex renew_lock = ceph::make_mutex("ChangesRenewThread::lock"); + ceph::condition_variable renew_cond; + void renew_run(); + void renew_stop(); + std::thread renew_thread; std::function bucket_filter; public: - RGWDataChangesLog(RGWSI_Zone *zone_svc, RGWSI_Cls *cls_svc); + RGWDataChangesLog(CephContext* cct); ~RGWDataChangesLog(); + void init(RGWSI_Cls *cls_svc); + int start(const RGWZone* _zone); + int choose_oid(const rgw_bucket_shard& bs); std::string get_oid(int shard_id) const; int add_entry(const RGWBucketInfo& bucket_info, int shard_id); diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 42d35f746e3..94000fd5a18 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -30,7 +30,7 @@ #include "services/svc_zone.h" #include "services/svc_sync_modules.h" -#include "services/svc_datalog_rados.h" +#include "rgw_bucket.h" #include "include/common_fwd.h" #include "include/random.h" diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 7ef9f755e72..edd506f3a7d 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -82,7 +82,6 @@ using namespace librados; #include "services/svc_sys_obj_cache.h" #include "services/svc_bucket.h" #include "services/svc_mdlog.h" -#include "services/svc_datalog_rados.h" #include "compressor/Compressor.h" @@ -455,7 +454,7 @@ public: int RGWDataNotifier::process() { - auto data_log = store->svc.datalog_rados->get_log(); + auto data_log = store->svc.datalog_rados; if (!data_log) { return 0; } diff --git a/src/rgw/rgw_rest_log.cc b/src/rgw/rgw_rest_log.cc index c3ed31b4f58..f67b2c032b2 100644 --- a/src/rgw/rgw_rest_log.cc +++ b/src/rgw/rgw_rest_log.cc @@ -29,7 +29,6 @@ #include "services/svc_zone.h" #include "services/svc_mdlog.h" #include "services/svc_bilog_rados.h" -#include "services/svc_datalog_rados.h" #include "common/errno.h" #include "include/ceph_assert.h" diff --git a/src/rgw/rgw_service.cc b/src/rgw/rgw_service.cc index b86290fbb03..6980b040307 100644 --- a/src/rgw/rgw_service.cc +++ b/src/rgw/rgw_service.cc @@ -10,7 +10,6 @@ #include "services/svc_bucket_sync_sobj.h" #include "services/svc_cls.h" #include "services/svc_config_key_rados.h" -#include "services/svc_datalog_rados.h" #include "services/svc_mdlog.h" #include "services/svc_meta.h" #include "services/svc_meta_be.h" @@ -56,7 +55,7 @@ int RGWServices_Def::init(CephContext *cct, bilog_rados = std::make_unique(cct); cls = std::make_unique(cct); config_key_rados = std::make_unique(cct); - datalog_rados = std::make_unique(cct); + datalog_rados = std::make_unique(cct); mdlog = std::make_unique(cct, run_sync); meta = std::make_unique(cct); meta_be_sobj = std::make_unique(cct); @@ -90,7 +89,7 @@ int RGWServices_Def::init(CephContext *cct, bucket_sobj.get()); cls->init(zone.get(), rados.get()); config_key_rados->init(rados.get()); - datalog_rados->init(zone.get(), cls.get()); + datalog_rados->init(cls.get()); mdlog->init(rados.get(), zone.get(), sysobj.get(), cls.get()); meta->init(sysobj.get(), mdlog.get(), meta_bes); meta_be_sobj->init(sysobj.get(), mdlog.get()); @@ -141,6 +140,12 @@ int RGWServices_Def::init(CephContext *cct, return r; } + r = datalog_rados->start(&zone->get_zone()); + if (r < 0) { + ldout(cct, 0) << "ERROR: failed to start datalog service (" << cpp_strerror(-r) << dendl; + return r; + } + r = mdlog->start(); if (r < 0) { ldout(cct, 0) << "ERROR: failed to start mdlog service (" << cpp_strerror(-r) << dendl; @@ -199,12 +204,6 @@ int RGWServices_Def::init(CephContext *cct, } if (!raw) { - r = datalog_rados->start(); - if (r < 0) { - ldout(cct, 0) << "ERROR: failed to start datalog_rados service (" << cpp_strerror(-r) << dendl; - return r; - } - r = meta_be_sobj->start(); if (r < 0) { ldout(cct, 0) << "ERROR: failed to start meta_be_sobj service (" << cpp_strerror(-r) << dendl; @@ -257,8 +256,6 @@ void RGWServices_Def::shutdown() return; } - datalog_rados->shutdown(); - sysobj->shutdown(); sysobj_core->shutdown(); notify->shutdown(); @@ -377,7 +374,7 @@ int RGWCtlDef::init(RGWServices& svc) bucket->init(user.get(), (RGWBucketMetadataHandler *)bucket_meta_handler, (RGWBucketInstanceMetadataHandler *)bi_meta_handler, - svc.datalog_rados->get_log()); + svc.datalog_rados); otp->init((RGWOTPMetadataHandler *)meta.otp.get()); diff --git a/src/rgw/rgw_service.h b/src/rgw/rgw_service.h index 02cf7ddea6a..fc3fbe7266b 100644 --- a/src/rgw/rgw_service.h +++ b/src/rgw/rgw_service.h @@ -55,7 +55,6 @@ class RGWSI_BILog_RADOS; class RGWSI_Cls; class RGWSI_ConfigKey; class RGWSI_ConfigKey_RADOS; -class RGWSI_DataLog_RADOS; class RGWSI_MDLog; class RGWSI_Meta; class RGWSI_MetaBackend; @@ -73,6 +72,7 @@ class RGWSI_SysObj_Core; class RGWSI_SysObj_Cache; class RGWSI_User; class RGWSI_User_RADOS; +class RGWDataChangesLog; struct RGWServices_Def { @@ -86,7 +86,6 @@ struct RGWServices_Def std::unique_ptr bilog_rados; std::unique_ptr cls; std::unique_ptr config_key_rados; - std::unique_ptr datalog_rados; std::unique_ptr mdlog; std::unique_ptr meta; std::unique_ptr meta_be_sobj; @@ -102,6 +101,7 @@ struct RGWServices_Def std::unique_ptr sysobj_core; std::unique_ptr sysobj_cache; std::unique_ptr user_rados; + std::unique_ptr datalog_rados; RGWServices_Def(); ~RGWServices_Def(); @@ -128,7 +128,7 @@ struct RGWServices RGWSI_Cls *cls{nullptr}; RGWSI_ConfigKey_RADOS *config_key_rados{nullptr}; RGWSI_ConfigKey *config_key{nullptr}; - RGWSI_DataLog_RADOS *datalog_rados{nullptr}; + RGWDataChangesLog *datalog_rados{nullptr}; RGWSI_MDLog *mdlog{nullptr}; RGWSI_Meta *meta{nullptr}; RGWSI_MetaBackend *meta_be_sobj{nullptr}; diff --git a/src/rgw/rgw_trim_datalog.cc b/src/rgw/rgw_trim_datalog.cc index a4c16169ae4..f5ab685e814 100644 --- a/src/rgw/rgw_trim_datalog.cc +++ b/src/rgw/rgw_trim_datalog.cc @@ -12,7 +12,6 @@ #include "rgw_bucket.h" #include "services/svc_zone.h" -#include "services/svc_datalog_rados.h" #include diff --git a/src/rgw/services/svc_bi_rados.cc b/src/rgw/services/svc_bi_rados.cc index b5f32472916..6a154f7a4d1 100644 --- a/src/rgw/services/svc_bi_rados.cc +++ b/src/rgw/services/svc_bi_rados.cc @@ -3,9 +3,9 @@ #include "svc_bi_rados.h" #include "svc_bilog_rados.h" -#include "svc_datalog_rados.h" #include "svc_zone.h" +#include "rgw/rgw_bucket.h" #include "rgw/rgw_zone.h" #include "cls/rgw/cls_rgw_client.h" @@ -21,7 +21,7 @@ RGWSI_BucketIndex_RADOS::RGWSI_BucketIndex_RADOS(CephContext *cct) : RGWSI_Bucke void RGWSI_BucketIndex_RADOS::init(RGWSI_Zone *zone_svc, RGWSI_RADOS *rados_svc, RGWSI_BILog_RADOS *bilog_svc, - RGWSI_DataLog_RADOS *datalog_rados_svc) + RGWDataChangesLog *datalog_rados_svc) { svc.zone = zone_svc; svc.rados = rados_svc; diff --git a/src/rgw/services/svc_bi_rados.h b/src/rgw/services/svc_bi_rados.h index 09ec645aa96..932affc74e7 100644 --- a/src/rgw/services/svc_bi_rados.h +++ b/src/rgw/services/svc_bi_rados.h @@ -1,4 +1,3 @@ - // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab ft=cpp @@ -26,7 +25,7 @@ struct rgw_bucket_dir_header; class RGWSI_BILog_RADOS; -class RGWSI_DataLog_RADOS; +class RGWDataChangesLog; #define RGW_NO_SHARD -1 @@ -68,7 +67,7 @@ public: RGWSI_Zone *zone{nullptr}; RGWSI_RADOS *rados{nullptr}; RGWSI_BILog_RADOS *bilog{nullptr}; - RGWSI_DataLog_RADOS *datalog_rados{nullptr}; + RGWDataChangesLog *datalog_rados{nullptr}; } svc; RGWSI_BucketIndex_RADOS(CephContext *cct); @@ -76,7 +75,7 @@ public: void init(RGWSI_Zone *zone_svc, RGWSI_RADOS *rados_svc, RGWSI_BILog_RADOS *bilog_svc, - RGWSI_DataLog_RADOS *datalog_rados_svc); + RGWDataChangesLog *datalog_rados_svc); static int shards_max() { return RGW_SHARDS_PRIME_1;