From 90ccfbfb63b9de1528a92c4bbbc034a9cca47aa5 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Tue, 16 Aug 2016 06:25:51 -0700 Subject: [PATCH] rgw: move the rgw sync code module around No real code change Signed-off-by: Yehuda Sadeh --- src/rgw/CMakeLists.txt | 1 + src/rgw/rgw_sync_module.cc | 180 +++++++-------------------------- src/rgw/rgw_sync_module.h | 50 ++++++++- src/rgw/rgw_sync_module_log.cc | 76 ++++++++++++++ src/rgw/rgw_sync_module_log.h | 15 +++ 5 files changed, 176 insertions(+), 146 deletions(-) create mode 100644 src/rgw/rgw_sync_module_log.cc create mode 100644 src/rgw/rgw_sync_module_log.h diff --git a/src/rgw/CMakeLists.txt b/src/rgw/CMakeLists.txt index 99287e18a49fd..4bbb548257b85 100644 --- a/src/rgw/CMakeLists.txt +++ b/src/rgw/CMakeLists.txt @@ -51,6 +51,7 @@ set(rgw_a_srcs rgw_sync.cc rgw_data_sync.cc rgw_sync_module.cc + rgw_sync_module_log.cc rgw_period_history.cc rgw_period_puller.cc rgw_period_pusher.cc diff --git a/src/rgw/rgw_sync_module.cc b/src/rgw/rgw_sync_module.cc index 845238cd66c33..3e65de6b46cbe 100644 --- a/src/rgw/rgw_sync_module.cc +++ b/src/rgw/rgw_sync_module.cc @@ -5,161 +5,51 @@ #include "rgw_data_sync.h" #include "rgw_boost_asio_yield.h" -#define dout_subsys ceph_subsys_rgw - -class RGWStatRemoteObjCBCR : public RGWCoroutine { -protected: - RGWDataSyncEnv *sync_env; +#include "rgw_sync_module_log.h" - RGWBucketInfo bucket_info; - rgw_obj_key key; +#define dout_subsys ceph_subsys_rgw - ceph::real_time mtime; - uint64_t size; - map attrs; -public: - RGWStatRemoteObjCBCR(RGWDataSyncEnv *_sync_env, +RGWStatRemoteObjCBCR::RGWStatRemoteObjCBCR(RGWDataSyncEnv *_sync_env, RGWBucketInfo& _bucket_info, rgw_obj_key& _key) : RGWCoroutine(_sync_env->cct), sync_env(_sync_env), - bucket_info(_bucket_info), key(_key) {} - virtual ~RGWStatRemoteObjCBCR() {} - - void set_result(ceph::real_time& _mtime, - uint64_t _size, - map& _attrs) { - mtime = _mtime; - size = _size; - attrs = std::move(_attrs); - } -}; - -class RGWCallStatRemoteObjCR : public RGWCoroutine { - ceph::real_time mtime; - uint64_t size{0}; - map attrs; - -protected: - RGWDataSyncEnv *sync_env; - - RGWBucketInfo bucket_info; - rgw_obj_key key; - -public: - RGWCallStatRemoteObjCR(RGWDataSyncEnv *_sync_env, - RGWBucketInfo& _bucket_info, rgw_obj_key& _key) : RGWCoroutine(_sync_env->cct), - sync_env(_sync_env), - bucket_info(_bucket_info), key(_key) { - } + bucket_info(_bucket_info), key(_key) { +} - virtual ~RGWCallStatRemoteObjCR() {} +RGWCallStatRemoteObjCR::RGWCallStatRemoteObjCR(RGWDataSyncEnv *_sync_env, + RGWBucketInfo& _bucket_info, rgw_obj_key& _key) : RGWCoroutine(_sync_env->cct), + sync_env(_sync_env), + bucket_info(_bucket_info), key(_key) { +} - int operate() { - reenter(this) { - yield { - call(new RGWStatRemoteObjCR(sync_env->async_rados, sync_env->store, - sync_env->source_zone, - bucket_info, key, &mtime, &size, &attrs)); - } - if (retcode < 0) { - ldout(sync_env->cct, 0) << "RGWStatRemoteObjCR() returned " << retcode << dendl; - return set_cr_error(retcode); - } - ldout(sync_env->cct, 20) << "stat of remote obj: z=" << sync_env->source_zone - << " b=" << bucket_info.bucket << " k=" << key << " size=" << size << " mtime=" << mtime - << " attrs=" << attrs << dendl; - yield { - RGWStatRemoteObjCBCR *cb = allocate_callback(); - if (cb) { - cb->set_result(mtime, size, attrs); - call(cb); - } - } - if (retcode < 0) { - ldout(sync_env->cct, 0) << "RGWStatRemoteObjCR() callback returned " << retcode << dendl; - return set_cr_error(retcode); +int RGWCallStatRemoteObjCR::operate() { + reenter(this) { + yield { + call(new RGWStatRemoteObjCR(sync_env->async_rados, sync_env->store, + sync_env->source_zone, + bucket_info, key, &mtime, &size, &attrs)); + } + if (retcode < 0) { + ldout(sync_env->cct, 0) << "RGWStatRemoteObjCR() returned " << retcode << dendl; + return set_cr_error(retcode); + } + ldout(sync_env->cct, 20) << "stat of remote obj: z=" << sync_env->source_zone + << " b=" << bucket_info.bucket << " k=" << key << " size=" << size << " mtime=" << mtime + << " attrs=" << attrs << dendl; + yield { + RGWStatRemoteObjCBCR *cb = allocate_callback(); + if (cb) { + cb->set_result(mtime, size, std::move(attrs)); + call(cb); } - return set_cr_done(); } - return 0; - } - - virtual RGWStatRemoteObjCBCR *allocate_callback() { - return nullptr; - } -}; - -class RGWLogStatRemoteObjCBCR : public RGWStatRemoteObjCBCR { -public: - RGWLogStatRemoteObjCBCR(RGWDataSyncEnv *_sync_env, - RGWBucketInfo& _bucket_info, rgw_obj_key& _key) : RGWStatRemoteObjCBCR(sync_env, bucket_info, key) {} - int operate() override { - ldout(sync_env->cct, 0) << "SYNC_LOG: stat of remote obj: z=" << sync_env->source_zone - << " b=" << bucket_info.bucket << " k=" << key << " size=" << size << " mtime=" << mtime - << " attrs=" << attrs << dendl; - return set_cr_done(); - } - -}; - -class RGWLogStatRemoteObjCR : public RGWCallStatRemoteObjCR { -public: - RGWLogStatRemoteObjCR(RGWDataSyncEnv *_sync_env, - RGWBucketInfo& _bucket_info, rgw_obj_key& _key) : RGWCallStatRemoteObjCR(_sync_env, _bucket_info, _key) { - } - - ~RGWLogStatRemoteObjCR() {} - - RGWStatRemoteObjCBCR *allocate_callback() override { - return new RGWLogStatRemoteObjCBCR(sync_env, bucket_info, key); - } -}; - -class RGWLogDataSyncModule : public RGWDataSyncModule { - string prefix; -public: - RGWLogDataSyncModule(const string& _prefix) : prefix(_prefix) {} - - RGWCoroutine *sync_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, uint64_t versioned_epoch) override { - ldout(sync_env->cct, 0) << prefix << ": SYNC_LOG: sync_object: b=" << bucket_info.bucket << " k=" << key << " versioned_epoch=" << versioned_epoch << dendl; - return new RGWLogStatRemoteObjCR(sync_env, bucket_info, key); - } - RGWCoroutine *remove_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, real_time& mtime, bool versioned, uint64_t versioned_epoch) override { - ldout(sync_env->cct, 0) << prefix << ": SYNC_LOG: rm_object: b=" << bucket_info.bucket << " k=" << key << " mtime=" << mtime << " versioned=" << versioned << " versioned_epoch=" << versioned_epoch << dendl; - return NULL; - } - RGWCoroutine *create_delete_marker(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, real_time& mtime, - rgw_bucket_entry_owner& owner, bool versioned, uint64_t versioned_epoch) override { - ldout(sync_env->cct, 0) << prefix << ": SYNC_LOG: create_delete_marker: b=" << bucket_info.bucket << " k=" << key << " mtime=" << mtime - << " versioned=" << versioned << " versioned_epoch=" << versioned_epoch << dendl; - return NULL; - } -}; - -class RGWLogSyncModuleInstance : public RGWSyncModuleInstance { - RGWLogDataSyncModule data_handler; -public: - RGWLogSyncModuleInstance(const string& prefix) : data_handler(prefix) {} - RGWDataSyncModule *get_data_handler() override { - return &data_handler; - } -}; - -class RGWLogSyncModule : public RGWSyncModule { -public: - RGWLogSyncModule() {} - bool supports_data_export() override { return false; } - int create_instance(map& config, RGWSyncModuleInstanceRef *instance) override { - string prefix; - auto i = config.find("prefix"); - if (i != config.end()) { - prefix = i->second; + if (retcode < 0) { + ldout(sync_env->cct, 0) << "RGWStatRemoteObjCR() callback returned " << retcode << dendl; + return set_cr_error(retcode); } - instance->reset(new RGWLogSyncModuleInstance(prefix)); - return 0; + return set_cr_done(); } -}; - - + return 0; +} void rgw_register_sync_modules(RGWSyncModulesManager *modules_manager) { diff --git a/src/rgw/rgw_sync_module.h b/src/rgw/rgw_sync_module.h index 3f7c5362711ed..7b465b9e8ce15 100644 --- a/src/rgw/rgw_sync_module.h +++ b/src/rgw/rgw_sync_module.h @@ -2,8 +2,8 @@ #define CEPH_RGW_SYNC_MODULE_H #include "rgw_common.h" +#include "rgw_coroutine.h" -class RGWCoroutine; class RGWBucketInfo; class RGWRemoteDataLog; struct RGWDataSyncEnv; @@ -90,6 +90,54 @@ public: } }; +class RGWStatRemoteObjCBCR : public RGWCoroutine { +protected: + RGWDataSyncEnv *sync_env; + + RGWBucketInfo bucket_info; + rgw_obj_key key; + + ceph::real_time mtime; + uint64_t size; + map attrs; +public: + RGWStatRemoteObjCBCR(RGWDataSyncEnv *_sync_env, + RGWBucketInfo& _bucket_info, rgw_obj_key& _key); + virtual ~RGWStatRemoteObjCBCR() {} + + void set_result(ceph::real_time& _mtime, + uint64_t _size, + map&& _attrs) { + mtime = _mtime; + size = _size; + attrs = std::move(_attrs); + } +}; + +class RGWCallStatRemoteObjCR : public RGWCoroutine { + ceph::real_time mtime; + uint64_t size{0}; + map attrs; + +protected: + RGWDataSyncEnv *sync_env; + + RGWBucketInfo bucket_info; + rgw_obj_key key; + +public: + RGWCallStatRemoteObjCR(RGWDataSyncEnv *_sync_env, + RGWBucketInfo& _bucket_info, rgw_obj_key& _key); + + virtual ~RGWCallStatRemoteObjCR() {} + + int operate() override; + + virtual RGWStatRemoteObjCBCR *allocate_callback() { + return nullptr; + } +}; + void rgw_register_sync_modules(RGWSyncModulesManager *modules_manager); #endif diff --git a/src/rgw/rgw_sync_module_log.cc b/src/rgw/rgw_sync_module_log.cc new file mode 100644 index 0000000000000..2c6352ac8a18b --- /dev/null +++ b/src/rgw/rgw_sync_module_log.cc @@ -0,0 +1,76 @@ +#include "rgw_common.h" +#include "rgw_coroutine.h" +#include "rgw_cr_rados.h" +#include "rgw_sync_module.h" +#include "rgw_data_sync.h" +#include "rgw_boost_asio_yield.h" +#include "rgw_sync_module_log.h" + +#define dout_subsys ceph_subsys_rgw + +class RGWLogStatRemoteObjCBCR : public RGWStatRemoteObjCBCR { +public: + RGWLogStatRemoteObjCBCR(RGWDataSyncEnv *_sync_env, + RGWBucketInfo& _bucket_info, rgw_obj_key& _key) : RGWStatRemoteObjCBCR(_sync_env, _bucket_info, _key) {} + int operate() override { + ldout(sync_env->cct, 0) << "SYNC_LOG: stat of remote obj: z=" << sync_env->source_zone + << " b=" << bucket_info.bucket << " k=" << key << " size=" << size << " mtime=" << mtime + << " attrs=" << attrs << dendl; + return set_cr_done(); + } + +}; + +class RGWLogStatRemoteObjCR : public RGWCallStatRemoteObjCR { +public: + RGWLogStatRemoteObjCR(RGWDataSyncEnv *_sync_env, + RGWBucketInfo& _bucket_info, rgw_obj_key& _key) : RGWCallStatRemoteObjCR(_sync_env, _bucket_info, _key) { + } + + ~RGWLogStatRemoteObjCR() {} + + RGWStatRemoteObjCBCR *allocate_callback() override { + return new RGWLogStatRemoteObjCBCR(sync_env, bucket_info, key); + } +}; + +class RGWLogDataSyncModule : public RGWDataSyncModule { + string prefix; +public: + RGWLogDataSyncModule(const string& _prefix) : prefix(_prefix) {} + + RGWCoroutine *sync_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, uint64_t versioned_epoch) override { + ldout(sync_env->cct, 0) << prefix << ": SYNC_LOG: sync_object: b=" << bucket_info.bucket << " k=" << key << " versioned_epoch=" << versioned_epoch << dendl; + return new RGWLogStatRemoteObjCR(sync_env, bucket_info, key); + } + RGWCoroutine *remove_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, real_time& mtime, bool versioned, uint64_t versioned_epoch) override { + ldout(sync_env->cct, 0) << prefix << ": SYNC_LOG: rm_object: b=" << bucket_info.bucket << " k=" << key << " mtime=" << mtime << " versioned=" << versioned << " versioned_epoch=" << versioned_epoch << dendl; + return NULL; + } + RGWCoroutine *create_delete_marker(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, real_time& mtime, + rgw_bucket_entry_owner& owner, bool versioned, uint64_t versioned_epoch) override { + ldout(sync_env->cct, 0) << prefix << ": SYNC_LOG: create_delete_marker: b=" << bucket_info.bucket << " k=" << key << " mtime=" << mtime + << " versioned=" << versioned << " versioned_epoch=" << versioned_epoch << dendl; + return NULL; + } +}; + +class RGWLogSyncModuleInstance : public RGWSyncModuleInstance { + RGWLogDataSyncModule data_handler; +public: + RGWLogSyncModuleInstance(const string& prefix) : data_handler(prefix) {} + RGWDataSyncModule *get_data_handler() override { + return &data_handler; + } +}; + +int RGWLogSyncModule::create_instance(map& config, RGWSyncModuleInstanceRef *instance) { + string prefix; + auto i = config.find("prefix"); + if (i != config.end()) { + prefix = i->second; + } + instance->reset(new RGWLogSyncModuleInstance(prefix)); + return 0; +} + diff --git a/src/rgw/rgw_sync_module_log.h b/src/rgw/rgw_sync_module_log.h new file mode 100644 index 0000000000000..f889e319ae923 --- /dev/null +++ b/src/rgw/rgw_sync_module_log.h @@ -0,0 +1,15 @@ +#ifndef CEPH_RGW_SYNC_MODULE_LOG_H +#define CEPH_RGW_SYNC_MODULE_LOG_H + +#include "rgw_sync_module.h" + +class RGWLogSyncModule : public RGWSyncModule { +public: + RGWLogSyncModule() {} + bool supports_data_export() override { + return false; + } + int create_instance(map& config, RGWSyncModuleInstanceRef *instance) override; +}; + +#endif -- 2.47.3