greenplumn s3interface 源码
greenplumn s3interface 代码
文件路径:/gpcontrib/gpcloud/include/s3interface.h
#ifndef INCLUDE_S3INTERFACE_H_
#define INCLUDE_S3INTERFACE_H_
#include "gpcommon.h"
#include "s3common_headers.h"
#include "s3exception.h"
#include "s3log.h"
#include "s3restful_service.h"
#include "s3url.h"
#define S3_MAGIC_BYTES_NUM 4
#define S3_REQUEST_NO_RETRY 1
#define S3_REQUEST_MAX_RETRIES 5
#define S3_RANGE_HEADER_STRING_LEN 128
enum S3CompressionType {
S3_COMPRESSION_GZIP,
S3_COMPRESSION_PLAIN,
S3_COMPRESSION_DEFLATE,
};
struct BucketContent {
BucketContent() : name(""), size(0) {
}
BucketContent(string name, uint64_t size) {
this->name = name;
this->size = size;
}
~BucketContent() {
}
string getName() const {
return this->name;
};
uint64_t getSize() const {
return this->size;
};
string name;
uint64_t size;
};
struct ListBucketResult {
string Name;
string Prefix;
vector<BucketContent> contents;
};
class S3Interface {
public:
virtual ~S3Interface() {
}
virtual ListBucketResult listBucket(S3Url &s3Url) = 0;
virtual uint64_t fetchData(uint64_t offset, S3VectorUInt8 &data, uint64_t len,
const S3Url &s3Url) = 0;
virtual S3CompressionType checkCompressionType(const S3Url &s3Url) = 0;
virtual bool checkKeyExistence(const S3Url &s3Url) = 0;
virtual string getUploadId(const S3Url &s3Url) = 0;
virtual string uploadPartOfData(S3VectorUInt8 &data, const S3Url &s3Url, uint64_t partNumber,
const string &uploadId) = 0;
virtual bool completeMultiPart(const S3Url &s3Url, const string &uploadId,
const vector<string> &etagArray) = 0;
virtual bool abortUpload(const S3Url &s3Url, const string &uploadId) = 0;
};
class S3InterfaceService : public S3Interface {
public:
S3InterfaceService();
S3InterfaceService(const S3Params &);
virtual ~S3InterfaceService();
ListBucketResult listBucket(S3Url &s3Url);
uint64_t fetchData(uint64_t offset, S3VectorUInt8 &data, uint64_t len, const S3Url &s3Url);
S3CompressionType checkCompressionType(const S3Url &s3Url);
bool checkKeyExistence(const S3Url &s3Url);
void setRESTfulService(RESTfulService *restfullService) {
this->restfulService = restfullService;
}
protected:
Response getResponseWithRetries(const string &url, HTTPHeaders &headers,
uint64_t retries = S3_REQUEST_MAX_RETRIES);
Response putResponseWithRetries(const string &url, HTTPHeaders &headers, S3VectorUInt8 &data,
uint64_t retries = S3_REQUEST_MAX_RETRIES);
Response postResponseWithRetries(const string &url, HTTPHeaders &headers,
const vector<uint8_t> &data,
uint64_t retries = S3_REQUEST_MAX_RETRIES);
ResponseCode headResponseWithRetries(const string &url, HTTPHeaders &headers,
uint64_t retries = S3_REQUEST_MAX_RETRIES);
Response deleteRequestWithRetries(const string &url, HTTPHeaders &headers,
uint64_t retries = S3_REQUEST_MAX_RETRIES);
string getUploadId(const S3Url &s3Url);
string uploadPartOfData(S3VectorUInt8 &data, const S3Url &s3Url, uint64_t partNumber,
const string &uploadId);
bool completeMultiPart(const S3Url &s3Url, const string &uploadId,
const vector<string> &etagArray);
bool abortUpload(const S3Url &s3Url, const string &uploadId);
private:
bool parseBucketXML(ListBucketResult *result, xmlParserCtxtPtr xmlcontext, string &marker);
Response getBucketResponse(const S3Url &s3Url, const string &encodedQuery);
xmlParserCtxtPtr getXMLContext(Response &response);
bool isKeyExisted(ResponseCode code);
private:
RESTfulService *restfulService;
S3Params params;
};
#endif /* INCLUDE_S3INTERFACE_H_ */
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦