Skip to content

Commit 3054250

Browse files
authored
Add archive ir (#120)
1 parent bdad4bc commit 3054250

File tree

7 files changed

+75
-22
lines changed

7 files changed

+75
-22
lines changed

client/client.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,11 +246,18 @@ func parseError(e *ErrorInfo, r io.Reader) {
246246
}
247247

248248
func ResponseError(resp *http.Response) error {
249-
250249
e := &ErrorInfo{
251250
Reqid: resp.Header.Get("X-Reqid"),
252251
Code: resp.StatusCode,
253252
}
253+
254+
defer func() {
255+
if resp.Body != nil {
256+
io.Copy(ioutil.Discard, resp.Body)
257+
resp.Body.Close()
258+
}
259+
}()
260+
254261
if resp.StatusCode > 299 {
255262
if resp.ContentLength != 0 {
256263
ct, ok := resp.Header["Content-Type"]

storage/bucket.go

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ type FileInfo struct {
4747
* 1 表示低频存储
4848
* 2 表示归档存储
4949
* 3 表示深度归档存储
50+
* 4 表示归档存储直读
5051
*/
5152
Type int `json:"type"`
5253

@@ -102,6 +103,16 @@ type FileInfo struct {
102103
*/
103104
TransitionToIA int64 `json:"transitionToIA"`
104105

106+
/**
107+
* 文件生命周期中转为归档直读存储的日期,int64 类型,Unix 时间戳格式 ,具体日期计算参考 生命周期管理。
108+
* 文件在设置转归档直读后才会返回该字段(通过生命周期规则设置文件转归档直读,仅对该功能发布后满足规则条件新上传文件返回该字段;
109+
* 历史文件想要返回该字段需要在功能发布后可通过 修改文件生命周期 API 指定转归档直读时间;对于已经设置过转归档直读时间的历史文
110+
* 件,到期都会正常执行,只是服务端没有该字段返回)
111+
*
112+
* 例如:值为1568736000的时间,表示文件会在2019/9/18当天转为归档直读存储类型。
113+
*/
114+
TransitionToArchiveIR int64 `json:"transitionToArchiveIR"`
115+
105116
/**
106117
* 文件生命周期中转为归档存储的日期,int64 类型,Unix 时间戳格式 ,具体日期计算参考 生命周期管理。
107118
* 文件在设置转归档后才会返回该字段(通过生命周期规则设置文件转归档,仅对该功能发布后满足规则条件新上传文件返回该字段;
@@ -128,12 +139,21 @@ type FileInfo struct {
128139

129140
func (f *FileInfo) String() string {
130141
str := ""
131-
str += fmt.Sprintf("Hash: %s\n", f.Hash)
132-
str += fmt.Sprintf("Fsize: %d\n", f.Fsize)
133-
str += fmt.Sprintf("PutTime: %d\n", f.PutTime)
134-
str += fmt.Sprintf("MimeType: %s\n", f.MimeType)
135-
str += fmt.Sprintf("Type: %d\n", f.Type)
136-
str += fmt.Sprintf("Status: %d\n", f.Status)
142+
str += fmt.Sprintf("Hash: %s\n", f.Hash)
143+
str += fmt.Sprintf("Fsize: %d\n", f.Fsize)
144+
str += fmt.Sprintf("PutTime: %d\n", f.PutTime)
145+
str += fmt.Sprintf("MimeType: %s\n", f.MimeType)
146+
str += fmt.Sprintf("Type: %d\n", f.Type)
147+
str += fmt.Sprintf("RestoreStatus: %d\n", f.RestoreStatus)
148+
str += fmt.Sprintf("Status: %d\n", f.Status)
149+
str += fmt.Sprintf("Md5: %s\n", f.Md5)
150+
str += fmt.Sprintf("EndUser: %s\n", f.EndUser)
151+
str += fmt.Sprintf("Expiration: %d\n", f.Expiration)
152+
str += fmt.Sprintf("TransitionToIA: %d\n", f.TransitionToIA)
153+
str += fmt.Sprintf("TransitionToArchiveIR: %d\n", f.TransitionToArchiveIR)
154+
str += fmt.Sprintf("TransitionToArchive: %d\n", f.TransitionToArchive)
155+
str += fmt.Sprintf("TransitionToDeepArchive: %d\n", f.TransitionToDeepArchive)
156+
str += fmt.Sprintf("MetaData: %s\n", f.MetaData)
137157
return str
138158
}
139159

@@ -176,6 +196,7 @@ type BatchOpRet struct {
176196
* 1 表示低频存储
177197
* 2 表示归档存储
178198
* 3 表示深度归档存储
199+
* 4 表示归档直读存储
179200
*/
180201
Type int `json:"type"`
181202

@@ -226,6 +247,16 @@ type BatchOpRet struct {
226247
*/
227248
TransitionToIA *int64 `json:"transitionToIA"`
228249

250+
/**
251+
* 文件生命周期中转为归档直读存储的日期,int64 类型,Unix 时间戳格式 ,具体日期计算参考 生命周期管理。
252+
* 文件在设置转归档直读后才会返回该字段(通过生命周期规则设置文件转归档直读,仅对该功能发布后满足规则条件新上传文件返回该字段;
253+
* 历史文件想要返回该字段需要在功能发布后可通过 修改文件生命周期 API 指定转归档直读时间;对于已经设置过转归档直读时间的历史文
254+
* 件,到期都会正常执行,只是服务端没有该字段返回)
255+
*
256+
* 例如:值为1568736000的时间,表示文件会在2019/9/18当天转为归档直读存储类型。
257+
*/
258+
TransitionToArchiveIR int64 `json:"transitionToArchiveIR"`
259+
229260
/**
230261
* 文件生命周期中转为归档存储的日期,Unix 时间戳格式 ,具体日期计算参考 生命周期管理。
231262
* 文件在设置转归档后才会返回该字段(通过生命周期规则设置文件转归档,仅对该功能发布后满足规则条件新上传文件返回该字段;
@@ -533,7 +564,7 @@ func (m *BucketManager) ChangeMimeAndMeta(bucket, key, newMime string, metas map
533564
return
534565
}
535566

536-
// ChangeType 用来更新文件的存储类型,0 表示普通存储,1 表示低频存储,2 表示归档存储,3 表示深度归档存储
567+
// ChangeType 用来更新文件的存储类型,0 表示普通存储,1 表示低频存储,2 表示归档存储,3 表示深度归档存储,4 表示归档直读存储
537568
func (m *BucketManager) ChangeType(bucket, key string, fileType int) (err error) {
538569
reqHost, reqErr := m.RsReqHost(bucket)
539570
if reqErr != nil {
@@ -889,8 +920,8 @@ func (m *BucketManager) ApiHost(bucket string) (apiHost string, err error) {
889920

890921
func (m *BucketManager) Zone(bucket string) (z *Zone, err error) {
891922

892-
if m.Cfg.Zone != nil {
893-
z = m.Cfg.Zone
923+
z = m.Cfg.GetRegion()
924+
if z != nil {
894925
return
895926
}
896927

storage/bucket_get_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ func TestGet(t *testing.T) {
7272
t.Logf("Get test error, %s", err)
7373
}
7474

75+
defer func() {
76+
resp.Close()
77+
}()
78+
7579
body, err = io.ReadAll(resp.Body)
7680
if err != nil {
7781
t.Logf("Get test read body error, %s", err)

storage/bucket_list.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
"github.com/qiniu/go-sdk/v7/auth"
87
"net/url"
98
"strconv"
9+
10+
"github.com/qiniu/go-sdk/v7/auth"
1011
)
1112

1213
// ListItem 为文件列举的返回值
@@ -38,6 +39,7 @@ type ListItem struct {
3839
* 1 表示低频存储
3940
* 2 表示归档存储
4041
* 3 表示深度归档存储
42+
* 4 表示归档存储直读
4143
*/
4244
Type int `json:"type"`
4345

storage/bucket_test.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,11 @@ func TestStat(t *testing.T) {
216216
if e := bucketManager.AddBucketLifeCycleRule(testBucket, &BucketLifeCycleRule{
217217
Name: ruleName,
218218
Prefix: "",
219-
ToLineAfterDays: 1,
220-
ToArchiveAfterDays: 2,
221-
ToDeepArchiveAfterDays: 3,
222-
DeleteAfterDays: 4,
219+
ToLineAfterDays: 10,
220+
ToArchiveIRAfterDays: 20,
221+
ToArchiveAfterDays: 30,
222+
ToDeepArchiveAfterDays: 40,
223+
DeleteAfterDays: 50,
223224
}); e != nil {
224225
t.Logf("Stat AddBucketLifeCycleRule() error, %s", e)
225226
t.Fail()
@@ -235,7 +236,8 @@ func TestStat(t *testing.T) {
235236
}
236237
client.DebugMode = true
237238
if info, e := bucketManager.Stat(testBucket, copyKey); e != nil ||
238-
len(info.Hash) == 0 || info.Expiration == 0 {
239+
len(info.Hash) == 0 || info.Expiration == 0 || info.TransitionToArchive == 0 ||
240+
info.TransitionToIA == 0 || info.TransitionToArchiveIR == 0 || info.TransitionToDeepArchive == 0 {
239241
t.Logf("3 Stat() error, %v", e)
240242
t.Fail()
241243
} else {
@@ -783,6 +785,7 @@ func TestBucketLifeCycleRule(t *testing.T) {
783785
Prefix: "testPutFileKey",
784786
DeleteAfterDays: 13,
785787
ToLineAfterDays: 1,
788+
ToArchiveIRAfterDays: 2,
786789
ToArchiveAfterDays: 6,
787790
ToDeepArchiveAfterDays: 10,
788791
})
@@ -798,7 +801,7 @@ func TestBucketLifeCycleRule(t *testing.T) {
798801
ruleExists := false
799802
for _, r := range rules {
800803
if r.Name == "golangIntegrationTest" && r.Prefix == "testPutFileKey" && r.DeleteAfterDays == 13 &&
801-
r.ToLineAfterDays == 1 && r.ToArchiveAfterDays == 6 && r.ToDeepArchiveAfterDays == 10 {
804+
r.ToLineAfterDays == 1 && r.ToArchiveIRAfterDays == 2 && r.ToArchiveAfterDays == 6 && r.ToDeepArchiveAfterDays == 10 {
802805
ruleExists = true
803806
break
804807
}
@@ -812,6 +815,7 @@ func TestBucketLifeCycleRule(t *testing.T) {
812815
Prefix: "testPutFileKey",
813816
DeleteAfterDays: 22,
814817
ToLineAfterDays: 11,
818+
ToArchiveIRAfterDays: 12,
815819
ToArchiveAfterDays: 16,
816820
ToDeepArchiveAfterDays: 20,
817821
})
@@ -827,7 +831,7 @@ func TestBucketLifeCycleRule(t *testing.T) {
827831
ruleExists = false
828832
for _, r := range rules {
829833
if r.Name == "golangIntegrationTest" && r.Prefix == "testPutFileKey" && r.DeleteAfterDays == 22 &&
830-
r.ToLineAfterDays == 11 && r.ToArchiveAfterDays == 16 && r.ToDeepArchiveAfterDays == 20 {
834+
r.ToLineAfterDays == 11 && r.ToArchiveIRAfterDays == 12 && r.ToArchiveAfterDays == 16 && r.ToDeepArchiveAfterDays == 20 {
831835
ruleExists = true
832836
break
833837
}

storage/token.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ type PutPolicy struct {
108108
// !application/json;text/plain 表示禁止上传 json 文本和纯文本。注意最前面的感叹号!
109109
MimeLimit string `json:"mimeLimit,omitempty"`
110110

111-
// 资源的存储类型,0表示标准存储,1 表示低频存储,2 表示归档存储,3 表示深度归档存储。
111+
// 资源的存储类型,0表示标准存储,1 表示低频存储,2 表示归档存储,3 表示深度归档存储,4 表示归档直读存储
112112
FileType int `json:"fileType,omitempty"`
113113

114114
CallbackFetchKey uint8 `json:"callbackFetchKey,omitempty"`

storage/uc.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,18 +289,21 @@ type BucketLifeCycleRule struct {
289289

290290
// 在多少天后转低频存储
291291
// 0 - 表示不转低频
292-
// < 0 表示上传的文件立即使用低频存储
293292
// > 0 表示多少天后转低频存储
294293
ToLineAfterDays int `json:"to_line_after_days"`
295294

295+
// 指定文件上传多少天后转归档直读存储。
296+
// 0 表示不转归档直读存储,
297+
// > 0 表示多少天后转归档直读存储
298+
ToArchiveIRAfterDays int `json:"to_archive_ir_after_days"`
299+
296300
// 指定文件上传多少天后转归档存储。
297301
// 0 表示不转归档存储,
298-
// < 0 表示上传的文件立即变归档存储
299302
// > 0 表示多少天后转归档存储
300303
ToArchiveAfterDays int `json:"to_archive_after_days"`
301304

302305
// 指定文件上传多少天后转深度归档存储。
303-
// < 0 表示上传的文件立即变深度归档存储
306+
// 0 表示不转深度归档存储
304307
// > 0 表示多少天后转深度归档存储
305308
ToDeepArchiveAfterDays int `json:"to_deep_archive_after_days"`
306309
}
@@ -316,6 +319,7 @@ func (m *BucketManager) AddBucketLifeCycleRule(bucketName string, lifeCycleRule
316319
params["delete_after_days"] = []string{strconv.Itoa(lifeCycleRule.DeleteAfterDays)}
317320
params["to_ia_after_days"] = []string{strconv.Itoa(lifeCycleRule.ToLineAfterDays)}
318321
params["to_archive_after_days"] = []string{strconv.Itoa(lifeCycleRule.ToArchiveAfterDays)}
322+
params["to_archive_ir_after_days"] = []string{strconv.Itoa(lifeCycleRule.ToArchiveIRAfterDays)}
319323
params["to_deep_archive_after_days"] = []string{strconv.Itoa(lifeCycleRule.ToDeepArchiveAfterDays)}
320324

321325
reqURL := getUcHost(m.Cfg.UseHTTPS) + "/rules/add"
@@ -355,6 +359,7 @@ func (m *BucketManager) UpdateBucketLifeCycleRule(bucketName string, rule *Bucke
355359
params["delete_after_days"] = []string{strconv.Itoa(rule.DeleteAfterDays)}
356360
params["to_line_after_days"] = []string{strconv.Itoa(rule.ToLineAfterDays)}
357361
params["to_archive_after_days"] = []string{strconv.Itoa(rule.ToArchiveAfterDays)}
362+
params["to_archive_ir_after_days"] = []string{strconv.Itoa(rule.ToArchiveIRAfterDays)}
358363
params["to_deep_archive_after_days"] = []string{strconv.Itoa(rule.ToDeepArchiveAfterDays)}
359364

360365
reqURL := getUcHost(m.Cfg.UseHTTPS) + "/rules/update"

0 commit comments

Comments
 (0)