1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab ft=cpp
4 #include "rgw_common.h"
5 #include "rgw_coroutine.h"
6 #include "rgw_cr_rados.h"
7 #include "rgw_sync_module.h"
8 #include "rgw_data_sync.h"
9 #include "rgw_bucket.h"
11 #include "rgw_sync_module_log.h"
12 #include "rgw_sync_module_es.h"
13 #include "rgw_sync_module_aws.h"
15 #include <boost/asio/yield.hpp>
17 #define dout_subsys ceph_subsys_rgw
19 RGWMetadataHandler
*RGWSyncModuleInstance::alloc_bucket_meta_handler()
21 return RGWBucketMetaHandlerAllocator::alloc();
24 RGWBucketInstanceMetadataHandlerBase
* RGWSyncModuleInstance::alloc_bucket_instance_meta_handler(rgw::sal::Driver
* driver
)
26 return RGWBucketInstanceMetaHandlerAllocator::alloc(driver
);
29 RGWStatRemoteObjCBCR::RGWStatRemoteObjCBCR(RGWDataSyncCtx
*_sc
,
30 rgw_bucket
& _src_bucket
, rgw_obj_key
& _key
) : RGWCoroutine(_sc
->cct
),
31 sc(_sc
), sync_env(_sc
->env
),
32 src_bucket(_src_bucket
), key(_key
) {
35 RGWCallStatRemoteObjCR::RGWCallStatRemoteObjCR(RGWDataSyncCtx
*_sc
,
36 rgw_bucket
& _src_bucket
, rgw_obj_key
& _key
) : RGWCoroutine(_sc
->cct
),
37 sc(_sc
), sync_env(_sc
->env
),
38 src_bucket(_src_bucket
), key(_key
) {
41 int RGWCallStatRemoteObjCR::operate(const DoutPrefixProvider
*dpp
) {
44 call(new RGWStatRemoteObjCR(sync_env
->async_rados
, sync_env
->driver
,
46 src_bucket
, key
, &mtime
, &size
, &etag
, &attrs
, &headers
));
49 ldpp_dout(dpp
, 10) << "RGWStatRemoteObjCR() returned " << retcode
<< dendl
;
50 return set_cr_error(retcode
);
52 ldpp_dout(dpp
, 20) << "stat of remote obj: z=" << sc
->source_zone
53 << " b=" << src_bucket
<< " k=" << key
54 << " size=" << size
<< " mtime=" << mtime
<< dendl
;
56 RGWStatRemoteObjCBCR
*cb
= allocate_callback();
58 cb
->set_result(mtime
, size
, etag
, std::move(attrs
), std::move(headers
));
63 ldpp_dout(dpp
, 10) << "RGWStatRemoteObjCR() callback returned " << retcode
<< dendl
;
64 return set_cr_error(retcode
);
71 void rgw_register_sync_modules(RGWSyncModulesManager
*modules_manager
)
73 RGWSyncModuleRef
default_module(std::make_shared
<RGWDefaultSyncModule
>());
74 modules_manager
->register_module("rgw", default_module
, true);
76 RGWSyncModuleRef
archive_module(std::make_shared
<RGWArchiveSyncModule
>());
77 modules_manager
->register_module("archive", archive_module
);
79 RGWSyncModuleRef
log_module(std::make_shared
<RGWLogSyncModule
>());
80 modules_manager
->register_module("log", log_module
);
82 RGWSyncModuleRef
es_module(std::make_shared
<RGWElasticSyncModule
>());
83 modules_manager
->register_module("elasticsearch", es_module
);
85 RGWSyncModuleRef
aws_module(std::make_shared
<RGWAWSSyncModule
>());
86 modules_manager
->register_module("cloud", aws_module
);