]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
4 | #ifndef CEPH_RGW_GC_H | |
5 | #define CEPH_RGW_GC_H | |
6 | ||
7 | ||
8 | #include "include/types.h" | |
9 | #include "include/rados/librados.hpp" | |
10 | #include "common/Mutex.h" | |
11 | #include "common/Cond.h" | |
12 | #include "common/Thread.h" | |
13 | #include "rgw_common.h" | |
14 | #include "rgw_rados.h" | |
15 | #include "cls/rgw/cls_rgw_types.h" | |
16 | ||
17 | #include <atomic> | |
18 | ||
11fdf7f2 TL |
19 | class RGWGCIOManager; |
20 | ||
21 | class RGWGC : public DoutPrefixProvider { | |
7c673cae FG |
22 | CephContext *cct; |
23 | RGWRados *store; | |
24 | int max_objs; | |
25 | string *obj_names; | |
26 | std::atomic<bool> down_flag = { false }; | |
27 | ||
28 | int tag_index(const string& tag); | |
29 | ||
30 | class GCWorker : public Thread { | |
11fdf7f2 | 31 | const DoutPrefixProvider *dpp; |
7c673cae FG |
32 | CephContext *cct; |
33 | RGWGC *gc; | |
34 | Mutex lock; | |
35 | Cond cond; | |
36 | ||
37 | public: | |
11fdf7f2 | 38 | GCWorker(const DoutPrefixProvider *_dpp, CephContext *_cct, RGWGC *_gc) : dpp(_dpp), cct(_cct), gc(_gc), lock("GCWorker") {} |
7c673cae FG |
39 | void *entry() override; |
40 | void stop(); | |
41 | }; | |
42 | ||
43 | GCWorker *worker; | |
44 | public: | |
45 | RGWGC() : cct(NULL), store(NULL), max_objs(0), obj_names(NULL), worker(NULL) {} | |
46 | ~RGWGC() { | |
47 | stop_processor(); | |
48 | finalize(); | |
49 | } | |
50 | ||
51 | void add_chain(librados::ObjectWriteOperation& op, cls_rgw_obj_chain& chain, const string& tag); | |
52 | int send_chain(cls_rgw_obj_chain& chain, const string& tag, bool sync); | |
53 | int defer_chain(const string& tag, bool sync); | |
11fdf7f2 | 54 | int remove(int index, const std::vector<string>& tags, librados::AioCompletion **pc); |
7c673cae FG |
55 | |
56 | void initialize(CephContext *_cct, RGWRados *_store); | |
57 | void finalize(); | |
58 | ||
59 | int list(int *index, string& marker, uint32_t max, bool expired_only, std::list<cls_rgw_gc_obj_info>& result, bool *truncated); | |
60 | void list_init(int *index) { *index = 0; } | |
11fdf7f2 TL |
61 | int process(int index, int process_max_secs, bool expired_only, |
62 | RGWGCIOManager& io_manager); | |
63 | int process(bool expired_only); | |
7c673cae FG |
64 | |
65 | bool going_down(); | |
66 | void start_processor(); | |
67 | void stop_processor(); | |
11fdf7f2 TL |
68 | |
69 | CephContext *get_cct() const override { return store->ctx(); } | |
70 | unsigned get_subsys() const; | |
71 | ||
72 | std::ostream& gen_prefix(std::ostream& out) const; | |
73 | ||
7c673cae FG |
74 | }; |
75 | ||
76 | ||
77 | #endif |