]> git.proxmox.com Git - ceph.git/blob - ceph/src/rgw/rgw_sync_module.h
update sources to v12.1.0
[ceph.git] / ceph / src / rgw / rgw_sync_module.h
1 #ifndef CEPH_RGW_SYNC_MODULE_H
2 #define CEPH_RGW_SYNC_MODULE_H
3
4 #include "rgw_common.h"
5 #include "rgw_coroutine.h"
6
7 class RGWBucketInfo;
8 class RGWRemoteDataLog;
9 struct RGWDataSyncEnv;
10 struct rgw_bucket_entry_owner;
11 struct rgw_obj_key;
12
13
14 class RGWDataSyncModule {
15 public:
16 RGWDataSyncModule() {}
17 virtual ~RGWDataSyncModule() {}
18
19 virtual void init(RGWDataSyncEnv *sync_env, uint64_t instance_id) {}
20
21 virtual RGWCoroutine *init_sync(RGWDataSyncEnv *sync_env) {
22 return nullptr;
23 }
24
25 virtual RGWCoroutine *sync_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, uint64_t versioned_epoch, rgw_zone_set *zones_trace) = 0;
26 virtual RGWCoroutine *remove_object(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, real_time& mtime,
27 bool versioned, uint64_t versioned_epoch, rgw_zone_set *zones_trace) = 0;
28 virtual RGWCoroutine *create_delete_marker(RGWDataSyncEnv *sync_env, RGWBucketInfo& bucket_info, rgw_obj_key& key, real_time& mtime,
29 rgw_bucket_entry_owner& owner, bool versioned, uint64_t versioned_epoch, rgw_zone_set *zones_trace) = 0;
30 };
31
32 class RGWRESTMgr;
33
34 class RGWSyncModuleInstance {
35 public:
36 RGWSyncModuleInstance() {}
37 virtual ~RGWSyncModuleInstance() {}
38 virtual RGWDataSyncModule *get_data_handler() = 0;
39 virtual RGWRESTMgr *get_rest_filter(int dialect, RGWRESTMgr *orig) {
40 return orig;
41 }
42 };
43
44 typedef std::shared_ptr<RGWSyncModuleInstance> RGWSyncModuleInstanceRef;
45
46 class RGWSyncModule {
47
48 public:
49 RGWSyncModule() {}
50 virtual ~RGWSyncModule() {}
51
52 virtual bool supports_data_export() = 0;
53 virtual int create_instance(CephContext *cct, map<string, string, ltstr_nocase>& config, RGWSyncModuleInstanceRef *instance) = 0;
54 };
55
56 typedef std::shared_ptr<RGWSyncModule> RGWSyncModuleRef;
57
58
59 class RGWSyncModulesManager {
60 Mutex lock;
61
62 map<string, RGWSyncModuleRef> modules;
63 public:
64 RGWSyncModulesManager() : lock("RGWSyncModulesManager") {}
65
66 void register_module(const string& name, RGWSyncModuleRef& module, bool is_default = false) {
67 Mutex::Locker l(lock);
68 modules[name] = module;
69 if (is_default) {
70 modules[string()] = module;
71 }
72 }
73
74 bool get_module(const string& name, RGWSyncModuleRef *module) {
75 Mutex::Locker l(lock);
76 auto iter = modules.find(name);
77 if (iter == modules.end()) {
78 return false;
79 }
80 *module = iter->second;
81 return true;
82 }
83
84
85 int supports_data_export(const string& name) {
86 RGWSyncModuleRef module;
87 if (!get_module(name, &module)) {
88 return -ENOENT;
89 }
90
91 return module.get()->supports_data_export();
92 }
93
94 int create_instance(CephContext *cct, const string& name, map<string, string, ltstr_nocase>& config, RGWSyncModuleInstanceRef *instance) {
95 RGWSyncModuleRef module;
96 if (!get_module(name, &module)) {
97 return -ENOENT;
98 }
99
100 return module.get()->create_instance(cct, config, instance);
101 }
102 };
103
104 class RGWStatRemoteObjCBCR : public RGWCoroutine {
105 protected:
106 RGWDataSyncEnv *sync_env;
107
108 RGWBucketInfo bucket_info;
109 rgw_obj_key key;
110
111 ceph::real_time mtime;
112 uint64_t size;
113 map<string, bufferlist> attrs;
114 public:
115 RGWStatRemoteObjCBCR(RGWDataSyncEnv *_sync_env,
116 RGWBucketInfo& _bucket_info, rgw_obj_key& _key);
117 ~RGWStatRemoteObjCBCR() override {}
118
119 void set_result(ceph::real_time& _mtime,
120 uint64_t _size,
121 map<string, bufferlist>&& _attrs) {
122 mtime = _mtime;
123 size = _size;
124 attrs = std::move(_attrs);
125 }
126 };
127
128 class RGWCallStatRemoteObjCR : public RGWCoroutine {
129 ceph::real_time mtime;
130 uint64_t size{0};
131 map<string, bufferlist> attrs;
132
133 protected:
134 RGWDataSyncEnv *sync_env;
135
136 RGWBucketInfo bucket_info;
137 rgw_obj_key key;
138
139 public:
140 RGWCallStatRemoteObjCR(RGWDataSyncEnv *_sync_env,
141 RGWBucketInfo& _bucket_info, rgw_obj_key& _key);
142
143 ~RGWCallStatRemoteObjCR() override {}
144
145 int operate() override;
146
147 virtual RGWStatRemoteObjCBCR *allocate_callback() {
148 return nullptr;
149 }
150 };
151
152 void rgw_register_sync_modules(RGWSyncModulesManager *modules_manager);
153
154 #endif