]>
Commit | Line | Data |
---|---|---|
7c673cae | 1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
9f95a23c | 2 | // vim: ts=8 sw=2 smarttab ft=cpp |
7c673cae FG |
3 | |
4 | #include <errno.h> | |
5 | #include <iostream> | |
6 | #include <sstream> | |
7 | #include <string> | |
8 | ||
7c673cae FG |
9 | |
10 | #include "auth/Crypto.h" | |
11 | ||
12 | #include "common/armor.h" | |
13 | #include "common/ceph_json.h" | |
14 | #include "common/config.h" | |
15 | #include "common/ceph_argparse.h" | |
16 | #include "common/Formatter.h" | |
17 | #include "common/errno.h" | |
18 | ||
19 | #include "global/global_init.h" | |
20 | ||
21 | #include "include/utime.h" | |
22 | #include "include/str_list.h" | |
23 | ||
24 | #include "rgw_user.h" | |
25 | #include "rgw_bucket.h" | |
7c673cae FG |
26 | #include "rgw_acl.h" |
27 | #include "rgw_acl_s3.h" | |
28 | #include "rgw_log.h" | |
29 | #include "rgw_formats.h" | |
30 | #include "rgw_usage.h" | |
7c673cae FG |
31 | #include "rgw_object_expirer_core.h" |
32 | ||
33 | #define dout_subsys ceph_subsys_rgw | |
34 | ||
9f95a23c | 35 | static rgw::sal::RGWRadosStore *store = NULL; |
7c673cae FG |
36 | |
37 | class StoreDestructor { | |
9f95a23c | 38 | rgw::sal::RGWRadosStore *store; |
7c673cae FG |
39 | |
40 | public: | |
9f95a23c | 41 | explicit StoreDestructor(rgw::sal::RGWRadosStore *_s) : store(_s) {} |
7c673cae FG |
42 | ~StoreDestructor() { |
43 | if (store) { | |
44 | RGWStoreManager::close_storage(store); | |
45 | } | |
46 | } | |
47 | }; | |
48 | ||
49 | static void usage() | |
50 | { | |
51 | generic_server_usage(); | |
52 | } | |
53 | ||
54 | int main(const int argc, const char **argv) | |
55 | { | |
56 | vector<const char *> args; | |
57 | argv_to_vec(argc, argv, args); | |
11fdf7f2 TL |
58 | if (args.empty()) { |
59 | cerr << argv[0] << ": -h or --help for usage" << std::endl; | |
60 | exit(1); | |
61 | } | |
62 | if (ceph_argparse_need_usage(args)) { | |
63 | usage(); | |
64 | exit(0); | |
65 | } | |
7c673cae FG |
66 | |
67 | auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, | |
68 | CODE_ENVIRONMENT_DAEMON, | |
f67539c2 | 69 | CINIT_FLAG_UNPRIVILEGED_DAEMON_DEFAULTS); |
7c673cae FG |
70 | |
71 | for (std::vector<const char *>::iterator i = args.begin(); i != args.end(); ) { | |
72 | if (ceph_argparse_double_dash(args, i)) { | |
73 | break; | |
7c673cae FG |
74 | } |
75 | } | |
76 | ||
11fdf7f2 | 77 | if (g_conf()->daemonize) { |
7c673cae FG |
78 | global_init_daemonize(g_ceph_context); |
79 | } | |
80 | ||
81 | common_init_finish(g_ceph_context); | |
82 | ||
b3b6e05e TL |
83 | const DoutPrefix dp(cct.get(), dout_subsys, "rgw object expirer: "); |
84 | store = RGWStoreManager::get_storage(&dp, g_ceph_context, false, false, false, false, false); | |
7c673cae FG |
85 | if (!store) { |
86 | std::cerr << "couldn't init storage provider" << std::endl; | |
87 | return EIO; | |
88 | } | |
89 | ||
7c673cae FG |
90 | /* Guard to not forget about closing the rados store. */ |
91 | StoreDestructor store_dtor(store); | |
92 | ||
93 | RGWObjectExpirer objexp(store); | |
94 | objexp.start_processor(); | |
95 | ||
96 | const utime_t interval(g_ceph_context->_conf->rgw_objexp_gc_interval, 0); | |
97 | while (true) { | |
98 | interval.sleep(); | |
99 | } | |
100 | ||
101 | /* unreachable */ | |
102 | ||
103 | return EXIT_SUCCESS; | |
104 | } |