Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / 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