]>
git.proxmox.com Git - ceph.git/blob - 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
4 #ifndef CEPH_RGW_MULTI_H
5 #define CEPH_RGW_MULTI_H
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()
15 class RGWMultiCompleteUpload
: public XMLObj
18 RGWMultiCompleteUpload() {}
19 ~RGWMultiCompleteUpload() override
{}
20 bool xml_end(const char *el
) override
;
22 std::map
<int, string
> parts
;
25 class RGWMultiPart
: public XMLObj
30 RGWMultiPart() : num(0) {}
31 ~RGWMultiPart() override
{}
32 bool xml_end(const char *el
) override
;
34 string
& get_etag() { return etag
; }
35 int get_num() { return num
; }
38 class RGWMultiPartNumber
: public XMLObj
41 RGWMultiPartNumber() {}
42 ~RGWMultiPartNumber() override
{}
45 class RGWMultiETag
: public XMLObj
49 ~RGWMultiETag() override
{}
52 class RGWMultiXMLParser
: public RGWXMLParser
54 XMLObj
*alloc_obj(const char *el
) override
;
56 RGWMultiXMLParser() {}
57 ~RGWMultiXMLParser() override
{}
60 class MultipartMetaFilter
: public RGWAccessListFilter
{
62 MultipartMetaFilter() {}
63 bool filter(string
& name
, string
& key
) override
{
64 int len
= name
.size();
68 size_t pos
= name
.find(MP_META_SUFFIX
, len
- 5);
69 if (pos
== string::npos
)
72 pos
= name
.rfind('.', pos
- 1);
73 if (pos
== string::npos
)
76 key
= name
.substr(0, pos
);
82 extern bool is_v2_upload_id(const string
& upload_id
);
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);
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);
98 extern int abort_multipart_upload(RGWRados
*store
, CephContext
*cct
, RGWObjectCtx
*obj_ctx
,
99 RGWBucketInfo
& bucket_info
, RGWMPObj
& mp_obj
);
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
);
106 extern int abort_bucket_multiparts(RGWRados
*store
, CephContext
*cct
, RGWBucketInfo
& bucket_info
,
107 string
& prefix
, string
& delim
);