1 #include "rgw_common.h"
2 #include "rgw_coroutine.h"
3 #include "rgw_cr_rados.h"
4 #include "rgw_sync_module.h"
5 #include "rgw_data_sync.h"
6 #include "rgw_sync_module_log.h"
8 #define dout_subsys ceph_subsys_rgw
10 class RGWLogStatRemoteObjCBCR
: public RGWStatRemoteObjCBCR
{
12 RGWLogStatRemoteObjCBCR(RGWDataSyncEnv
*_sync_env
,
13 RGWBucketInfo
& _bucket_info
, rgw_obj_key
& _key
) : RGWStatRemoteObjCBCR(_sync_env
, _bucket_info
, _key
) {}
14 int operate() override
{
15 ldout(sync_env
->cct
, 0) << "SYNC_LOG: stat of remote obj: z=" << sync_env
->source_zone
16 << " b=" << bucket_info
.bucket
<< " k=" << key
<< " size=" << size
<< " mtime=" << mtime
17 << " attrs=" << attrs
<< dendl
;
23 class RGWLogStatRemoteObjCR
: public RGWCallStatRemoteObjCR
{
25 RGWLogStatRemoteObjCR(RGWDataSyncEnv
*_sync_env
,
26 RGWBucketInfo
& _bucket_info
, rgw_obj_key
& _key
) : RGWCallStatRemoteObjCR(_sync_env
, _bucket_info
, _key
) {
29 ~RGWLogStatRemoteObjCR() override
{}
31 RGWStatRemoteObjCBCR
*allocate_callback() override
{
32 return new RGWLogStatRemoteObjCBCR(sync_env
, bucket_info
, key
);
36 class RGWLogDataSyncModule
: public RGWDataSyncModule
{
39 RGWLogDataSyncModule(const string
& _prefix
) : prefix(_prefix
) {}
41 RGWCoroutine
*sync_object(RGWDataSyncEnv
*sync_env
, RGWBucketInfo
& bucket_info
, rgw_obj_key
& key
, uint64_t versioned_epoch
, rgw_zone_set
*zones_trace
) override
{
42 ldout(sync_env
->cct
, 0) << prefix
<< ": SYNC_LOG: sync_object: b=" << bucket_info
.bucket
<< " k=" << key
<< " versioned_epoch=" << versioned_epoch
<< dendl
;
43 return new RGWLogStatRemoteObjCR(sync_env
, bucket_info
, key
);
45 RGWCoroutine
*remove_object(RGWDataSyncEnv
*sync_env
, RGWBucketInfo
& bucket_info
, rgw_obj_key
& key
, real_time
& mtime
, bool versioned
, uint64_t versioned_epoch
, rgw_zone_set
*zones_trace
) override
{
46 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
;
49 RGWCoroutine
*create_delete_marker(RGWDataSyncEnv
*sync_env
, RGWBucketInfo
& bucket_info
, rgw_obj_key
& key
, real_time
& mtime
,
50 rgw_bucket_entry_owner
& owner
, bool versioned
, uint64_t versioned_epoch
, rgw_zone_set
*zones_trace
) override
{
51 ldout(sync_env
->cct
, 0) << prefix
<< ": SYNC_LOG: create_delete_marker: b=" << bucket_info
.bucket
<< " k=" << key
<< " mtime=" << mtime
52 << " versioned=" << versioned
<< " versioned_epoch=" << versioned_epoch
<< dendl
;
57 class RGWLogSyncModuleInstance
: public RGWSyncModuleInstance
{
58 RGWLogDataSyncModule data_handler
;
60 RGWLogSyncModuleInstance(const string
& prefix
) : data_handler(prefix
) {}
61 RGWDataSyncModule
*get_data_handler() override
{
66 int RGWLogSyncModule::create_instance(CephContext
*cct
, map
<string
, string
, ltstr_nocase
>& config
, RGWSyncModuleInstanceRef
*instance
) {
68 auto i
= config
.find("prefix");
69 if (i
!= config
.end()) {
72 instance
->reset(new RGWLogSyncModuleInstance(prefix
));