]> git.proxmox.com Git - ceph.git/blame - ceph/src/rgw/rgw_multi.h
update sources to v12.1.1
[ceph.git] / ceph / src / rgw / rgw_multi.h
CommitLineData
7c673cae
FG
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
15class RGWMultiCompleteUpload : public XMLObj
16{
17public:
18 RGWMultiCompleteUpload() {}
19 ~RGWMultiCompleteUpload() override {}
20 bool xml_end(const char *el) override;
21
22 std::map<int, string> parts;
23};
24
25class RGWMultiPart : public XMLObj
26{
27 string etag;
28 int num;
29public:
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
38class RGWMultiPartNumber : public XMLObj
39{
40public:
41 RGWMultiPartNumber() {}
42 ~RGWMultiPartNumber() override {}
43};
44
45class RGWMultiETag : public XMLObj
46{
47public:
48 RGWMultiETag() {}
49 ~RGWMultiETag() override {}
50};
51
52class RGWMultiXMLParser : public RGWXMLParser
53{
54 XMLObj *alloc_obj(const char *el) override;
55public:
56 RGWMultiXMLParser() {}
57 ~RGWMultiXMLParser() override {}
58};
59
60class MultipartMetaFilter : public RGWAccessListFilter {
61public:
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
82extern bool is_v2_upload_id(const string& upload_id);
83
84extern 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
91extern 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
98extern int abort_multipart_upload(RGWRados *store, CephContext *cct, RGWObjectCtx *obj_ctx,
99 RGWBucketInfo& bucket_info, RGWMPObj& mp_obj);
100
224ce89b
WB
101extern 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
106extern int abort_bucket_multiparts(RGWRados *store, CephContext *cct, RGWBucketInfo& bucket_info,
107 string& prefix, string& delim);
7c673cae 108#endif