services/svc_cls.cc
services/svc_config_key_rados.cc
services/svc_mdlog.cc
- services/svc_meta.cc
- services/svc_meta_be.cc
- services/svc_meta_be_sobj.cc
services/svc_notify.cc
services/svc_quota.cc
services/svc_sync_modules.cc
ep.emplace();
int r = read_bucket_entrypoint_info(*b, &(*ep), y, dpp, RGWBucketCtl::Bucket::GetParams()
- .set_bectx_params(params.bectx_params)
.set_objv_tracker(ep_objv_tracker));
if (r < 0) {
return r;
// define as static when RGWBucket implementation completes
extern void rgw_get_buckets_obj(const rgw_user& user_id, std::string& buckets_obj_id);
-class RGWSI_Meta;
class RGWBucketMetadataHandler;
class RGWBucketInstanceMetadataHandler;
class RGWUserCtl;
std::map<std::string, bufferlist> *attrs{nullptr};
rgw_cache_entry_info *cache_info{nullptr};
boost::optional<obj_version> refresh_version;
- std::optional<RGWSI_MetaBackend_CtxParams> bectx_params;
GetParams() {}
refresh_version = _refresh_version;
return *this;
}
-
- GetParams& set_bectx_params(std::optional<RGWSI_MetaBackend_CtxParams> _bectx_params) {
- bectx_params = _bectx_params;
- return *this;
- }
};
struct PutParams {
rgw_cache_entry_info *cache_info{nullptr};
boost::optional<obj_version> refresh_version;
RGWObjVersionTracker *objv_tracker{nullptr};
- std::optional<RGWSI_MetaBackend_CtxParams> bectx_params;
GetParams() {}
objv_tracker = _objv_tracker;
return *this;
}
-
- GetParams& set_bectx_params(std::optional<RGWSI_MetaBackend_CtxParams> _bectx_params) {
- bectx_params = _bectx_params;
- return *this;
- }
};
struct PutParams {
#include "cls/log/cls_log_types.h"
#include "common/RefCountedObj.h"
#include "common/ceph_time.h"
-#include "services/svc_meta_be.h"
#include "rgw_sal_fwd.h"
class RGWMetadataHandler {
friend class RGWMetadataManager;
-protected:
- CephContext *cct;
-
public:
RGWMetadataHandler() {}
virtual ~RGWMetadataHandler();
virtual std::string get_type() = 0;
- void base_init(CephContext *_cct) {
- cct = _cct;
- }
-
virtual RGWMetadataObject *get_meta_obj(JSONObj *jo, const obj_version& objv, const ceph::real_time& mtime) = 0;
virtual int get(std::string& entry, RGWMetadataObject **obj, optional_yield, const DoutPrefixProvider *dpp) = 0;
virtual int attach(RGWMetadataManager *manager);
};
-class RGWMetadataHandler_GenericMetaBE : public RGWMetadataHandler {
- friend class RGWSI_MetaBackend;
- friend class RGWMetadataManager;
- friend class Put;
-
-public:
- class Put;
-
-protected:
- RGWSI_MetaBackend_Handler *be_handler;
-
- virtual int do_get(RGWSI_MetaBackend_Handler::Op *op, std::string& entry, RGWMetadataObject **obj, optional_yield y, const DoutPrefixProvider *dpp) = 0;
- virtual int do_put(RGWSI_MetaBackend_Handler::Op *op, std::string& entry, RGWMetadataObject *obj,
- RGWObjVersionTracker& objv_tracker, optional_yield y,
- const DoutPrefixProvider *dpp, RGWMDLogSyncType type,
- bool from_remote_zone) = 0;
- virtual int do_put_operate(Put *put_op, const DoutPrefixProvider *dpp);
- virtual int do_remove(RGWSI_MetaBackend_Handler::Op *op, std::string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y, const DoutPrefixProvider *dpp) = 0;
-
-public:
- RGWMetadataHandler_GenericMetaBE() {}
-
- void base_init(CephContext *_cct,
- RGWSI_MetaBackend_Handler *_be_handler) {
- RGWMetadataHandler::base_init(_cct);
- be_handler = _be_handler;
- }
-
- RGWSI_MetaBackend_Handler *get_be_handler() {
- return be_handler;
- }
-
- class Put {
- protected:
- RGWMetadataHandler_GenericMetaBE *handler;
- RGWSI_MetaBackend_Handler::Op *op;
- std::string& entry;
- RGWMetadataObject *obj;
- RGWObjVersionTracker& objv_tracker;
- RGWMDLogSyncType apply_type;
- optional_yield y;
- bool from_remote_zone{false};
-
- int get(RGWMetadataObject **obj, const DoutPrefixProvider *dpp) {
- return handler->do_get(op, entry, obj, y, dpp);
- }
- public:
- Put(RGWMetadataHandler_GenericMetaBE *_handler, RGWSI_MetaBackend_Handler::Op *_op,
- std::string& _entry, RGWMetadataObject *_obj,
- RGWObjVersionTracker& _objv_tracker, optional_yield _y,
- RGWMDLogSyncType _type, bool from_remote_zone);
-
- virtual ~Put() {}
-
- virtual int put_pre(const DoutPrefixProvider *dpp) {
- return 0;
- }
- virtual int put(const DoutPrefixProvider *dpp) {
- return 0;
- }
- virtual int put_post(const DoutPrefixProvider *dpp) {
- return 0;
- }
- virtual int finalize() {
- return 0;
- }
- };
-
- int get(std::string& entry, RGWMetadataObject **obj, optional_yield, const DoutPrefixProvider *dpp) override;
- int put(std::string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield, const DoutPrefixProvider *dpp, RGWMDLogSyncType type, bool from_remote_zone) override;
- int remove(std::string& entry, RGWObjVersionTracker& objv_tracker, optional_yield, const DoutPrefixProvider *dpp) override;
-
- int mutate(const std::string& entry,
- const ceph::real_time& mtime,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp,
- RGWMDLogStatus op_type,
- std::function<int()> f) override;
-
- int get_shard_id(const std::string& entry, int *shard_id) override;
-
- int list_keys_init(const DoutPrefixProvider *dpp, const std::string& marker, void **phandle) override;
- int list_keys_next(const DoutPrefixProvider *dpp, void *handle, int max, std::list<std::string>& keys, bool *truncated) override;
- void list_keys_complete(void *handle) override;
-
- std::string get_marker(void *handle) override;
-
- /**
- * Compare an incoming versus on-disk tag/version+mtime combo against
- * the sync mode to see if the new one should replace the on-disk one.
- *
- * @return true if the update should proceed, false otherwise.
- */
- static bool check_versions(bool exists,
- const obj_version& ondisk, const real_time& ondisk_time,
- const obj_version& incoming, const real_time& incoming_time,
- RGWMDLogSyncType sync_mode) {
- switch (sync_mode) {
- case APPLY_UPDATES:
- if ((ondisk.tag != incoming.tag) ||
- (ondisk.ver >= incoming.ver))
- return false;
- break;
- case APPLY_NEWER:
- if (ondisk_time >= incoming_time)
- return false;
- break;
- case APPLY_EXCLUSIVE:
- if (exists)
- return false;
- break;
- case APPLY_ALWAYS: //deliberate fall-thru -- we always apply!
- default: break;
- }
- return true;
- }
-};
-
class RGWMetadataTopHandler;
class RGWMetadataManager {
friend class RGWMetadataHandler;
CephContext *cct;
- RGWSI_Meta *meta_svc;
std::map<std::string, RGWMetadataHandler *> handlers;
std::unique_ptr<RGWMetadataTopHandler> md_top_handler;
int register_handler(RGWMetadataHandler *handler);
public:
- RGWMetadataManager(RGWSI_Meta *_meta_svc);
+ RGWMetadataManager();
~RGWMetadataManager();
RGWMetadataHandler *get_handler(const std::string& type);
int get_shard_id(const std::string& section, const std::string& key, int *shard_id);
};
-class RGWMetadataHandlerPut_SObj : public RGWMetadataHandler_GenericMetaBE::Put
-{
-protected:
- std::unique_ptr<RGWMetadataObject> oo;
- RGWMetadataObject *old_obj{nullptr};
- bool exists{false};
-
-public:
- RGWMetadataHandlerPut_SObj(RGWMetadataHandler_GenericMetaBE *handler, RGWSI_MetaBackend_Handler::Op *op,
- std::string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker,
- optional_yield y,
- RGWMDLogSyncType type, bool from_remote_zone);
- ~RGWMetadataHandlerPut_SObj();
-
- int put_pre(const DoutPrefixProvider *dpp) override;
- int put(const DoutPrefixProvider *dpp) override;
- virtual int put_check(const DoutPrefixProvider *dpp) {
- return 0;
- }
- virtual int put_checked(const DoutPrefixProvider *dpp);
- virtual void encode_obj(bufferlist *bl) {}
-};
-
void rgw_shard_name(const std::string& prefix, unsigned max_shards, const std::string& key, std::string& name, int *shard_id);
void rgw_shard_name(const std::string& prefix, unsigned max_shards, const std::string& section, const std::string& key, std::string& name);
void rgw_shard_name(const std::string& prefix, unsigned shard_id, std::string& name);
#include "rgw_rest_user.h"
#include "services/svc_sys_obj.h"
#include "services/svc_mdlog.h"
-#include "services/svc_meta.h"
-#include "services/svc_meta_be_sobj.h"
#include "services/svc_cls.h"
#include "services/svc_bilog_rados.h"
#include "services/svc_bi_rados.h"
{
int ret;
- RGWSI_MetaBackend_CtxParams bectx_params = RGWSI_MetaBackend_CtxParams_SObj();
RGWObjVersionTracker ep_ot;
if (info.bucket.bucket_id.empty()) {
ret = store->ctl()->bucket->read_bucket_info(info.bucket, &info, y, dpp,
RGWBucketCtl::BucketInstance::GetParams()
.set_mtime(&mtime)
- .set_attrs(&attrs)
- .set_bectx_params(bectx_params),
+ .set_attrs(&attrs),
&ep_ot);
} else {
ret = store->ctl()->bucket->read_bucket_instance_info(info.bucket, &info, y, dpp,
RGWBucketCtl::BucketInstance::GetParams()
.set_mtime(&mtime)
- .set_attrs(&attrs)
- .set_bectx_params(bectx_params));
+ .set_attrs(&attrs));
}
if (ret != 0) {
return ret;
#include "services/svc_cls.h"
#include "services/svc_config_key_rados.h"
#include "services/svc_mdlog.h"
-#include "services/svc_meta.h"
-#include "services/svc_meta_be.h"
-#include "services/svc_meta_be_sobj.h"
#include "services/svc_notify.h"
#include "services/svc_zone.h"
#include "services/svc_zone_utils.h"
config_key_rados = std::make_unique<RGWSI_ConfigKey_RADOS>(cct);
datalog_rados = std::make_unique<RGWDataChangesLog>(cct);
mdlog = std::make_unique<RGWSI_MDLog>(cct, run_sync);
- meta = std::make_unique<RGWSI_Meta>(cct);
- meta_be_sobj = std::make_unique<RGWSI_MetaBackend_SObj>(cct);
notify = std::make_unique<RGWSI_Notify>(cct);
zone = std::make_unique<RGWSI_Zone>(cct);
zone_utils = std::make_unique<RGWSI_ZoneUtils>(cct);
sysobj_cache = std::make_unique<RGWSI_SysObj_Cache>(dpp, cct);
}
- vector<RGWSI_MetaBackend *> meta_bes{meta_be_sobj.get()};
-
async_processor->start();
finisher->init();
bi_rados->init(zone.get(), driver->getRados()->get_rados_handle(),
bilog_rados.get(), datalog_rados.get());
bilog_rados->init(bi_rados.get());
bucket_sobj->init(zone.get(), sysobj.get(), sysobj_cache.get(),
- bi_rados.get(), meta.get(), mdlog.get(),
+ bi_rados.get(), mdlog.get(),
sync_modules.get(), bucket_sync_sobj.get());
bucket_sync_sobj->init(zone.get(),
sysobj.get(),
config_key_rados->init(driver->getRados()->get_rados_handle());
mdlog->init(driver->getRados()->get_rados_handle(), zone.get(), sysobj.get(),
cls.get(), async_processor.get());
- meta->init(sysobj.get(), mdlog.get(), meta_bes);
- meta_be_sobj->init(sysobj.get(), mdlog.get());
notify->init(zone.get(), driver->getRados()->get_rados_handle(),
finisher.get());
zone->init(sysobj.get(), driver->getRados()->get_rados_handle(),
} else {
sysobj->init(driver->getRados()->get_rados_handle(), sysobj_core.get());
}
- user_rados->init(driver->getRados()->get_rados_handle(), zone.get(), mdlog.get(),
- sysobj.get(), sysobj_cache.get(), meta.get());
+ user_rados->init(driver->getRados()->get_rados_handle(), zone.get(),
+ mdlog.get(), sysobj.get(), sysobj_cache.get());
can_shutdown = true;
}
if (!raw) {
- r = meta_be_sobj->start(y, dpp);
- if (r < 0) {
- ldpp_dout(dpp, 0) << "ERROR: failed to start meta_be_sobj service (" << cpp_strerror(-r) << dendl;
- return r;
- }
-
- r = meta->start(y, dpp);
- if (r < 0) {
- ldpp_dout(dpp, 0) << "ERROR: failed to start meta service (" << cpp_strerror(-r) << dendl;
- return r;
- }
-
r = bucket_sobj->start(y, dpp);
if (r < 0) {
ldpp_dout(dpp, 0) << "ERROR: failed to start bucket service (" << cpp_strerror(-r) << dendl;
user_rados->shutdown();
sync_modules->shutdown();
notify->shutdown();
- meta_be_sobj->shutdown();
- meta->shutdown();
mdlog->shutdown();
config_key_rados->shutdown();
cls->shutdown();
config_key = config_key_rados;
datalog_rados = _svc.datalog_rados.get();
mdlog = _svc.mdlog.get();
- meta = _svc.meta.get();
- meta_be_sobj = _svc.meta_be_sobj.get();
notify = _svc.notify.get();
zone = _svc.zone.get();
zone_utils = _svc.zone_utils.get();
int RGWCtlDef::init(RGWServices& svc, rgw::sal::Driver* driver,
librados::Rados& rados, const DoutPrefixProvider *dpp)
{
- meta.mgr.reset(new RGWMetadataManager(svc.meta));
+ meta.mgr.reset(new RGWMetadataManager());
meta.user = create_user_metadata_handler(svc.user);
class RGWSI_ConfigKey;
class RGWSI_ConfigKey_RADOS;
class RGWSI_MDLog;
-class RGWSI_Meta;
-class RGWSI_MetaBackend;
-class RGWSI_MetaBackend_SObj;
-class RGWSI_MetaBackend_OTP;
class RGWSI_Notify;
class RGWSI_OTP;
class RGWSI_Zone;
std::unique_ptr<RGWSI_Cls> cls;
std::unique_ptr<RGWSI_ConfigKey_RADOS> config_key_rados;
std::unique_ptr<RGWSI_MDLog> mdlog;
- std::unique_ptr<RGWSI_Meta> meta;
- std::unique_ptr<RGWSI_MetaBackend_SObj> meta_be_sobj;
std::unique_ptr<RGWSI_Notify> notify;
std::unique_ptr<RGWSI_Zone> zone;
std::unique_ptr<RGWSI_ZoneUtils> zone_utils;
RGWSI_ConfigKey *config_key{nullptr};
RGWDataChangesLog *datalog_rados{nullptr};
RGWSI_MDLog *mdlog{nullptr};
- RGWSI_Meta *meta{nullptr};
- RGWSI_MetaBackend *meta_be_sobj{nullptr};
RGWSI_Notify *notify{nullptr};
RGWSI_Zone *zone{nullptr};
RGWSI_ZoneUtils *zone_utils{nullptr};
#include "rgw_bucket.h"
#include "services/svc_zone.h"
-#include "services/svc_meta.h"
#include "services/svc_bilog_rados.h"
#include <boost/asio/yield.hpp>
#include "rgw_cr_rest.h"
#include "rgw_zone.h"
#include "services/svc_zone.h"
-#include "services/svc_meta.h"
#include "services/svc_mdlog.h"
#include "services/svc_cls.h"
#include "rgw_rest_iam.h" // validate_iam_user_name()
#include "services/svc_user.h"
-#include "services/svc_meta.h"
#define dout_subsys ceph_subsys_rgw
#define META_LOG_OBJ_PREFIX "meta.log."
+class RGWSI_Cls;
+class RGWSI_Zone;
+
struct RGWMetadataLogInfo {
std::string marker;
real_time last_update;
#include "rgw_mdlog.h"
-
-#include "services/svc_meta.h"
-#include "services/svc_meta_be_sobj.h"
-
#define dout_subsys ceph_subsys_rgw
using namespace std;
l.back()->status = MDLOG_STATUS_WRITE;
}
-RGWMetadataHandler_GenericMetaBE::Put::Put(RGWMetadataHandler_GenericMetaBE *_handler,
- RGWSI_MetaBackend_Handler::Op *_op,
- string& _entry, RGWMetadataObject *_obj,
- RGWObjVersionTracker& _objv_tracker,
- optional_yield _y,
- RGWMDLogSyncType _type, bool _from_remote_zone):
- handler(_handler), op(_op),
- entry(_entry), obj(_obj),
- objv_tracker(_objv_tracker),
- apply_type(_type),
- y(_y),
- from_remote_zone(_from_remote_zone)
-{
-}
-
-int RGWMetadataHandler_GenericMetaBE::do_put_operate(Put *put_op, const DoutPrefixProvider *dpp)
-{
- int r = put_op->put_pre(dpp);
- if (r != 0) { /* r can also be STATUS_NO_APPLY */
- return r;
- }
-
- r = put_op->put(dpp);
- if (r != 0) {
- return r;
- }
-
- r = put_op->put_post(dpp);
- if (r != 0) { /* e.g., -error or STATUS_APPLIED */
- return r;
- }
-
- return 0;
-}
-
-int RGWMetadataHandler_GenericMetaBE::get(string& entry, RGWMetadataObject **obj, optional_yield y, const DoutPrefixProvider *dpp)
-{
- return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
- return do_get(op, entry, obj, y, dpp);
- });
-}
-
-int RGWMetadataHandler_GenericMetaBE::put(string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker,
- optional_yield y, const DoutPrefixProvider *dpp, RGWMDLogSyncType type, bool from_remote_zone)
-{
- return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
- return do_put(op, entry, obj, objv_tracker, y, dpp, type, from_remote_zone);
- });
-}
-
-int RGWMetadataHandler_GenericMetaBE::remove(string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y, const DoutPrefixProvider *dpp)
-{
- return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
- return do_remove(op, entry, objv_tracker, y, dpp);
- });
-}
-
-int RGWMetadataHandler_GenericMetaBE::mutate(const string& entry,
- const ceph::real_time& mtime,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp,
- RGWMDLogStatus op_type,
- std::function<int()> f)
-{
- return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
- RGWSI_MetaBackend::MutateParams params(mtime, op_type);
- return op->mutate(entry,
- params,
- objv_tracker,
- y,
- f,
- dpp);
- });
-}
-
-int RGWMetadataHandler_GenericMetaBE::get_shard_id(const string& entry, int *shard_id)
-{
- return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
- return op->get_shard_id(entry, shard_id);
- });
-}
-
-int RGWMetadataHandler_GenericMetaBE::list_keys_init(const DoutPrefixProvider *dpp, const string& marker, void **phandle)
-{
- auto op = std::make_unique<RGWSI_MetaBackend_Handler::Op_ManagedCtx>(be_handler);
-
- int ret = op->list_init(dpp, marker);
- if (ret < 0) {
- return ret;
- }
-
- *phandle = (void *)op.release();
-
- return 0;
-}
-
-int RGWMetadataHandler_GenericMetaBE::list_keys_next(const DoutPrefixProvider *dpp, void *handle, int max, list<string>& keys, bool *truncated)
-{
- auto op = static_cast<RGWSI_MetaBackend_Handler::Op_ManagedCtx *>(handle);
-
- int ret = op->list_next(dpp, max, &keys, truncated);
- if (ret < 0 && ret != -ENOENT) {
- return ret;
- }
- if (ret == -ENOENT) {
- if (truncated) {
- *truncated = false;
- }
- return 0;
- }
-
- return 0;
-}
-
-void RGWMetadataHandler_GenericMetaBE::list_keys_complete(void *handle)
-{
- auto op = static_cast<RGWSI_MetaBackend_Handler::Op_ManagedCtx *>(handle);
- delete op;
-}
-
-string RGWMetadataHandler_GenericMetaBE::get_marker(void *handle)
-{
- auto op = static_cast<RGWSI_MetaBackend_Handler::Op_ManagedCtx *>(handle);
- string marker;
- int r = op->list_get_marker(&marker);
- if (r < 0) {
- ldout(cct, 0) << "ERROR: " << __func__ << "(): list_get_marker() returned: r=" << r << dendl;
- /* not much else to do */
- }
-
- return marker;
-}
-
-RGWMetadataHandlerPut_SObj::RGWMetadataHandlerPut_SObj(RGWMetadataHandler_GenericMetaBE *handler,
- RGWSI_MetaBackend_Handler::Op *op,
- string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker,
- optional_yield y,
- RGWMDLogSyncType type, bool from_remote_zone) : Put(handler, op, entry, obj, objv_tracker, y, type, from_remote_zone) {
-}
-
-int RGWMetadataHandlerPut_SObj::put_pre(const DoutPrefixProvider *dpp)
-{
- int ret = get(&old_obj, dpp);
- if (ret < 0 && ret != -ENOENT) {
- return ret;
- }
- exists = (ret != -ENOENT);
-
- oo.reset(old_obj);
-
- auto old_ver = (!old_obj ? obj_version() : old_obj->get_version());
- auto old_mtime = (!old_obj ? ceph::real_time() : old_obj->get_mtime());
-
- // are we actually going to perform this put, or is it too old?
- if (!handler->check_versions(exists, old_ver, old_mtime,
- objv_tracker.write_version, obj->get_mtime(),
- apply_type)) {
- return STATUS_NO_APPLY;
- }
-
- objv_tracker.read_version = old_ver; /* maintain the obj version we just read */
-
- return 0;
-}
-
-int RGWMetadataHandlerPut_SObj::put(const DoutPrefixProvider *dpp)
-{
- int ret = put_check(dpp);
- if (ret != 0) {
- return ret;
- }
-
- return put_checked(dpp);
-}
-
-int RGWMetadataHandlerPut_SObj::put_checked(const DoutPrefixProvider *dpp)
-{
- RGWSI_MBSObj_PutParams params(obj->get_pattrs(), obj->get_mtime());
-
- encode_obj(¶ms.bl);
-
- int ret = op->put(entry, params, &objv_tracker, y, dpp);
- if (ret < 0) {
- return ret;
- }
-
- return 0;
-}
-
class RGWMetadataTopHandler : public RGWMetadataHandler {
struct iter_data {
set<string> sections;
set<string>::iterator iter;
};
- struct Svc {
- RGWSI_Meta *meta{nullptr};
- } svc;
-
RGWMetadataManager *mgr;
public:
- RGWMetadataTopHandler(RGWSI_Meta *meta_svc,
- RGWMetadataManager *_mgr) : mgr(_mgr) {
- base_init(meta_svc->ctx());
- svc.meta = meta_svc;
- }
+ explicit RGWMetadataTopHandler(RGWMetadataManager *_mgr) : mgr(_mgr) {}
string get_type() override { return string(); }
}
};
-RGWMetadataHandlerPut_SObj::~RGWMetadataHandlerPut_SObj() {}
-
int RGWMetadataHandler::attach(RGWMetadataManager *manager)
{
return manager->register_handler(this);
return objv;
}
-RGWMetadataManager::RGWMetadataManager(RGWSI_Meta *_meta_svc)
- : cct(_meta_svc->ctx()), meta_svc(_meta_svc)
+RGWMetadataManager::RGWMetadataManager()
{
- md_top_handler.reset(new RGWMetadataTopHandler(meta_svc, this));
+ md_top_handler.reset(new RGWMetadataTopHandler(this));
}
RGWMetadataManager::~RGWMetadataManager()
encode_json("data", log_data, f);
} catch (buffer::error& err) {
- lderr(cct) << "failed to decode log entry: " << entry.section << ":" << entry.name<< " ts=" << entry.timestamp << dendl;
}
f->close_section();
}
#include "rgw_user.h"
#include "services/svc_sys_obj.h"
-#include "services/svc_meta.h"
#include <atomic>
#include "services/svc_zone.h"
#include "services/svc_sys_obj.h"
-#include "services/svc_meta_be_sobj.h"
-#include "services/svc_meta.h"
#define dout_subsys ceph_subsys_rgw
#include "svc_sys_obj.h"
#include "svc_sys_obj_cache.h"
#include "svc_bi.h"
-#include "svc_meta.h"
-#include "svc_meta_be_sobj.h"
#include "svc_mdlog.h"
#include "svc_sync_modules.h"
void RGWSI_Bucket_SObj::init(RGWSI_Zone *_zone_svc, RGWSI_SysObj *_sysobj_svc,
RGWSI_SysObj_Cache *_cache_svc, RGWSI_BucketIndex *_bi,
- RGWSI_Meta *_meta_svc, RGWSI_MDLog* mdlog_svc,
+ RGWSI_MDLog* mdlog_svc,
RGWSI_SyncModules *_sync_modules_svc,
RGWSI_Bucket_Sync *_bucket_sync_svc)
{
svc.sysobj = _sysobj_svc;
svc.cache = _cache_svc;
svc.bi = _bi;
- svc.meta = _meta_svc;
svc.mdlog = mdlog_svc;
svc.sync_modules = _sync_modules_svc;
svc.bucket_sync = _bucket_sync_svc;
class RGWSI_Zone;
class RGWSI_SysObj;
class RGWSI_SysObj_Cache;
-class RGWSI_Meta;
class RGWSI_MDLog;
class RGWSI_SyncModules;
RGWSI_Zone *zone{nullptr};
RGWSI_SysObj *sysobj{nullptr};
RGWSI_SysObj_Cache *cache{nullptr};
- RGWSI_Meta *meta{nullptr};
RGWSI_MDLog *mdlog{nullptr};
RGWSI_SyncModules *sync_modules{nullptr};
RGWSI_Bucket_Sync *bucket_sync{nullptr};
RGWSI_SysObj *_sysobj_svc,
RGWSI_SysObj_Cache *_cache_svc,
RGWSI_BucketIndex *_bi,
- RGWSI_Meta *_meta_svc,
RGWSI_MDLog *mdlog_svc,
RGWSI_SyncModules *_sync_modules_svc,
RGWSI_Bucket_Sync *_bucket_sync_svc);
#include "rgw_service.h"
-#include "svc_meta_be.h"
#include "svc_bucket_sync.h"
class RGWSI_Zone;
#include "rgw_period_history.h"
#include "rgw_period_puller.h"
-#include "svc_meta_be.h"
-
class RGWMetadataLog;
class RGWMetadataLogHistory;
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-
-#include "svc_meta.h"
-
-#include "rgw_metadata.h"
-
-#define dout_subsys ceph_subsys_rgw
-
-using namespace std;
-
-RGWSI_Meta::RGWSI_Meta(CephContext *cct) : RGWServiceInstance(cct) {
-}
-
-RGWSI_Meta::~RGWSI_Meta() {}
-
-void RGWSI_Meta::init(RGWSI_SysObj *_sysobj_svc,
- RGWSI_MDLog *_mdlog_svc,
- vector<RGWSI_MetaBackend *>& _be_svc)
-{
- sysobj_svc = _sysobj_svc;
- mdlog_svc = _mdlog_svc;
-
- for (auto& be : _be_svc) {
- be_svc[be->get_type()] = be;
- }
-}
-
-int RGWSI_Meta::create_be_handler(RGWSI_MetaBackend::Type be_type,
- RGWSI_MetaBackend_Handler **phandler)
-{
- auto iter = be_svc.find(be_type);
- if (iter == be_svc.end()) {
- ldout(cct, 0) << __func__ << "(): ERROR: backend type not found" << dendl;
- return -EINVAL;
- }
-
- auto handler = iter->second->alloc_be_handler();
-
- be_handlers.emplace_back(handler);
- *phandler = handler;
-
- return 0;
-}
-
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2019 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-
-#pragma once
-
-#include "svc_meta_be.h"
-
-#include "rgw_service.h"
-
-
-class RGWMetadataLog;
-class RGWCoroutine;
-
-
-class RGWSI_Meta : public RGWServiceInstance
-{
- RGWSI_SysObj *sysobj_svc{nullptr};
- RGWSI_MDLog *mdlog_svc{nullptr};
-
- std::map<RGWSI_MetaBackend::Type, RGWSI_MetaBackend *> be_svc;
-
- std::vector<std::unique_ptr<RGWSI_MetaBackend_Handler> > be_handlers;
-
-public:
- RGWSI_Meta(CephContext *cct);
- ~RGWSI_Meta();
-
- void init(RGWSI_SysObj *_sysobj_svc,
- RGWSI_MDLog *_mdlog_svc,
- std::vector<RGWSI_MetaBackend *>& _be_svc);
-
- int create_be_handler(RGWSI_MetaBackend::Type be_type,
- RGWSI_MetaBackend_Handler **phandler);
-};
-
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-
-#include "svc_meta_be.h"
-
-#include "rgw_mdlog.h"
-
-#define dout_subsys ceph_subsys_rgw
-
-using namespace std;
-
-RGWSI_MetaBackend::Context::~Context() {} // needed, even though destructor is pure virtual
-RGWSI_MetaBackend::Module::~Module() {} // ditto
-RGWSI_MetaBackend::PutParams::~PutParams() {} // ...
-RGWSI_MetaBackend::GetParams::~GetParams() {} // ...
-RGWSI_MetaBackend::RemoveParams::~RemoveParams() {} // ...
-
-int RGWSI_MetaBackend::pre_modify(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *ctx,
- const string& key,
- RGWMetadataLogData& log_data,
- RGWObjVersionTracker *objv_tracker,
- RGWMDLogStatus op_type,
- optional_yield y)
-{
- /* if write version has not been set, and there's a read version, set it so that we can
- * log it
- */
- if (objv_tracker &&
- objv_tracker->read_version.ver && !objv_tracker->write_version.ver) {
- objv_tracker->write_version = objv_tracker->read_version;
- objv_tracker->write_version.ver++;
- }
-
- return 0;
-}
-
-int RGWSI_MetaBackend::post_modify(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *ctx,
- const string& key,
- RGWMetadataLogData& log_data,
- RGWObjVersionTracker *objv_tracker, int ret,
- optional_yield y)
-{
- return ret;
-}
-
-int RGWSI_MetaBackend::prepare_mutate(RGWSI_MetaBackend::Context *ctx,
- const string& key,
- const real_time& mtime,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp)
-{
- real_time orig_mtime;
-
- int ret = call_with_get_params(&orig_mtime, [&](GetParams& params) {
- return get_entry(ctx, key, params, objv_tracker, y, dpp);
- });
- if (ret < 0 && ret != -ENOENT) {
- return ret;
- }
-
- if (objv_tracker->write_version.tag.empty()) {
- if (objv_tracker->read_version.tag.empty()) {
- objv_tracker->generate_new_write_ver(cct);
- } else {
- objv_tracker->write_version = objv_tracker->read_version;
- objv_tracker->write_version.ver++;
- }
- }
- return 0;
-}
-
-int RGWSI_MetaBackend::do_mutate(RGWSI_MetaBackend::Context *ctx,
- const string& key,
- const ceph::real_time& mtime,
- RGWObjVersionTracker *objv_tracker,
- RGWMDLogStatus op_type,
- optional_yield y,
- std::function<int()> f,
- bool generic_prepare,
- const DoutPrefixProvider *dpp)
-{
- int ret;
-
- if (generic_prepare) {
- ret = prepare_mutate(ctx, key, mtime, objv_tracker, y, dpp);
- if (ret < 0 ||
- ret == STATUS_NO_APPLY) {
- return ret;
- }
- }
-
- RGWMetadataLogData log_data;
- ret = pre_modify(dpp, ctx, key, log_data, objv_tracker, op_type, y);
- if (ret < 0) {
- return ret;
- }
-
- ret = f();
-
- /* cascading ret into post_modify() */
-
- ret = post_modify(dpp, ctx, key, log_data, objv_tracker, ret, y);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-int RGWSI_MetaBackend::get(Context *ctx,
- const string& key,
- GetParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp,
- bool get_raw_attrs)
-{
- return get_entry(ctx, key, params, objv_tracker, y, dpp, get_raw_attrs);
-}
-
-int RGWSI_MetaBackend::put(Context *ctx,
- const string& key,
- PutParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp)
-{
- std::function<int()> f = [&]() {
- return put_entry(dpp, ctx, key, params, objv_tracker, y);
- };
-
- return do_mutate(ctx, key, params.mtime, objv_tracker,
- MDLOG_STATUS_WRITE,
- y,
- f,
- false,
- dpp);
-}
-
-int RGWSI_MetaBackend::remove(Context *ctx,
- const string& key,
- RemoveParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp)
-{
- std::function<int()> f = [&]() {
- return remove_entry(dpp, ctx, key, params, objv_tracker, y);
- };
-
- return do_mutate(ctx, key, params.mtime, objv_tracker,
- MDLOG_STATUS_REMOVE,
- y,
- f,
- false,
- dpp);
-}
-
-int RGWSI_MetaBackend::mutate(Context *ctx,
- const std::string& key,
- MutateParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- std::function<int()> f,
- const DoutPrefixProvider *dpp)
-{
- return do_mutate(ctx, key, params.mtime, objv_tracker,
- params.op_type, y,
- f,
- false,
- dpp);
-}
-
-int RGWSI_MetaBackend_Handler::call(std::optional<RGWSI_MetaBackend_CtxParams> bectx_params,
- std::function<int(Op *)> f)
-{
- return be->call(bectx_params, [&](RGWSI_MetaBackend::Context *ctx) {
- ctx->init(this);
- Op op(be, ctx);
- return f(&op);
- });
-}
-
-RGWSI_MetaBackend_Handler::Op_ManagedCtx::Op_ManagedCtx(RGWSI_MetaBackend_Handler *handler) : Op(handler->be, handler->be->alloc_ctx())
-{
- auto c = ctx();
- c->init(handler);
- pctx.reset(c);
-}
-
+++ /dev/null
-
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2019 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-
-#pragma once
-
-#include "svc_meta_be_params.h"
-
-#include "rgw_mdlog_types.h"
-
-#include "driver/rados/rgw_service.h" // FIXME: subclass dependency
-
-class RGWMetadataLogData;
-
-class RGWSI_MDLog;
-class RGWSI_Meta;
-class RGWObjVersionTracker;
-class RGWSI_MetaBackend_Handler;
-
-class RGWSI_MetaBackend : public RGWServiceInstance
-{
- friend class RGWSI_Meta;
-public:
- class Module;
- class Context;
-protected:
- RGWSI_MDLog *mdlog_svc{nullptr};
-
- void base_init(RGWSI_MDLog *_mdlog_svc) {
- mdlog_svc = _mdlog_svc;
- }
-
- int prepare_mutate(RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- const ceph::real_time& mtime,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp);
-
- virtual int do_mutate(Context *ctx,
- const std::string& key,
- const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker,
- RGWMDLogStatus op_type,
- optional_yield y,
- std::function<int()> f,
- bool generic_prepare,
- const DoutPrefixProvider *dpp);
-
- virtual int pre_modify(const DoutPrefixProvider *dpp,
- Context *ctx,
- const std::string& key,
- RGWMetadataLogData& log_data,
- RGWObjVersionTracker *objv_tracker,
- RGWMDLogStatus op_type,
- optional_yield y);
- virtual int post_modify(const DoutPrefixProvider *dpp,
- Context *ctx,
- const std::string& key,
- RGWMetadataLogData& log_data,
- RGWObjVersionTracker *objv_tracker, int ret,
- optional_yield y);
-public:
- class Module {
- /*
- * Backend specialization module
- */
- public:
- virtual ~Module() = 0;
- };
-
- using ModuleRef = std::shared_ptr<Module>;
-
- struct Context { /*
- * A single metadata operation context. Will be holding info about
- * backend and operation itself; operation might span multiple backend
- * calls.
- */
- virtual ~Context() = 0;
-
- virtual void init(RGWSI_MetaBackend_Handler *h) = 0;
- };
-
- virtual Context *alloc_ctx() = 0;
-
- struct PutParams {
- ceph::real_time mtime;
-
- PutParams() {}
- PutParams(const ceph::real_time& _mtime) : mtime(_mtime) {}
- virtual ~PutParams() = 0;
- };
-
- struct GetParams {
- GetParams() {}
- GetParams(ceph::real_time *_pmtime) : pmtime(_pmtime) {}
- virtual ~GetParams();
-
- ceph::real_time *pmtime{nullptr};
- };
-
- struct RemoveParams {
- virtual ~RemoveParams() = 0;
-
- ceph::real_time mtime;
- };
-
- struct MutateParams {
- ceph::real_time mtime;
- RGWMDLogStatus op_type;
-
- MutateParams() {}
- MutateParams(const ceph::real_time& _mtime,
- RGWMDLogStatus _op_type) : mtime(_mtime), op_type(_op_type) {}
- virtual ~MutateParams() {}
- };
-
- enum Type {
- MDBE_SOBJ = 0,
- };
-
- RGWSI_MetaBackend(CephContext *cct) : RGWServiceInstance(cct) {}
- virtual ~RGWSI_MetaBackend() {}
-
- virtual Type get_type() = 0;
-
- virtual RGWSI_MetaBackend_Handler *alloc_be_handler() = 0;
- virtual int call_with_get_params(ceph::real_time *pmtime, std::function<int(RGWSI_MetaBackend::GetParams&)>) = 0;
-
- /* these should be implemented by backends */
- virtual int get_entry(RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- RGWSI_MetaBackend::GetParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp,
- bool get_raw_attrs=false) = 0;
- virtual int put_entry(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- RGWSI_MetaBackend::PutParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y) = 0;
- virtual int remove_entry(const DoutPrefixProvider *dpp,
- Context *ctx,
- const std::string& key,
- RGWSI_MetaBackend::RemoveParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y) = 0;
-
- virtual int list_init(const DoutPrefixProvider *dpp, RGWSI_MetaBackend::Context *ctx, const std::string& marker) = 0;
- virtual int list_next(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *ctx,
- int max, std::list<std::string> *keys,
- bool *truncated) = 0;
- virtual int list_get_marker(RGWSI_MetaBackend::Context *ctx,
- std::string *marker) = 0;
-
- int call(std::function<int(RGWSI_MetaBackend::Context *)> f) {
- return call(std::nullopt, f);
- }
-
- virtual int call(std::optional<RGWSI_MetaBackend_CtxParams> opt,
- std::function<int(RGWSI_MetaBackend::Context *)> f) = 0;
-
- virtual int get_shard_id(RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- int *shard_id) = 0;
-
- /* higher level */
- virtual int get(Context *ctx,
- const std::string& key,
- GetParams ¶ms,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp,
- bool get_raw_attrs=false);
-
- virtual int put(Context *ctx,
- const std::string& key,
- PutParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp);
-
- virtual int remove(Context *ctx,
- const std::string& key,
- RemoveParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp);
-
- virtual int mutate(Context *ctx,
- const std::string& key,
- MutateParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- std::function<int()> f,
- const DoutPrefixProvider *dpp);
-};
-
-class RGWSI_MetaBackend_Handler {
- RGWSI_MetaBackend *be{nullptr};
-
-public:
- class Op {
- friend class RGWSI_MetaBackend_Handler;
-
- RGWSI_MetaBackend *be;
- RGWSI_MetaBackend::Context *be_ctx;
-
- Op(RGWSI_MetaBackend *_be,
- RGWSI_MetaBackend::Context *_ctx) : be(_be), be_ctx(_ctx) {}
-
- public:
- RGWSI_MetaBackend::Context *ctx() {
- return be_ctx;
- }
-
- int get(const std::string& key,
- RGWSI_MetaBackend::GetParams ¶ms,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y, const DoutPrefixProvider *dpp) {
- return be->get(be_ctx, key, params, objv_tracker, y, dpp);
- }
-
- int put(const std::string& key,
- RGWSI_MetaBackend::PutParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y, const DoutPrefixProvider *dpp) {
- return be->put(be_ctx, key, params, objv_tracker, y, dpp);
- }
-
- int remove(const std::string& key,
- RGWSI_MetaBackend::RemoveParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y, const DoutPrefixProvider *dpp) {
- return be->remove(be_ctx, key, params, objv_tracker, y, dpp);
- }
-
- int mutate(const std::string& key,
- RGWSI_MetaBackend::MutateParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- std::function<int()> f,
- const DoutPrefixProvider *dpp) {
- return be->mutate(be_ctx, key, params, objv_tracker, y, f, dpp);
- }
-
- int list_init(const DoutPrefixProvider *dpp, const std::string& marker) {
- return be->list_init(dpp, be_ctx, marker);
- }
- int list_next(const DoutPrefixProvider *dpp, int max, std::list<std::string> *keys,
- bool *truncated) {
- return be->list_next(dpp, be_ctx, max, keys, truncated);
- }
- int list_get_marker(std::string *marker) {
- return be->list_get_marker(be_ctx, marker);
- }
-
- int get_shard_id(const std::string& key, int *shard_id) {
- return be->get_shard_id(be_ctx, key, shard_id);
- }
- };
-
- class Op_ManagedCtx : public Op {
- std::unique_ptr<RGWSI_MetaBackend::Context> pctx;
- public:
- Op_ManagedCtx(RGWSI_MetaBackend_Handler *handler);
- };
-
- RGWSI_MetaBackend_Handler(RGWSI_MetaBackend *_be) : be(_be) {}
- virtual ~RGWSI_MetaBackend_Handler() {}
-
- int call(std::function<int(Op *)> f) {
- return call(std::nullopt, f);
- }
-
- virtual int call(std::optional<RGWSI_MetaBackend_CtxParams> bectx_params,
- std::function<int(Op *)> f);
-};
-
+++ /dev/null
-
-
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2019 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-
-#pragma once
-
-#include <variant>
-
-struct RGWSI_MetaBackend_CtxParams_SObj {};
-
-using RGWSI_MetaBackend_CtxParams = std::variant<RGWSI_MetaBackend_CtxParams_SObj>;
+++ /dev/null
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-#include "svc_meta_be_sobj.h"
-#include "svc_meta_be_params.h"
-#include "svc_mdlog.h"
-
-#include "rgw_tools.h"
-#include "rgw_metadata.h"
-#include "rgw_mdlog.h"
-
-#define dout_subsys ceph_subsys_rgw
-
-using namespace std;
-
-RGWSI_MetaBackend_SObj::RGWSI_MetaBackend_SObj(CephContext *cct) : RGWSI_MetaBackend(cct) {
-}
-
-RGWSI_MetaBackend_SObj::~RGWSI_MetaBackend_SObj() {
-}
-
-RGWSI_MetaBackend_Handler *RGWSI_MetaBackend_SObj::alloc_be_handler()
-{
- return new RGWSI_MetaBackend_Handler_SObj(this);
-}
-
-RGWSI_MetaBackend::Context *RGWSI_MetaBackend_SObj::alloc_ctx()
-{
- return new Context_SObj;
-}
-
-int RGWSI_MetaBackend_SObj::pre_modify(const DoutPrefixProvider *dpp, RGWSI_MetaBackend::Context *_ctx,
- const string& key,
- RGWMetadataLogData& log_data,
- RGWObjVersionTracker *objv_tracker,
- RGWMDLogStatus op_type,
- optional_yield y)
-{
- auto ctx = static_cast<Context_SObj *>(_ctx);
- int ret = RGWSI_MetaBackend::pre_modify(dpp, ctx, key, log_data,
- objv_tracker, op_type,
- y);
- if (ret < 0) {
- return ret;
- }
-
- /* if write version has not been set, and there's a read version, set it so that we can
- * log it
- */
- if (objv_tracker) {
- log_data.read_version = objv_tracker->read_version;
- log_data.write_version = objv_tracker->write_version;
- }
-
- log_data.status = op_type;
-
- bufferlist logbl;
- encode(log_data, 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;
-
- return 0;
-}
-
-int RGWSI_MetaBackend_SObj::post_modify(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *_ctx,
- const string& key,
- RGWMetadataLogData& log_data,
- RGWObjVersionTracker *objv_tracker, int ret,
- optional_yield y)
-{
- auto ctx = static_cast<Context_SObj *>(_ctx);
- if (ret >= 0)
- log_data.status = MDLOG_STATUS_COMPLETE;
- else
- log_data.status = MDLOG_STATUS_ABORT;
-
- 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, y);
- if (ret < 0)
- return ret;
-
- if (r < 0)
- return r;
-
- return RGWSI_MetaBackend::post_modify(dpp, ctx, key, log_data, objv_tracker, ret, y);
-}
-
-int RGWSI_MetaBackend_SObj::get_shard_id(RGWSI_MetaBackend::Context *_ctx,
- const std::string& key,
- int *shard_id)
-{
- auto ctx = static_cast<Context_SObj *>(_ctx);
- *shard_id = mdlog_svc->get_shard_id(ctx->module->get_hash_key(key), shard_id);
- return 0;
-}
-
-int RGWSI_MetaBackend_SObj::call(std::optional<RGWSI_MetaBackend_CtxParams> opt,
- std::function<int(RGWSI_MetaBackend::Context *)> f)
-{
- RGWSI_MetaBackend_SObj::Context_SObj ctx;
- return f(&ctx);
-}
-
-void RGWSI_MetaBackend_SObj::Context_SObj::init(RGWSI_MetaBackend_Handler *h)
-{
- RGWSI_MetaBackend_Handler_SObj *handler = static_cast<RGWSI_MetaBackend_Handler_SObj *>(h);
- module = handler->module;
-}
-
-int RGWSI_MetaBackend_SObj::call_with_get_params(ceph::real_time *pmtime, std::function<int(RGWSI_MetaBackend::GetParams&)> cb)
-{
- bufferlist bl;
- RGWSI_MBSObj_GetParams params;
- params.pmtime = pmtime;
- params.pbl = &bl;
- return cb(params);
-}
-
-int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx,
- const string& key,
- GetParams& _params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp,
- bool get_raw_attrs)
-{
- RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
- RGWSI_MBSObj_GetParams& params = static_cast<RGWSI_MBSObj_GetParams&>(_params);
-
- rgw_pool pool;
- string oid;
- ctx->module->get_pool_and_oid(key, &pool, &oid);
-
- int ret = 0;
- ret = rgw_get_system_obj(sysobj_svc, pool, oid, *params.pbl,
- objv_tracker, params.pmtime,
- y, dpp,
- params.pattrs, params.cache_info,
- params.refresh_version, get_raw_attrs);
-
- return ret;
-}
-
-int RGWSI_MetaBackend_SObj::put_entry(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *_ctx,
- const string& key,
- PutParams& _params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y)
-{
- RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
- RGWSI_MBSObj_PutParams& params = static_cast<RGWSI_MBSObj_PutParams&>(_params);
-
- rgw_pool pool;
- string oid;
- ctx->module->get_pool_and_oid(key, &pool, &oid);
-
- return rgw_put_system_obj(dpp, sysobj_svc, pool, oid, params.bl, params.exclusive,
- objv_tracker, params.mtime, y, params.pattrs);
-}
-
-int RGWSI_MetaBackend_SObj::remove_entry(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *_ctx,
- const string& key,
- RemoveParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y)
-{
- RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
-
- rgw_pool pool;
- string oid;
- ctx->module->get_pool_and_oid(key, &pool, &oid);
- rgw_raw_obj k(pool, oid);
-
- auto sysobj = sysobj_svc->get_obj(k);
- return sysobj.wop()
- .set_objv_tracker(objv_tracker)
- .remove(dpp, y);
-}
-
-int RGWSI_MetaBackend_SObj::list_init(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *_ctx,
- const string& marker)
-{
- RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
-
- rgw_pool pool;
-
- string no_key;
- ctx->module->get_pool_and_oid(no_key, &pool, nullptr);
-
- ctx->list.pool = sysobj_svc->get_pool(pool);
- ctx->list.op.emplace(ctx->list.pool->op());
-
- string prefix = ctx->module->get_oid_prefix();
- ctx->list.op->init(dpp, marker, prefix);
-
- return 0;
-}
-
-int RGWSI_MetaBackend_SObj::list_next(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *_ctx,
- int max, list<string> *keys,
- bool *truncated)
-{
- RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
-
- vector<string> oids;
-
- keys->clear();
-
- int ret = ctx->list.op->get_next(dpp, max, &oids, truncated);
- if (ret < 0 && ret != -ENOENT)
- return ret;
- if (ret == -ENOENT) {
- if (truncated)
- *truncated = false;
- return 0;
- }
-
- auto module = ctx->module;
-
- for (auto& o : oids) {
- if (!module->is_valid_oid(o)) {
- continue;
- }
- keys->emplace_back(module->oid_to_key(o));
- }
-
- return 0;
-}
-
-int RGWSI_MetaBackend_SObj::list_get_marker(RGWSI_MetaBackend::Context *_ctx,
- string *marker)
-{
- RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
-
- return ctx->list.op->get_marker(marker);
-}
-
+++ /dev/null
-
-
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2019 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-
-#pragma once
-
-#include "rgw_service.h"
-
-#include "svc_meta_be.h"
-#include "svc_sys_obj.h"
-
-
-class RGWSI_MBSObj_Handler_Module : public RGWSI_MetaBackend::Module {
-protected:
- std::string section;
-public:
- RGWSI_MBSObj_Handler_Module(const std::string& _section) : section(_section) {}
- virtual void get_pool_and_oid(const std::string& key, rgw_pool *pool, std::string *oid) = 0;
- virtual const std::string& get_oid_prefix() = 0;
- virtual std::string key_to_oid(const std::string& key) = 0;
- virtual bool is_valid_oid(const std::string& oid) = 0;
- virtual std::string oid_to_key(const std::string& oid) = 0;
-
- const std::string& get_section() {
- return section;
- }
-
- /* key to use for hashing entries for log shard placement */
- virtual std::string get_hash_key(const std::string& key) {
- return section + ":" + key;
- }
-};
-
-struct RGWSI_MBSObj_GetParams : public RGWSI_MetaBackend::GetParams {
- bufferlist *pbl{nullptr};
- std::map<std::string, bufferlist> *pattrs{nullptr};
- rgw_cache_entry_info *cache_info{nullptr};
- boost::optional<obj_version> refresh_version;
-
- RGWSI_MBSObj_GetParams() {}
- RGWSI_MBSObj_GetParams(bufferlist *_pbl,
- std::map<std::string, bufferlist> *_pattrs,
- ceph::real_time *_pmtime) : RGWSI_MetaBackend::GetParams(_pmtime),
- pbl(_pbl),
- pattrs(_pattrs) {}
-
- RGWSI_MBSObj_GetParams& set_cache_info(rgw_cache_entry_info *_cache_info) {
- cache_info = _cache_info;
- return *this;
- }
- RGWSI_MBSObj_GetParams& set_refresh_version(boost::optional<obj_version>& _refresh_version) {
- refresh_version = _refresh_version;
- return *this;
- }
-};
-
-struct RGWSI_MBSObj_PutParams : public RGWSI_MetaBackend::PutParams {
- bufferlist bl;
- const std::map<std::string, bufferlist> *pattrs{nullptr};
- bool exclusive{false};
-
- RGWSI_MBSObj_PutParams() {}
- RGWSI_MBSObj_PutParams(const std::map<std::string, bufferlist> *_pattrs,
- const ceph::real_time& _mtime) : RGWSI_MetaBackend::PutParams(_mtime),
- pattrs(_pattrs) {}
- RGWSI_MBSObj_PutParams(bufferlist& _bl,
- const std::map<std::string, bufferlist> *_pattrs,
- const ceph::real_time& _mtime,
- bool _exclusive) : RGWSI_MetaBackend::PutParams(_mtime),
- bl(_bl),
- pattrs(_pattrs),
- exclusive(_exclusive) {}
-};
-
-struct RGWSI_MBSObj_RemoveParams : public RGWSI_MetaBackend::RemoveParams {
-};
-
-class RGWSI_MetaBackend_SObj : public RGWSI_MetaBackend
-{
-protected:
- RGWSI_SysObj *sysobj_svc{nullptr};
-
-public:
- struct Context_SObj : public RGWSI_MetaBackend::Context {
- RGWSI_MBSObj_Handler_Module *module{nullptr};
- struct _list {
- std::optional<RGWSI_SysObj::Pool> pool;
- std::optional<RGWSI_SysObj::Pool::Op> op;
- } list;
-
- void init(RGWSI_MetaBackend_Handler *h) override;
- };
-
- RGWSI_MetaBackend_SObj(CephContext *cct);
- virtual ~RGWSI_MetaBackend_SObj();
-
- RGWSI_MetaBackend::Type get_type() {
- return MDBE_SOBJ;
- }
-
- void init(RGWSI_SysObj *_sysobj_svc,
- RGWSI_MDLog *_mdlog_svc) {
- base_init(_mdlog_svc);
- sysobj_svc = _sysobj_svc;
- }
-
- RGWSI_MetaBackend_Handler *alloc_be_handler() override;
- RGWSI_MetaBackend::Context *alloc_ctx() override;
-
-
- int call_with_get_params(ceph::real_time *pmtime, std::function<int(RGWSI_MetaBackend::GetParams&)> cb) override;
-
- int pre_modify(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- RGWMetadataLogData& log_data,
- RGWObjVersionTracker *objv_tracker,
- RGWMDLogStatus op_type,
- optional_yield y);
- int post_modify(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- RGWMetadataLogData& log_data,
- RGWObjVersionTracker *objv_tracker, int ret,
- optional_yield y);
-
- int get_entry(RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- RGWSI_MetaBackend::GetParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y,
- const DoutPrefixProvider *dpp,
- bool get_raw_attrs=false) override;
- int put_entry(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- RGWSI_MetaBackend::PutParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y) override;
- int remove_entry(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- RGWSI_MetaBackend::RemoveParams& params,
- RGWObjVersionTracker *objv_tracker,
- optional_yield y) override;
-
- int list_init(const DoutPrefixProvider *dpp, RGWSI_MetaBackend::Context *_ctx, const std::string& marker) override;
- int list_next(const DoutPrefixProvider *dpp,
- RGWSI_MetaBackend::Context *_ctx,
- int max, std::list<std::string> *keys,
- bool *truncated) override;
- int list_get_marker(RGWSI_MetaBackend::Context *ctx,
- std::string *marker) override;
-
- int get_shard_id(RGWSI_MetaBackend::Context *ctx,
- const std::string& key,
- int *shard_id) override;
-
- int call(std::optional<RGWSI_MetaBackend_CtxParams> opt,
- std::function<int(RGWSI_MetaBackend::Context *)> f) override;
-};
-
-
-class RGWSI_MetaBackend_Handler_SObj : public RGWSI_MetaBackend_Handler {
- friend class RGWSI_MetaBackend_SObj::Context_SObj;
-
- RGWSI_MBSObj_Handler_Module *module{nullptr};
-
-public:
- RGWSI_MetaBackend_Handler_SObj(RGWSI_MetaBackend *be) :
- RGWSI_MetaBackend_Handler(be) {}
-
- void set_module(RGWSI_MBSObj_Handler_Module *_module) {
- module = _module;
- }
-
- RGWSI_MBSObj_Handler_Module *get_module() {
- return module;
- }
-};
+++ /dev/null
-
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab ft=cpp
-
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2019 Red Hat, Inc.
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-#pragma once
-
-enum RGWSI_META_BE_TYPES {
- SOBJ = 1,
- BUCKET = 3,
- BI = 4,
- USER = 5,
-};
-
#include "svc_zone.h"
#include "svc_sys_obj.h"
#include "svc_sys_obj_cache.h"
-#include "svc_meta.h"
#include "rgw_user.h"
#include "rgw_account.h"
RGWSI_Zone *_zone_svc,
RGWSI_MDLog *mdlog_svc,
RGWSI_SysObj *_sysobj_svc,
- RGWSI_SysObj_Cache *_cache_svc,
- RGWSI_Meta *_meta_svc)
+ RGWSI_SysObj_Cache *_cache_svc)
{
svc.user = this;
rados = rados_;
svc.mdlog = mdlog_svc;
svc.sysobj = _sysobj_svc;
svc.cache = _cache_svc;
- svc.meta = _meta_svc;
}
int RGWSI_User_RADOS::do_start(optional_yield, const DoutPrefixProvider *dpp)
class RGWSI_Zone;
class RGWSI_SysObj;
class RGWSI_SysObj_Cache;
-class RGWSI_Meta;
class RGWSI_SyncModules;
struct rgw_cache_entry_info;
RGWSI_MDLog *mdlog{nullptr};
RGWSI_SysObj *sysobj{nullptr};
RGWSI_SysObj_Cache *cache{nullptr};
- RGWSI_Meta *meta{nullptr};
} svc;
RGWSI_User_RADOS(CephContext *cct);
RGWSI_Zone *_zone_svc,
RGWSI_MDLog *mdlog_svc,
RGWSI_SysObj *_sysobj_svc,
- RGWSI_SysObj_Cache *_cache_svc,
- RGWSI_Meta *_meta_svc);
+ RGWSI_SysObj_Cache *_cache_svc);
int create_lister(const DoutPrefixProvider* dpp,
const std::string& marker,