Skip to content

Commit b689fab

Browse files
committed
Merge branch 'dev/dev_auto_change_domain' into 'master' (merge request !31)
dev/dev_auto_change_domain
2 parents 687a661 + bf1ab89 commit b689fab

15 files changed

+934
-351
lines changed

include/cos_api.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,7 @@ class CosAPI {
796796
/// \param req AsyncResumableGetObject
797797
/// \return 返回context
798798
SharedAsyncContext AsyncResumableGetObject(const AsyncGetObjectReq& req);
799-
SharedAsyncContext AsyncResumableGetObject(const AsyncGetObjectReq& req, Poco::TaskManager*& taskManager);;
799+
SharedAsyncContext AsyncResumableGetObject(const AsyncGetObjectReq& req, Poco::TaskManager*& taskManager);
800800

801801
/// \brief 异步多线程下载对象到本地
802802
/// \param req MultiGetObjectAsync请求

include/cos_defines.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const uint64_t kPartSize1M = 1 * 1024 * 1024;
3939
/// 分块大小5G
4040
const uint64_t kPartSize5G = (uint64_t)5 * 1024 * 1024 * 1024;
4141

42+
const bool COS_CHANGE_BACKUP_DOMAIN = true;
4243
typedef enum log_out_type {
4344
COS_LOG_NULL = 0,
4445
COS_LOG_STDOUT,

include/cos_sys_config.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ class CosSysConfig {
112112

113113
/// \brief 根据传入appid、region、bucket_name返回对应的hostname
114114
static std::string GetHost(uint64_t app_id, const std::string& region,
115-
const std::string& bucket_name);
115+
const std::string& bucket_name,
116+
bool change_backup_domain = false);
116117

117118
/// \brief 获取CI域名
118119
static std::string GetCIHost(const std::string& bucket_name,
@@ -158,6 +159,10 @@ class CosSysConfig {
158159
/// \brief 获取dns cache大小
159160
static unsigned GetDnsCacheSize();
160161

162+
static void SetRetryChangeDomain(bool retry_change_domain);
163+
164+
static bool GetRetryChangeDomain();
165+
161166
private:
162167
// 打印日志:0,不打印,1:打印到屏幕,2:打印到syslog
163168
static LOG_OUT_TYPE m_log_outtype;
@@ -208,6 +213,8 @@ class CosSysConfig {
208213
static unsigned m_dns_cache_expire_seconds;
209214
// dns cache大小
210215
static unsigned m_dns_cache_size;
216+
217+
static bool m_retry_change_domain;
211218
};
212219

213220
} // namespace qcloud_cos

include/op/base_op.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ class BaseOp {
4949

5050
bool IsDomainSameToHost() const;
5151

52+
bool UseDefaultDomain() const;
53+
54+
bool IsDefaultHost(const std::string &host) const;
55+
56+
std::string ChangeHostSuffix(const std::string &host);
57+
5258
/// \brief 封装了cos Service/Bucket/Object 相关接口的通用操作,
5359
/// 包括签名计算、请求发送、返回内容解析等
5460
///

include/op/bucket_op.h

Lines changed: 84 additions & 42 deletions
Large diffs are not rendered by default.

include/op/object_op.h

Lines changed: 58 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2017, Tencent Inc.
1+
// Copyright (c) 2017, Tencent Inc.
22
// All rights reserved.
33
//
44
// Author: sevenyou <[email protected]>
@@ -41,7 +41,8 @@ class ObjectOp : public BaseOp {
4141

4242
std::string GetResumableUploadID(const PutObjectByFileReq& originReq,
4343
const std::string& bucket_name,
44-
const std::string& object_name);
44+
const std::string& object_name,
45+
bool change_backup_domain = false);
4546

4647
bool CheckUploadPart(const PutObjectByFileReq& req,
4748
const std::string& bucket_name,
@@ -59,7 +60,7 @@ class ObjectOp : public BaseOp {
5960
/// \param response HeadObject返回
6061
///
6162
/// \return 返回HTTP请求的状态码及错误信息
62-
CosResult HeadObject(const HeadObjectReq& req, HeadObjectResp* resp);
63+
CosResult HeadObject(const HeadObjectReq& req, HeadObjectResp* resp, bool change_backup_domain = false);
6364

6465
/// \brief 下载Bucket中的一个文件至流中
6566
///
@@ -68,7 +69,7 @@ class ObjectOp : public BaseOp {
6869
///
6970
/// \return 返回HTTP请求的状态码及错误信息
7071
CosResult GetObject(const GetObjectByStreamReq& req,
71-
GetObjectByStreamResp* resp);
72+
GetObjectByStreamResp* resp, bool change_backup_domain = false);
7273

7374
/// \brief 下载Bucket中的一个文件到本地
7475
///
@@ -77,7 +78,7 @@ class ObjectOp : public BaseOp {
7778
///
7879
/// \return 返回HTTP请求的状态码及错误信息
7980
CosResult GetObject(const GetObjectByFileReq& req, GetObjectByFileResp* resp,
80-
const SharedTransferHandler& handler = nullptr);
81+
const SharedTransferHandler& handler = nullptr, bool change_backup_domain = false);
8182

8283
/// \brief 多线程下载Bucket中的一个文件到本地
8384
///
@@ -95,7 +96,7 @@ class ObjectOp : public BaseOp {
9596
///
9697
/// \return 返回HTTP请求的状态码及错误信息
9798
CosResult PutObject(const PutObjectByFileReq& req, PutObjectByFileResp* resp,
98-
const SharedTransferHandler& handler = nullptr);
99+
const SharedTransferHandler& handler = nullptr, bool change_backup_domain = false);
99100

100101
/// \brief 将指定流上传至指定Bucket中
101102
///
@@ -104,23 +105,23 @@ class ObjectOp : public BaseOp {
104105
///
105106
/// \return 返回HTTP请求的状态码及错误信息
106107
CosResult PutObject(const PutObjectByStreamReq& req,
107-
PutObjectByStreamResp* resp, const SharedTransferHandler& handler=nullptr);
108+
PutObjectByStreamResp* resp, const SharedTransferHandler& handler=nullptr, bool change_backup_domain = false);
108109

109110
/// \brief 删除Object
110111
///
111112
/// \param req DeleteObject请求
112113
/// \param resp DeleteObject返回
113114
///
114115
/// \return 本次请求的调用情况(如状态码等)
115-
CosResult DeleteObject(const DeleteObjectReq& req, DeleteObjectResp* resp);
116+
CosResult DeleteObject(const DeleteObjectReq& req, DeleteObjectResp* resp, bool change_backup_domain = false);
116117

117118
/// \brief 批量删除Object
118119
///
119120
/// \param req DeleteObjects请求
120121
/// \param resp DeleteObjects返回
121122
///
122123
/// \return 本次请求的调用情况(如状态码等)
123-
CosResult DeleteObjects(const DeleteObjectsReq& req, DeleteObjectsResp* resp);
124+
CosResult DeleteObjects(const DeleteObjectsReq& req, DeleteObjectsResp* resp, bool change_backup_domain = false);
124125

125126
/// \brief
126127
/// 请求实现初始化分片上传,成功执行此请求以后会返回UploadId用于后续的Upload
@@ -131,7 +132,8 @@ class ObjectOp : public BaseOp {
131132
///
132133
/// \return 返回HTTP请求的状态码及错误信息
133134
CosResult InitMultiUpload(const InitMultiUploadReq& req,
134-
InitMultiUploadResp* resp);
135+
InitMultiUploadResp* resp,
136+
bool change_backup_domain = false);
135137

136138
/// \brief 初始化以后的分块上传,支持的块的数量为1到10000,块的大小为1MB到5GB
137139
///
@@ -140,7 +142,8 @@ class ObjectOp : public BaseOp {
140142
///
141143
/// \return 返回HTTP请求的状态码及错误信息
142144
CosResult UploadPartData(const UploadPartDataReq& req,
143-
UploadPartDataResp* resp);
145+
UploadPartDataResp* resp,
146+
bool change_backup_domain = false);
144147

145148
/// \brief
146149
/// 初始化以后的分块复制,实现将一个文件的分块内容从源路径复制到目标路径。
@@ -152,7 +155,8 @@ class ObjectOp : public BaseOp {
152155
///
153156
/// \return 返回HTTP请求的状态码及错误信息
154157
CosResult UploadPartCopyData(const UploadPartCopyDataReq& req,
155-
UploadPartCopyDataResp* resp);
158+
UploadPartCopyDataResp* resp,
159+
bool change_backup_domain = false);
156160

157161
/// \brief 完成整个分块上传。当使用 Upload Parts 上传完所有块以后,
158162
/// 必须调用该 API 来完成整个文件的分块上传
@@ -162,7 +166,8 @@ class ObjectOp : public BaseOp {
162166
///
163167
/// \return 返回HTTP请求的状态码及错误信息
164168
CosResult CompleteMultiUpload(const CompleteMultiUploadReq& req,
165-
CompleteMultiUploadResp* resp);
169+
CompleteMultiUploadResp* resp,
170+
bool change_backup_domain = false);
166171

167172
/// \brief 异步多线程上传
168173
/// \param request MultiUploadObject请求
@@ -172,7 +177,8 @@ class ObjectOp : public BaseOp {
172177
/// \return result
173178
CosResult MultiUploadObject(const PutObjectByFileReq& req,
174179
MultiPutObjectResp* resp,
175-
const SharedTransferHandler& handler = nullptr);
180+
const SharedTransferHandler& handler = nullptr,
181+
bool change_backup_domain = false);
176182

177183
/// \brief 舍弃一个分块上传并删除已上传的块
178184
///
@@ -181,23 +187,24 @@ class ObjectOp : public BaseOp {
181187
///
182188
/// \return
183189
CosResult AbortMultiUpload(const AbortMultiUploadReq& req,
184-
AbortMultiUploadResp* resp);
190+
AbortMultiUploadResp* resp,
191+
bool change_backup_domain = false);
185192

186193
/// \brief 查询特定分块上传中的已上传的块
187194
///
188195
/// \param req ListParts请求
189196
/// \param resp ListParts返回
190197
///
191198
/// \return result
192-
CosResult ListParts(const ListPartsReq& req, ListPartsResp* resp);
199+
CosResult ListParts(const ListPartsReq& req, ListPartsResp* resp, bool change_backup_domain = false);
193200

194201
/// \brief 列出Object下的ACL
195202
///
196203
/// \param req GetObjectACL请求
197204
/// \param resp GetObjectACL返回
198205
///
199206
/// \return 本次请求的调用情况(如状态码等)
200-
CosResult GetObjectACL(const GetObjectACLReq& req, GetObjectACLResp* resp);
207+
CosResult GetObjectACL(const GetObjectACLReq& req, GetObjectACLResp* resp, bool change_backup_domain = false);
201208

202209
/// \brief 增加/替换Object下的ACL, 可以通过Header或者Body传入ACL信息
203210
/// 注意Header 和 Body 只能选择其中一种,否则响应返回会冲突
@@ -206,7 +213,7 @@ class ObjectOp : public BaseOp {
206213
/// \param resp PutObjectACL返回
207214
///
208215
/// \return 本次请求的调用情况(如状态码等)
209-
CosResult PutObjectACL(const PutObjectACLReq& req, PutObjectACLResp* resp);
216+
CosResult PutObjectACL(const PutObjectACLReq& req, PutObjectACLResp* resp, bool change_backup_domain = false);
210217

211218
/// \brief 已存在的Object设置标签.
212219
///
@@ -241,7 +248,7 @@ class ObjectOp : public BaseOp {
241248
/// \param resp PutObjectCopy返回
242249
///
243250
/// \return 本次请求的调用情况(如状态码等)
244-
CosResult PutObjectCopy(const PutObjectCopyReq& req, PutObjectCopyResp* resp);
251+
CosResult PutObjectCopy(const PutObjectCopyReq& req, PutObjectCopyResp* resp, bool change_backup_domain = false);
245252

246253
/// \brief 复制文件,实现将一个文件的分块内容从源路径复制到目标路径。
247254
/// 通过指定 x-cos-copy-source 来指定源文件,x-cos-copy-source-range
@@ -251,7 +258,7 @@ class ObjectOp : public BaseOp {
251258
/// \param response Copy返回
252259
///
253260
/// \return 返回HTTP请求的状态码及错误信息
254-
CosResult Copy(const CopyReq& req, CopyResp* resp);
261+
CosResult Copy(const CopyReq& req, CopyResp* resp, bool change_backup_domain = false);
255262

256263
/// \brief 对一个通过 COS 归档为 archive 类型的对象进行恢复
257264
///
@@ -260,14 +267,16 @@ class ObjectOp : public BaseOp {
260267
///
261268
/// \return 返回HTTP请求的状态码及错误信息
262269
CosResult PostObjectRestore(const PostObjectRestoreReq& req,
263-
PostObjectRestoreResp* resp);
270+
PostObjectRestoreResp* resp,
271+
bool change_backup_domain = false);
264272

265273
std::string GeneratePresignedUrl(const GeneratePresignedUrlReq& req);
266274

267-
CosResult OptionsObject(const OptionsObjectReq& req, OptionsObjectResp* resp);
275+
CosResult OptionsObject(const OptionsObjectReq& req, OptionsObjectResp* resp, bool change_backup_domain = false);
268276

269277
CosResult SelectObjectContent(const SelectObjectContentReq& req,
270-
SelectObjectContentResp* resp);
278+
SelectObjectContentResp* resp,
279+
bool change_backup_domain = false);
271280

272281
CosResult AppendObject(const AppendObjectReq& req, AppendObjectResp* resp);
273282

@@ -278,7 +287,8 @@ class ObjectOp : public BaseOp {
278287
///
279288
/// \return 返回HTTP请求的状态码及错误信息
280289
CosResult PutLiveChannel(const PutLiveChannelReq& req,
281-
PutLiveChannelResp* resp);
290+
PutLiveChannelResp* resp,
291+
bool change_backup_domain = false);
282292

283293
/// \brief 启用或禁用通道
284294
///
@@ -287,7 +297,8 @@ class ObjectOp : public BaseOp {
287297
///
288298
/// \return 返回HTTP请求的状态码及错误信息
289299
CosResult PutLiveChannelSwitch(const PutLiveChannelSwitchReq& req,
290-
PutLiveChannelSwitchResp* resp);
300+
PutLiveChannelSwitchResp* resp,
301+
bool change_backup_domain = false);
291302

292303
/// \brief 获取直播通道配置
293304
///
@@ -296,7 +307,8 @@ class ObjectOp : public BaseOp {
296307
///
297308
/// \return 返回HTTP请求的状态码及错误信息
298309
CosResult GetLiveChannel(const GetLiveChannelReq& req,
299-
GetLiveChannelResp* resp);
310+
GetLiveChannelResp* resp,
311+
bool change_backup_domain = false);
300312

301313
/// \brief 获取直播通道推流历史
302314
///
@@ -305,7 +317,8 @@ class ObjectOp : public BaseOp {
305317
///
306318
/// \return 返回HTTP请求的状态码及错误信息
307319
CosResult GetLiveChannelHistory(const GetLiveChannelHistoryReq& req,
308-
GetLiveChannelHistoryResp* resp);
320+
GetLiveChannelHistoryResp* resp,
321+
bool change_backup_domain = false);
309322

310323
/// \brief 获取直播通道推流状态
311324
///
@@ -314,7 +327,8 @@ class ObjectOp : public BaseOp {
314327
///
315328
/// \return 返回HTTP请求的状态码及错误信息
316329
CosResult GetLiveChannelStatus(const GetLiveChannelStatusReq& req,
317-
GetLiveChannelStatusResp* resp);
330+
GetLiveChannelStatusResp* resp,
331+
bool change_backup_domain = false);
318332

319333
/// \brief 删除直播通
320334
///
@@ -323,7 +337,8 @@ class ObjectOp : public BaseOp {
323337
///
324338
/// \return 返回HTTP请求的状态码及错误信息
325339
CosResult DeleteLiveChannel(const DeleteLiveChannelReq& req,
326-
DeleteLiveChannelResp* resp);
340+
DeleteLiveChannelResp* resp,
341+
bool change_backup_domain = false);
327342

328343
/// \brief 查询指定通道在指定时间段推流生成的播放列表
329344
///
@@ -332,7 +347,8 @@ class ObjectOp : public BaseOp {
332347
///
333348
/// \return 返回HTTP请求的状态码及错误信息
334349
CosResult GetLiveChannelVodPlaylist(const GetLiveChannelVodPlaylistReq& req,
335-
GetLiveChannelVodPlaylistResp* resp);
350+
GetLiveChannelVodPlaylistResp* resp,
351+
bool change_backup_domain = false);
336352

337353
/// \brief 指定通道生成一个可供点播例用的播放列表
338354
///
@@ -341,27 +357,31 @@ class ObjectOp : public BaseOp {
341357
///
342358
/// \return 返回HTTP请求的状态码及错误信息
343359
CosResult PostLiveChannelVodPlaylist(const PostLiveChannelVodPlaylistReq& req,
344-
PostLiveChannelVodPlaylistResp* resp);
360+
PostLiveChannelVodPlaylistResp* resp,
361+
bool change_backup_domain = false);
345362

346363
/// \brief 异步多线程下载,handler处理回调
347364
CosResult MultiThreadDownload(const GetObjectByFileReq& req,
348365
GetObjectByFileResp* resp,
349-
const SharedTransferHandler& handler = nullptr);
366+
const SharedTransferHandler& handler = nullptr,
367+
bool change_backup_domain = false);
350368

351369
/* Resumable接口 */
352370

353371
/// \brief 支持断点下载
354372
CosResult ResumableGetObject(const GetObjectByFileReq& req,
355373
GetObjectByFileResp* resp,
356-
const SharedTransferHandler& handler = nullptr);
374+
const SharedTransferHandler& handler = nullptr,
375+
bool change_backup_domain = false);
357376

358377
/*批量及目录操作接口*/
359378
CosResult PutObjects(const PutObjectsByDirectoryReq& req,
360-
PutObjectsByDirectoryResp* resp);
379+
PutObjectsByDirectoryResp* resp,
380+
bool change_backup_domain = false);
361381

362-
CosResult PutDirectory(const PutDirectoryReq& req, PutDirectoryResp* resp);
382+
CosResult PutDirectory(const PutDirectoryReq& req, PutDirectoryResp* resp, bool change_backup_domain = false);
363383

364-
CosResult MoveObject(const MoveObjectReq& req);
384+
CosResult MoveObject(const MoveObjectReq& req, bool change_backup_domain = false);
365385

366386
/*数据处理接口*/
367387

@@ -404,7 +424,8 @@ class ObjectOp : public BaseOp {
404424
const std::vector<std::string>& already_exist_parts,
405425
bool resume_flag, std::vector<std::string>* etags_ptr,
406426
std::vector<uint64_t>* part_numbers_ptr,
407-
const SharedTransferHandler& handler = nullptr);
427+
const SharedTransferHandler& handler = nullptr,
428+
bool change_backup_domain = false);
408429

409430
/// \brief 读取文件内容, 并返回读取的长度
410431
// uint64_t GetContent(const std::string& src, std::string* file_content) const;

include/trsf/transfer_handler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ enum class TransferStatus {
7878
COMPLETED,
7979
// Operation either failed or was canceled and a user deleted the multi-part
8080
// upload .
81+
RETRY,
8182
ABORTED
8283
};
8384

0 commit comments

Comments
 (0)