|
15 | 15 | #include "cls/log/cls_log_types.h" |
16 | 16 | #include "common/RefCountedObj.h" |
17 | 17 | #include "common/ceph_time.h" |
18 | | -#include "services/svc_meta_be.h" |
19 | 18 | #include "rgw_sal_fwd.h" |
20 | 19 |
|
21 | 20 |
|
@@ -54,18 +53,11 @@ class RGWMetadataManager; |
54 | 53 | class RGWMetadataHandler { |
55 | 54 | friend class RGWMetadataManager; |
56 | 55 |
|
57 | | -protected: |
58 | | - CephContext *cct; |
59 | | - |
60 | 56 | public: |
61 | 57 | RGWMetadataHandler() {} |
62 | 58 | virtual ~RGWMetadataHandler(); |
63 | 59 | virtual std::string get_type() = 0; |
64 | 60 |
|
65 | | - void base_init(CephContext *_cct) { |
66 | | - cct = _cct; |
67 | | - } |
68 | | - |
69 | 61 | virtual RGWMetadataObject *get_meta_obj(JSONObj *jo, const obj_version& objv, const ceph::real_time& mtime) = 0; |
70 | 62 |
|
71 | 63 | virtual int get(std::string& entry, RGWMetadataObject **obj, optional_yield, const DoutPrefixProvider *dpp) = 0; |
@@ -99,140 +91,20 @@ class RGWMetadataHandler { |
99 | 91 | virtual int attach(RGWMetadataManager *manager); |
100 | 92 | }; |
101 | 93 |
|
102 | | -class RGWMetadataHandler_GenericMetaBE : public RGWMetadataHandler { |
103 | | - friend class RGWSI_MetaBackend; |
104 | | - friend class RGWMetadataManager; |
105 | | - friend class Put; |
106 | | - |
107 | | -public: |
108 | | - class Put; |
109 | | - |
110 | | -protected: |
111 | | - RGWSI_MetaBackend_Handler *be_handler; |
112 | | - |
113 | | - virtual int do_get(RGWSI_MetaBackend_Handler::Op *op, std::string& entry, RGWMetadataObject **obj, optional_yield y, const DoutPrefixProvider *dpp) = 0; |
114 | | - virtual int do_put(RGWSI_MetaBackend_Handler::Op *op, std::string& entry, RGWMetadataObject *obj, |
115 | | - RGWObjVersionTracker& objv_tracker, optional_yield y, |
116 | | - const DoutPrefixProvider *dpp, RGWMDLogSyncType type, |
117 | | - bool from_remote_zone) = 0; |
118 | | - virtual int do_put_operate(Put *put_op, const DoutPrefixProvider *dpp); |
119 | | - virtual int do_remove(RGWSI_MetaBackend_Handler::Op *op, std::string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y, const DoutPrefixProvider *dpp) = 0; |
120 | | - |
121 | | -public: |
122 | | - RGWMetadataHandler_GenericMetaBE() {} |
123 | | - |
124 | | - void base_init(CephContext *_cct, |
125 | | - RGWSI_MetaBackend_Handler *_be_handler) { |
126 | | - RGWMetadataHandler::base_init(_cct); |
127 | | - be_handler = _be_handler; |
128 | | - } |
129 | | - |
130 | | - RGWSI_MetaBackend_Handler *get_be_handler() { |
131 | | - return be_handler; |
132 | | - } |
133 | | - |
134 | | - class Put { |
135 | | - protected: |
136 | | - RGWMetadataHandler_GenericMetaBE *handler; |
137 | | - RGWSI_MetaBackend_Handler::Op *op; |
138 | | - std::string& entry; |
139 | | - RGWMetadataObject *obj; |
140 | | - RGWObjVersionTracker& objv_tracker; |
141 | | - RGWMDLogSyncType apply_type; |
142 | | - optional_yield y; |
143 | | - bool from_remote_zone{false}; |
144 | | - |
145 | | - int get(RGWMetadataObject **obj, const DoutPrefixProvider *dpp) { |
146 | | - return handler->do_get(op, entry, obj, y, dpp); |
147 | | - } |
148 | | - public: |
149 | | - Put(RGWMetadataHandler_GenericMetaBE *_handler, RGWSI_MetaBackend_Handler::Op *_op, |
150 | | - std::string& _entry, RGWMetadataObject *_obj, |
151 | | - RGWObjVersionTracker& _objv_tracker, optional_yield _y, |
152 | | - RGWMDLogSyncType _type, bool from_remote_zone); |
153 | | - |
154 | | - virtual ~Put() {} |
155 | | - |
156 | | - virtual int put_pre(const DoutPrefixProvider *dpp) { |
157 | | - return 0; |
158 | | - } |
159 | | - virtual int put(const DoutPrefixProvider *dpp) { |
160 | | - return 0; |
161 | | - } |
162 | | - virtual int put_post(const DoutPrefixProvider *dpp) { |
163 | | - return 0; |
164 | | - } |
165 | | - virtual int finalize() { |
166 | | - return 0; |
167 | | - } |
168 | | - }; |
169 | | - |
170 | | - int get(std::string& entry, RGWMetadataObject **obj, optional_yield, const DoutPrefixProvider *dpp) override; |
171 | | - int put(std::string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, optional_yield, const DoutPrefixProvider *dpp, RGWMDLogSyncType type, bool from_remote_zone) override; |
172 | | - int remove(std::string& entry, RGWObjVersionTracker& objv_tracker, optional_yield, const DoutPrefixProvider *dpp) override; |
173 | | - |
174 | | - int mutate(const std::string& entry, |
175 | | - const ceph::real_time& mtime, |
176 | | - RGWObjVersionTracker *objv_tracker, |
177 | | - optional_yield y, |
178 | | - const DoutPrefixProvider *dpp, |
179 | | - RGWMDLogStatus op_type, |
180 | | - std::function<int()> f) override; |
181 | | - |
182 | | - int get_shard_id(const std::string& entry, int *shard_id) override; |
183 | | - |
184 | | - int list_keys_init(const DoutPrefixProvider *dpp, const std::string& marker, void **phandle) override; |
185 | | - int list_keys_next(const DoutPrefixProvider *dpp, void *handle, int max, std::list<std::string>& keys, bool *truncated) override; |
186 | | - void list_keys_complete(void *handle) override; |
187 | | - |
188 | | - std::string get_marker(void *handle) override; |
189 | | - |
190 | | - /** |
191 | | - * Compare an incoming versus on-disk tag/version+mtime combo against |
192 | | - * the sync mode to see if the new one should replace the on-disk one. |
193 | | - * |
194 | | - * @return true if the update should proceed, false otherwise. |
195 | | - */ |
196 | | - static bool check_versions(bool exists, |
197 | | - const obj_version& ondisk, const real_time& ondisk_time, |
198 | | - const obj_version& incoming, const real_time& incoming_time, |
199 | | - RGWMDLogSyncType sync_mode) { |
200 | | - switch (sync_mode) { |
201 | | - case APPLY_UPDATES: |
202 | | - if ((ondisk.tag != incoming.tag) || |
203 | | - (ondisk.ver >= incoming.ver)) |
204 | | - return false; |
205 | | - break; |
206 | | - case APPLY_NEWER: |
207 | | - if (ondisk_time >= incoming_time) |
208 | | - return false; |
209 | | - break; |
210 | | - case APPLY_EXCLUSIVE: |
211 | | - if (exists) |
212 | | - return false; |
213 | | - break; |
214 | | - case APPLY_ALWAYS: //deliberate fall-thru -- we always apply! |
215 | | - default: break; |
216 | | - } |
217 | | - return true; |
218 | | - } |
219 | | -}; |
220 | | - |
221 | 94 | class RGWMetadataTopHandler; |
222 | 95 |
|
223 | 96 | class RGWMetadataManager { |
224 | 97 | friend class RGWMetadataHandler; |
225 | 98 |
|
226 | 99 | CephContext *cct; |
227 | | - RGWSI_Meta *meta_svc; |
228 | 100 | std::map<std::string, RGWMetadataHandler *> handlers; |
229 | 101 | std::unique_ptr<RGWMetadataTopHandler> md_top_handler; |
230 | 102 |
|
231 | 103 | int find_handler(const std::string& metadata_key, RGWMetadataHandler **handler, std::string& entry); |
232 | 104 | int register_handler(RGWMetadataHandler *handler); |
233 | 105 |
|
234 | 106 | public: |
235 | | - RGWMetadataManager(RGWSI_Meta *_meta_svc); |
| 107 | + RGWMetadataManager(); |
236 | 108 | ~RGWMetadataManager(); |
237 | 109 |
|
238 | 110 | RGWMetadataHandler *get_handler(const std::string& type); |
@@ -269,29 +141,6 @@ class RGWMetadataManager { |
269 | 141 | int get_shard_id(const std::string& section, const std::string& key, int *shard_id); |
270 | 142 | }; |
271 | 143 |
|
272 | | -class RGWMetadataHandlerPut_SObj : public RGWMetadataHandler_GenericMetaBE::Put |
273 | | -{ |
274 | | -protected: |
275 | | - std::unique_ptr<RGWMetadataObject> oo; |
276 | | - RGWMetadataObject *old_obj{nullptr}; |
277 | | - bool exists{false}; |
278 | | - |
279 | | -public: |
280 | | - RGWMetadataHandlerPut_SObj(RGWMetadataHandler_GenericMetaBE *handler, RGWSI_MetaBackend_Handler::Op *op, |
281 | | - std::string& entry, RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, |
282 | | - optional_yield y, |
283 | | - RGWMDLogSyncType type, bool from_remote_zone); |
284 | | - ~RGWMetadataHandlerPut_SObj(); |
285 | | - |
286 | | - int put_pre(const DoutPrefixProvider *dpp) override; |
287 | | - int put(const DoutPrefixProvider *dpp) override; |
288 | | - virtual int put_check(const DoutPrefixProvider *dpp) { |
289 | | - return 0; |
290 | | - } |
291 | | - virtual int put_checked(const DoutPrefixProvider *dpp); |
292 | | - virtual void encode_obj(bufferlist *bl) {} |
293 | | -}; |
294 | | - |
295 | 144 | void rgw_shard_name(const std::string& prefix, unsigned max_shards, const std::string& key, std::string& name, int *shard_id); |
296 | 145 | void rgw_shard_name(const std::string& prefix, unsigned max_shards, const std::string& section, const std::string& key, std::string& name); |
297 | 146 | void rgw_shard_name(const std::string& prefix, unsigned shard_id, std::string& name); |
|
0 commit comments