]> git.proxmox.com Git - ceph.git/blame - ceph/src/rgw/rgw_lc_s3.h
bump version to 12.2.12-pve1
[ceph.git] / ceph / src / rgw / rgw_lc_s3.h
CommitLineData
7c673cae
FG
1#ifndef CEPH_RGW_LC_S3_H
2#define CEPH_RGW_LC_S3_H
3
4#include <map>
5#include <string>
6#include <iostream>
7#include <include/types.h>
8
7c673cae
FG
9#include "include/str_list.h"
10#include "rgw_lc.h"
11#include "rgw_xml.h"
12
7c673cae
FG
13class LCID_S3 : public XMLObj
14{
15public:
16 LCID_S3() {}
17 ~LCID_S3() override {}
18 string& to_str() { return data; }
19};
20
21class LCPrefix_S3 : public XMLObj
22{
23public:
24 LCPrefix_S3() {}
25 ~LCPrefix_S3() override {}
26 string& to_str() { return data; }
27};
28
181888fb
FG
29class LCFilter_S3 : public LCFilter, public XMLObj
30{
31 public:
32 ~LCFilter_S3() override {}
33 string& to_str() { return data; }
34 void to_xml(ostream& out){
35 out << "<Filter>";
36 if (!prefix.empty())
37 out << "<Prefix>" << prefix << "</Prefix>";
38 out << "</Filter>";
39 }
40 void dump_xml(Formatter *f) const {
41 f->open_object_section("Filter");
42 if (!prefix.empty())
43 encode_xml("Prefix", prefix, f);
44 f->close_section(); // Filter
45 }
46};
47
7c673cae
FG
48class LCStatus_S3 : public XMLObj
49{
50public:
51 LCStatus_S3() {}
52 ~LCStatus_S3() override {}
53 string& to_str() { return data; }
54};
55
56class LCDays_S3 : public XMLObj
57{
58public:
59 LCDays_S3() {}
60 ~LCDays_S3() override {}
61 string& to_str() { return data; }
62};
63
224ce89b
WB
64class LCDate_S3 : public XMLObj
65{
66public:
67 LCDate_S3() {}
68 ~LCDate_S3() override {}
69 string& to_str() { return data; }
70};
71
31f18b77
FG
72class LCDeleteMarker_S3 : public XMLObj
73{
74public:
75 LCDeleteMarker_S3() {}
76 ~LCDeleteMarker_S3() override {}
77 string& to_str() { return data; }
78};
79
7c673cae
FG
80class LCExpiration_S3 : public LCExpiration, public XMLObj
81{
31f18b77
FG
82private:
83 bool dm_expiration;
7c673cae 84public:
31f18b77 85 LCExpiration_S3(): dm_expiration(false) {}
224ce89b 86 LCExpiration_S3(string _days, string _date, bool _dm_expiration) {
31f18b77 87 days = _days;
224ce89b 88 date = _date;
31f18b77
FG
89 dm_expiration = _dm_expiration;
90 }
7c673cae
FG
91 ~LCExpiration_S3() override {}
92
93 bool xml_end(const char *el) override;
94 void to_xml(ostream& out) {
224ce89b 95 out << "<Expiration>";
31f18b77 96 if (dm_expiration) {
224ce89b
WB
97 out << "<ExpiredObjectDeleteMarker>" << "true" << "</ExpiredObjectDeleteMarker>";
98 } else if (!days.empty()){
99 out << "<Days>" << days << "</Days>";
31f18b77 100 } else {
224ce89b 101 out << "<Date>" << date << "</Date>";
31f18b77 102 }
224ce89b 103 out << "</Expiration>";
7c673cae
FG
104 }
105 void dump_xml(Formatter *f) const {
31f18b77
FG
106 f->open_object_section("Expiration");
107 if (dm_expiration) {
108 encode_xml("ExpiredObjectDeleteMarker", "true", f);
224ce89b 109 } else if (!days.empty()) {
31f18b77 110 encode_xml("Days", days, f);
224ce89b
WB
111 } else {
112 encode_xml("Date", date, f);
31f18b77
FG
113 }
114 f->close_section(); // Expiration
115 }
116
117 void set_dm_expiration(bool _dm_expiration) {
118 dm_expiration = _dm_expiration;
119 }
120
121 bool get_dm_expiration() {
122 return dm_expiration;
7c673cae
FG
123 }
124};
125
126class LCNoncurExpiration_S3 : public LCExpiration, public XMLObj
127{
128public:
129 LCNoncurExpiration_S3() {}
130 ~LCNoncurExpiration_S3() override {}
131
132 bool xml_end(const char *el) override;
133 void to_xml(ostream& out) {
134 out << "<NoncurrentVersionExpiration>" << "<NoncurrentDays>" << days << "</NoncurrentDays>"<< "</NoncurrentVersionExpiration>";
135 }
136 void dump_xml(Formatter *f) const {
137 f->open_object_section("NoncurrentVersionExpiration");
138 encode_xml("NoncurrentDays", days, f);
139 f->close_section();
140 }
141};
142
143class LCMPExpiration_S3 : public LCExpiration, public XMLObj
144{
145public:
146 LCMPExpiration_S3() {}
147 ~LCMPExpiration_S3() {}
148
149 bool xml_end(const char *el);
150 void to_xml(ostream& out) {
151 out << "<AbortIncompleteMultipartUpload>" << "<DaysAfterInitiation>" << days << "</DaysAfterInitiation>" << "</AbortIncompleteMultipartUpload>";
152 }
153 void dump_xml(Formatter *f) const {
154 f->open_object_section("AbortIncompleteMultipartUpload");
155 encode_xml("DaysAfterInitiation", days, f);
156 f->close_section();
157 }
158};
159
160class LCRule_S3 : public LCRule, public XMLObj
161{
b32b8144
FG
162private:
163 CephContext *cct;
7c673cae 164public:
b32b8144
FG
165 LCRule_S3(): cct(nullptr) {}
166 LCRule_S3(CephContext *_cct): cct(_cct) {}
7c673cae
FG
167 ~LCRule_S3() override {}
168
b32b8144 169 void to_xml(ostream& out);
7c673cae
FG
170 bool xml_end(const char *el) override;
171 bool xml_start(const char *el, const char **attr);
172 void dump_xml(Formatter *f) const {
173 f->open_object_section("Rule");
174 encode_xml("ID", id, f);
181888fb
FG
175 // In case of an empty filter and an empty Prefix, we defer to Prefix.
176 if (!filter.empty()) {
177 const LCFilter_S3& lc_filter = static_cast<const LCFilter_S3&>(filter);
178 lc_filter.dump_xml(f);
179 } else {
180 encode_xml("Prefix", prefix, f);
181 }
7c673cae 182 encode_xml("Status", status, f);
31f18b77 183 if (!expiration.empty() || dm_expiration) {
224ce89b 184 LCExpiration_S3 expir(expiration.get_days_str(), expiration.get_date(), dm_expiration);
7c673cae
FG
185 expir.dump_xml(f);
186 }
187 if (!noncur_expiration.empty()) {
188 const LCNoncurExpiration_S3& noncur_expir = static_cast<const LCNoncurExpiration_S3&>(noncur_expiration);
189 noncur_expir.dump_xml(f);
190 }
191 if (!mp_expiration.empty()) {
192 const LCMPExpiration_S3& mp_expir = static_cast<const LCMPExpiration_S3&>(mp_expiration);
193 mp_expir.dump_xml(f);
194 }
181888fb 195
7c673cae
FG
196 f->close_section(); // Rule
197 }
b32b8144
FG
198
199 void set_ctx(CephContext *ctx) {
200 cct = ctx;
201 }
7c673cae
FG
202};
203
204class RGWLCXMLParser_S3 : public RGWXMLParser
205{
206 CephContext *cct;
207
208 XMLObj *alloc_obj(const char *el) override;
209public:
210 RGWLCXMLParser_S3(CephContext *_cct) : cct(_cct) {}
211};
212
213class RGWLifecycleConfiguration_S3 : public RGWLifecycleConfiguration, public XMLObj
214{
215public:
216 RGWLifecycleConfiguration_S3(CephContext *_cct) : RGWLifecycleConfiguration(_cct) {}
217 RGWLifecycleConfiguration_S3() : RGWLifecycleConfiguration(NULL) {}
218 ~RGWLifecycleConfiguration_S3() override {}
219
220 bool xml_end(const char *el) override;
221
222 void to_xml(ostream& out) {
223 out << "<LifecycleConfiguration xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">";
224 multimap<string, LCRule>::iterator iter;
225 for (iter = rule_map.begin(); iter != rule_map.end(); ++iter) {
226 LCRule_S3& rule = static_cast<LCRule_S3&>(iter->second);
b32b8144 227 rule.to_xml(out);
7c673cae
FG
228 }
229 out << "</LifecycleConfiguration>";
230 }
231 int rebuild(RGWRados *store, RGWLifecycleConfiguration& dest);
232 void dump_xml(Formatter *f) const;
233};
234
235
236#endif