Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / rgw / rgw_multi.h
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_MULTI_H
5 #define CEPH_RGW_MULTI_H
6
7 #include <map>
8 #include "rgw_xml.h"
9 #include "rgw_rados.h"
10
11 #define MP_META_SUFFIX ".meta"
12 #define MULTIPART_UPLOAD_ID_PREFIX_LEGACY "2/"
13 #define MULTIPART_UPLOAD_ID_PREFIX "2~" // must contain a unique char that may not come up in gen_rand_alpha()
14
15 class RGWMultiCompleteUpload : public XMLObj
16 {
17 public:
18   RGWMultiCompleteUpload() {}
19   ~RGWMultiCompleteUpload() override {}
20   bool xml_end(const char *el) override;
21
22   std::map<int, string> parts;
23 };
24
25 class RGWMultiPart : public XMLObj
26 {
27   string etag;
28   int num;
29 public:
30   RGWMultiPart() : num(0) {}
31   ~RGWMultiPart() override {}
32   bool xml_end(const char *el) override;
33
34   string& get_etag() { return etag; }
35   int get_num() { return num; }
36 };
37
38 class RGWMultiPartNumber : public XMLObj
39 {
40 public:
41   RGWMultiPartNumber() {}
42   ~RGWMultiPartNumber() override {}
43 };
44
45 class RGWMultiETag : public XMLObj
46 {
47 public:
48   RGWMultiETag() {}
49   ~RGWMultiETag() override {}
50 };
51
52 class RGWMultiXMLParser : public RGWXMLParser
53 {
54   XMLObj *alloc_obj(const char *el) override;
55 public:
56   RGWMultiXMLParser() {}
57   ~RGWMultiXMLParser() override {}
58 };
59
60 class MultipartMetaFilter : public RGWAccessListFilter {
61 public:
62   MultipartMetaFilter() {}
63   bool filter(string& name, string& key) override {
64     int len = name.size();
65     if (len < 6)
66       return false;
67
68     size_t pos = name.find(MP_META_SUFFIX, len - 5);
69     if (pos == string::npos)
70       return false;
71
72     pos = name.rfind('.', pos - 1);
73     if (pos == string::npos)
74       return false;
75
76     key = name.substr(0, pos);
77
78     return true;
79   }
80 };
81
82 extern bool is_v2_upload_id(const string& upload_id);
83
84 extern int list_multipart_parts(RGWRados *store, RGWBucketInfo& bucket_info, CephContext *cct,
85                                 const string& upload_id,
86                                 string& meta_oid, int num_parts,
87                                 int marker, map<uint32_t, RGWUploadPartInfo>& parts,
88                                 int *next_marker, bool *truncated,
89                                 bool assume_unsorted = false);
90
91 extern int list_multipart_parts(RGWRados *store, struct req_state *s,
92                                 const string& upload_id,
93                                 string& meta_oid, int num_parts,
94                                 int marker, map<uint32_t, RGWUploadPartInfo>& parts,
95                                 int *next_marker, bool *truncated,
96                                 bool assume_unsorted = false);
97
98 extern int abort_multipart_upload(RGWRados *store, CephContext *cct, RGWObjectCtx *obj_ctx,
99                                 RGWBucketInfo& bucket_info, RGWMPObj& mp_obj);
100
101 extern int list_bucket_multiparts(RGWRados *store, RGWBucketInfo& bucket_info,
102                                 string& prefix, string& marker, string& delim,
103                                 int& max_uploads, vector<rgw_bucket_dir_entry> *objs,
104                                 map<string, bool> *common_prefixes, bool *is_truncated);
105
106 extern int abort_bucket_multiparts(RGWRados *store, CephContext *cct, RGWBucketInfo& bucket_info,
107                                 string& prefix, string& delim);
108 #endif