Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / rgw / rgw_lc_s3.h
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
9 #include "include/str_list.h"
10 #include "rgw_lc.h"
11 #include "rgw_xml.h"
12
13 class LCID_S3 : public XMLObj
14 {
15 public:
16   LCID_S3() {}
17   ~LCID_S3() override {}
18   string& to_str() { return data; }
19 };
20
21 class LCPrefix_S3 : public XMLObj
22 {
23 public:
24   LCPrefix_S3() {}
25   ~LCPrefix_S3() override {}
26   string& to_str() { return data; }
27 };
28
29 class 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
48 class LCStatus_S3 : public XMLObj
49 {
50 public:
51   LCStatus_S3() {}
52   ~LCStatus_S3() override {}
53   string& to_str() { return data; }
54 };
55
56 class LCDays_S3 : public XMLObj
57 {
58 public:
59   LCDays_S3() {}
60   ~LCDays_S3() override {}
61   string& to_str() { return data; }
62 };
63
64 class LCDate_S3 : public XMLObj
65 {
66 public:
67   LCDate_S3() {}
68   ~LCDate_S3() override {}
69   string& to_str() { return data; }
70 };
71
72 class LCDeleteMarker_S3 : public XMLObj
73 {
74 public:
75   LCDeleteMarker_S3() {}
76   ~LCDeleteMarker_S3() override {}
77   string& to_str() { return data; }
78 };
79
80 class LCExpiration_S3 : public LCExpiration, public XMLObj
81 {
82 private:
83   bool dm_expiration;
84 public:
85   LCExpiration_S3(): dm_expiration(false) {}
86   LCExpiration_S3(string _days, string _date, bool _dm_expiration) {
87     days = _days;
88     date = _date;
89     dm_expiration = _dm_expiration;
90   }
91   ~LCExpiration_S3() override {}
92
93   bool xml_end(const char *el) override;
94   void to_xml(ostream& out) {
95     out << "<Expiration>";
96     if (dm_expiration) {
97       out << "<ExpiredObjectDeleteMarker>" << "true" << "</ExpiredObjectDeleteMarker>";
98     } else if (!days.empty()){
99       out << "<Days>" << days << "</Days>";
100     } else {
101       out << "<Date>" << date << "</Date>";
102     }
103     out << "</Expiration>";
104   }
105   void dump_xml(Formatter *f) const {
106     f->open_object_section("Expiration");
107     if (dm_expiration) {
108       encode_xml("ExpiredObjectDeleteMarker", "true", f);
109     } else if (!days.empty()) {
110       encode_xml("Days", days, f);
111     } else {
112       encode_xml("Date", date, f);
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;
123   }
124 };
125
126 class LCNoncurExpiration_S3 : public LCExpiration, public XMLObj
127 {
128 public:
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
143 class LCMPExpiration_S3 : public LCExpiration, public XMLObj
144 {
145 public:
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
160 class LCRule_S3 : public LCRule, public XMLObj
161 {
162 public:
163   LCRule_S3() {}
164   ~LCRule_S3() override {}
165
166   void to_xml(CephContext *cct, ostream& out);
167   bool xml_end(const char *el) override;
168   bool xml_start(const char *el, const char **attr);
169   void dump_xml(Formatter *f) const {
170     f->open_object_section("Rule");
171     encode_xml("ID", id, f);
172     // In case of an empty filter and an empty Prefix, we defer to Prefix.
173     if (!filter.empty()) {
174       const LCFilter_S3& lc_filter = static_cast<const LCFilter_S3&>(filter);
175       lc_filter.dump_xml(f);
176     } else {
177       encode_xml("Prefix", prefix, f);
178     }
179     encode_xml("Status", status, f);
180     if (!expiration.empty() || dm_expiration) {
181       LCExpiration_S3 expir(expiration.get_days_str(), expiration.get_date(), dm_expiration);
182       expir.dump_xml(f);
183     }
184     if (!noncur_expiration.empty()) {
185       const LCNoncurExpiration_S3& noncur_expir = static_cast<const LCNoncurExpiration_S3&>(noncur_expiration);
186       noncur_expir.dump_xml(f);
187     }
188     if (!mp_expiration.empty()) {
189       const LCMPExpiration_S3& mp_expir = static_cast<const LCMPExpiration_S3&>(mp_expiration);
190       mp_expir.dump_xml(f);
191     }
192
193     f->close_section(); // Rule
194   }
195 };
196
197 class RGWLCXMLParser_S3 : public RGWXMLParser
198 {
199   CephContext *cct;
200
201   XMLObj *alloc_obj(const char *el) override;
202 public:
203   RGWLCXMLParser_S3(CephContext *_cct) : cct(_cct) {}
204 };
205
206 class RGWLifecycleConfiguration_S3 : public RGWLifecycleConfiguration, public XMLObj
207 {
208 public:
209   RGWLifecycleConfiguration_S3(CephContext *_cct) : RGWLifecycleConfiguration(_cct) {}
210   RGWLifecycleConfiguration_S3() : RGWLifecycleConfiguration(NULL) {}
211   ~RGWLifecycleConfiguration_S3() override {}
212
213   bool xml_end(const char *el) override;
214
215   void to_xml(ostream& out) {
216     out << "<LifecycleConfiguration xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">";
217     multimap<string, LCRule>::iterator iter;
218     for (iter = rule_map.begin(); iter != rule_map.end(); ++iter) {
219       LCRule_S3& rule = static_cast<LCRule_S3&>(iter->second);
220       rule.to_xml(cct, out);
221     }
222     out << "</LifecycleConfiguration>";
223   }
224   int rebuild(RGWRados *store, RGWLifecycleConfiguration& dest);
225   void dump_xml(Formatter *f) const;
226 };
227
228
229 #endif