]> git.proxmox.com Git - ceph.git/blame - ceph/src/rgw/rgw_lc_s3.h
update sources to v12.1.1
[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
29class LCStatus_S3 : public XMLObj
30{
31public:
32 LCStatus_S3() {}
33 ~LCStatus_S3() override {}
34 string& to_str() { return data; }
35};
36
37class LCDays_S3 : public XMLObj
38{
39public:
40 LCDays_S3() {}
41 ~LCDays_S3() override {}
42 string& to_str() { return data; }
43};
44
224ce89b
WB
45class LCDate_S3 : public XMLObj
46{
47public:
48 LCDate_S3() {}
49 ~LCDate_S3() override {}
50 string& to_str() { return data; }
51};
52
31f18b77
FG
53class LCDeleteMarker_S3 : public XMLObj
54{
55public:
56 LCDeleteMarker_S3() {}
57 ~LCDeleteMarker_S3() override {}
58 string& to_str() { return data; }
59};
60
7c673cae
FG
61class LCExpiration_S3 : public LCExpiration, public XMLObj
62{
31f18b77
FG
63private:
64 bool dm_expiration;
7c673cae 65public:
31f18b77 66 LCExpiration_S3(): dm_expiration(false) {}
224ce89b 67 LCExpiration_S3(string _days, string _date, bool _dm_expiration) {
31f18b77 68 days = _days;
224ce89b 69 date = _date;
31f18b77
FG
70 dm_expiration = _dm_expiration;
71 }
7c673cae
FG
72 ~LCExpiration_S3() override {}
73
74 bool xml_end(const char *el) override;
75 void to_xml(ostream& out) {
224ce89b 76 out << "<Expiration>";
31f18b77 77 if (dm_expiration) {
224ce89b
WB
78 out << "<ExpiredObjectDeleteMarker>" << "true" << "</ExpiredObjectDeleteMarker>";
79 } else if (!days.empty()){
80 out << "<Days>" << days << "</Days>";
31f18b77 81 } else {
224ce89b 82 out << "<Date>" << date << "</Date>";
31f18b77 83 }
224ce89b 84 out << "</Expiration>";
7c673cae
FG
85 }
86 void dump_xml(Formatter *f) const {
31f18b77
FG
87 f->open_object_section("Expiration");
88 if (dm_expiration) {
89 encode_xml("ExpiredObjectDeleteMarker", "true", f);
224ce89b 90 } else if (!days.empty()) {
31f18b77 91 encode_xml("Days", days, f);
224ce89b
WB
92 } else {
93 encode_xml("Date", date, f);
31f18b77
FG
94 }
95 f->close_section(); // Expiration
96 }
97
98 void set_dm_expiration(bool _dm_expiration) {
99 dm_expiration = _dm_expiration;
100 }
101
102 bool get_dm_expiration() {
103 return dm_expiration;
7c673cae
FG
104 }
105};
106
107class LCNoncurExpiration_S3 : public LCExpiration, public XMLObj
108{
109public:
110 LCNoncurExpiration_S3() {}
111 ~LCNoncurExpiration_S3() override {}
112
113 bool xml_end(const char *el) override;
114 void to_xml(ostream& out) {
115 out << "<NoncurrentVersionExpiration>" << "<NoncurrentDays>" << days << "</NoncurrentDays>"<< "</NoncurrentVersionExpiration>";
116 }
117 void dump_xml(Formatter *f) const {
118 f->open_object_section("NoncurrentVersionExpiration");
119 encode_xml("NoncurrentDays", days, f);
120 f->close_section();
121 }
122};
123
124class LCMPExpiration_S3 : public LCExpiration, public XMLObj
125{
126public:
127 LCMPExpiration_S3() {}
128 ~LCMPExpiration_S3() {}
129
130 bool xml_end(const char *el);
131 void to_xml(ostream& out) {
132 out << "<AbortIncompleteMultipartUpload>" << "<DaysAfterInitiation>" << days << "</DaysAfterInitiation>" << "</AbortIncompleteMultipartUpload>";
133 }
134 void dump_xml(Formatter *f) const {
135 f->open_object_section("AbortIncompleteMultipartUpload");
136 encode_xml("DaysAfterInitiation", days, f);
137 f->close_section();
138 }
139};
140
141class LCRule_S3 : public LCRule, public XMLObj
142{
143public:
144 LCRule_S3() {}
145 ~LCRule_S3() override {}
146
147 void to_xml(CephContext *cct, ostream& out);
148 bool xml_end(const char *el) override;
149 bool xml_start(const char *el, const char **attr);
150 void dump_xml(Formatter *f) const {
151 f->open_object_section("Rule");
152 encode_xml("ID", id, f);
153 encode_xml("Prefix", prefix, f);
154 encode_xml("Status", status, f);
31f18b77 155 if (!expiration.empty() || dm_expiration) {
224ce89b 156 LCExpiration_S3 expir(expiration.get_days_str(), expiration.get_date(), dm_expiration);
7c673cae
FG
157 expir.dump_xml(f);
158 }
159 if (!noncur_expiration.empty()) {
160 const LCNoncurExpiration_S3& noncur_expir = static_cast<const LCNoncurExpiration_S3&>(noncur_expiration);
161 noncur_expir.dump_xml(f);
162 }
163 if (!mp_expiration.empty()) {
164 const LCMPExpiration_S3& mp_expir = static_cast<const LCMPExpiration_S3&>(mp_expiration);
165 mp_expir.dump_xml(f);
166 }
167 f->close_section(); // Rule
168 }
169};
170
171class RGWLCXMLParser_S3 : public RGWXMLParser
172{
173 CephContext *cct;
174
175 XMLObj *alloc_obj(const char *el) override;
176public:
177 RGWLCXMLParser_S3(CephContext *_cct) : cct(_cct) {}
178};
179
180class RGWLifecycleConfiguration_S3 : public RGWLifecycleConfiguration, public XMLObj
181{
182public:
183 RGWLifecycleConfiguration_S3(CephContext *_cct) : RGWLifecycleConfiguration(_cct) {}
184 RGWLifecycleConfiguration_S3() : RGWLifecycleConfiguration(NULL) {}
185 ~RGWLifecycleConfiguration_S3() override {}
186
187 bool xml_end(const char *el) override;
188
189 void to_xml(ostream& out) {
190 out << "<LifecycleConfiguration xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">";
191 multimap<string, LCRule>::iterator iter;
192 for (iter = rule_map.begin(); iter != rule_map.end(); ++iter) {
193 LCRule_S3& rule = static_cast<LCRule_S3&>(iter->second);
194 rule.to_xml(cct, out);
195 }
196 out << "</LifecycleConfiguration>";
197 }
198 int rebuild(RGWRados *store, RGWLifecycleConfiguration& dest);
199 void dump_xml(Formatter *f) const;
200};
201
202
203#endif