update bucket lifecycle

This commit is contained in:
jojoliang
2021-06-02 11:53:53 +08:00
parent 3cf6b8cdae
commit cee6b930c2
7 changed files with 93 additions and 28 deletions

View File

@@ -20,8 +20,9 @@ type BucketLifecycleFilter struct {
// BucketLifecycleExpiration is the param of BucketLifecycleRule // BucketLifecycleExpiration is the param of BucketLifecycleRule
type BucketLifecycleExpiration struct { type BucketLifecycleExpiration struct {
Date string `xml:"Date,omitempty"` Date string `xml:"Date,omitempty"`
Days int `xml:"Days,omitempty"` Days int `xml:"Days,omitempty"`
ExpiredObjectDeleteMarker bool `xml:"ExpiredObjectDeleteMarker,omitempty"`
} }
// BucketLifecycleTransition is the param of BucketLifecycleRule // BucketLifecycleTransition is the param of BucketLifecycleRule
@@ -31,6 +32,11 @@ type BucketLifecycleTransition struct {
StorageClass string StorageClass string
} }
type BucketLifecycleNoncurrentVersion struct {
NoncurrentDays int `xml:"NoncurrentDays,omitempty"`
StorageClass string `xml:"StorageClass,omitempty"`
}
// BucketLifecycleAbortIncompleteMultipartUpload is the param of BucketLifecycleRule // BucketLifecycleAbortIncompleteMultipartUpload is the param of BucketLifecycleRule
type BucketLifecycleAbortIncompleteMultipartUpload struct { type BucketLifecycleAbortIncompleteMultipartUpload struct {
DaysAfterInitiation int `xml:"DaysAfterInitiation,omitempty"` DaysAfterInitiation int `xml:"DaysAfterInitiation,omitempty"`
@@ -41,9 +47,11 @@ type BucketLifecycleRule struct {
ID string `xml:"ID,omitempty"` ID string `xml:"ID,omitempty"`
Status string Status string
Filter *BucketLifecycleFilter `xml:"Filter,omitempty"` Filter *BucketLifecycleFilter `xml:"Filter,omitempty"`
Transition *BucketLifecycleTransition `xml:"Transition,omitempty"` Transition []BucketLifecycleTransition `xml:"Transition,omitempty"`
Expiration *BucketLifecycleExpiration `xml:"Expiration,omitempty"` Expiration *BucketLifecycleExpiration `xml:"Expiration,omitempty"`
AbortIncompleteMultipartUpload *BucketLifecycleAbortIncompleteMultipartUpload `xml:"AbortIncompleteMultipartUpload,omitempty"` AbortIncompleteMultipartUpload *BucketLifecycleAbortIncompleteMultipartUpload `xml:"AbortIncompleteMultipartUpload,omitempty"`
NoncurrentVersionTransition []BucketLifecycleNoncurrentVersion `xml:"NoncurrentVersionTransition,omitempty"`
NoncurrentVersionExpiration *BucketLifecycleNoncurrentVersion `xml:"NoncurrentVersionExpiration,omitempty"`
} }
// BucketGetLifecycleResult is the result of BucketGetLifecycle // BucketGetLifecycleResult is the result of BucketGetLifecycle

View File

@@ -36,6 +36,20 @@ func TestBucketService_GetLifecycle(t *testing.T) {
<Days>10</Days> <Days>10</Days>
<StorageClass>Standard</StorageClass> <StorageClass>Standard</StorageClass>
</Transition> </Transition>
<Expiration>
<Days>10</Days>
</Expiration>
<NoncurrentVersionTransition>
<NoncurrentDays>90</NoncurrentDays>
<StorageClass>ARCHIVE</StorageClass>
</NoncurrentVersionTransition>
<NoncurrentVersionTransition>
<NoncurrentDays>180</NoncurrentDays>
<StorageClass>DEEP_ARCHIVE</StorageClass>
</NoncurrentVersionTransition>
<NoncurrentVersionExpiration>
<NoncurrentDays>360</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule> </Rule>
<Rule> <Rule>
<ID>123422</ID> <ID>123422</ID>
@@ -68,8 +82,24 @@ func TestBucketService_GetLifecycle(t *testing.T) {
}, },
}, },
}, },
Status: "Enabled", Status: "Enabled",
Transition: &BucketLifecycleTransition{Days: 10, StorageClass: "Standard"}, Transition: []BucketLifecycleTransition{
{Days: 10, StorageClass: "Standard"},
},
Expiration: &BucketLifecycleExpiration{Days: 10},
NoncurrentVersionExpiration: &BucketLifecycleNoncurrentVersion{
NoncurrentDays: 360,
},
NoncurrentVersionTransition: []BucketLifecycleNoncurrentVersion{
{
NoncurrentDays: 90,
StorageClass: "ARCHIVE",
},
{
NoncurrentDays: 180,
StorageClass: "DEEP_ARCHIVE",
},
},
}, },
{ {
ID: "123422", ID: "123422",
@@ -92,10 +122,12 @@ func TestBucketService_PutLifecycle(t *testing.T) {
opt := &BucketPutLifecycleOptions{ opt := &BucketPutLifecycleOptions{
Rules: []BucketLifecycleRule{ Rules: []BucketLifecycleRule{
{ {
ID: "1234", ID: "1234",
Filter: &BucketLifecycleFilter{Prefix: "test"}, Filter: &BucketLifecycleFilter{Prefix: "test"},
Status: "Enabled", Status: "Enabled",
Transition: &BucketLifecycleTransition{Days: 10, StorageClass: "Standard"}, Transition: []BucketLifecycleTransition{
{Days: 10, StorageClass: "Standard"},
},
}, },
{ {
ID: "123422", ID: "123422",

View File

@@ -355,9 +355,11 @@ func (s *CosTestSuite) TestPutGetDeleteLifeCycle() {
ID: "1234", ID: "1234",
Filter: &cos.BucketLifecycleFilter{Prefix: "test"}, Filter: &cos.BucketLifecycleFilter{Prefix: "test"},
Status: "Enabled", Status: "Enabled",
Transition: &cos.BucketLifecycleTransition{ Transition: []cos.BucketLifecycleTransition{
Days: 10, {
StorageClass: "Standard", Days: 10,
StorageClass: "Standard",
},
}, },
}, },
}, },

View File

@@ -53,7 +53,6 @@ func main() {
opt := &cos.BucketPutAccelerateOptions{ opt := &cos.BucketPutAccelerateOptions{
Status: "Enabled", Status: "Enabled",
Type: "COS",
} }
_, err = c.Bucket.PutAccelerate(context.Background(), opt) _, err = c.Bucket.PutAccelerate(context.Background(), opt)
log_status(err) log_status(err)

View File

@@ -13,7 +13,7 @@ import (
) )
func main() { func main() {
u, _ := url.Parse("https://test-1253846586.cos.ap-guangzhou.myqcloud.com") u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{ b := &cos.BaseURL{
BucketURL: u, BucketURL: u,
} }
@@ -35,6 +35,13 @@ func main() {
panic(err) panic(err)
} }
for _, r := range v.Rules { for _, r := range v.Rules {
fmt.Printf("%s, %s\n", r.Filter.Prefix, r.Status) fmt.Printf("%+v\n", r.ID)
fmt.Printf("%+v\n", r.Filter)
fmt.Printf("%+v\n", r.Status)
fmt.Printf("%+v\n", r.Transition)
fmt.Printf("%+v\n", r.Expiration)
fmt.Printf("%+v\n", r.NoncurrentVersionExpiration)
fmt.Printf("%+v\n", r.NoncurrentVersionTransition)
fmt.Printf("%+v\n", r.AbortIncompleteMultipartUpload)
} }
} }

View File

@@ -12,7 +12,7 @@ import (
) )
func main() { func main() {
u, _ := url.Parse("https://testhuanan-1253846586.cos.ap-guangzhou.myqcloud.com") u, _ := url.Parse("https://test-1259654469.cos.ap-guangzhou.myqcloud.com")
b := &cos.BaseURL{ b := &cos.BaseURL{
BucketURL: u, BucketURL: u,
} }
@@ -35,18 +35,34 @@ func main() {
ID: "1234", ID: "1234",
Filter: &cos.BucketLifecycleFilter{Prefix: "test"}, Filter: &cos.BucketLifecycleFilter{Prefix: "test"},
Status: "Enabled", Status: "Enabled",
Transition: &cos.BucketLifecycleTransition{ Transition: []cos.BucketLifecycleTransition{
Days: 10, {
StorageClass: "Standard", Days: 30,
StorageClass: "STANDARD_IA",
},
{
Days: 90,
StorageClass: "ARCHIVE",
},
}, },
},
{
ID: "123422",
// If used for all objecs set Prefix:""
Filter: &cos.BucketLifecycleFilter{Prefix: "gg"},
Status: "Disabled",
Expiration: &cos.BucketLifecycleExpiration{ Expiration: &cos.BucketLifecycleExpiration{
Days: 10, Days: 360,
},
NoncurrentVersionExpiration: &cos.BucketLifecycleNoncurrentVersion{
NoncurrentDays: 360,
},
NoncurrentVersionTransition: []cos.BucketLifecycleNoncurrentVersion{
{
NoncurrentDays: 90,
StorageClass: "ARCHIVE",
},
{
NoncurrentDays: 180,
StorageClass: "DEEP_ARCHIVE",
},
},
AbortIncompleteMultipartUpload: &cos.BucketLifecycleAbortIncompleteMultipartUpload{
DaysAfterInitiation: 90,
}, },
}, },
}, },

View File

@@ -401,7 +401,6 @@ func (osr *ObjectSelectResponse) fixedLengthRead(p []byte, read_timeout int64) (
timeout := time.Duration(read_timeout) timeout := time.Duration(read_timeout)
r := osr.Body r := osr.Body
ch := make(chan chanReadIO, 1) ch := make(chan chanReadIO, 1)
defer close(ch)
go func(p []byte) { go func(p []byte) {
var needLen int var needLen int
readChan := chanReadIO{} readChan := chanReadIO{}
@@ -412,6 +411,7 @@ func (osr *ObjectSelectResponse) fixedLengthRead(p []byte, read_timeout int64) (
if err != nil { if err != nil {
readChan.err = err readChan.err = err
ch <- readChan ch <- readChan
close(ch)
return return
} }
@@ -420,11 +420,12 @@ func (osr *ObjectSelectResponse) fixedLengthRead(p []byte, read_timeout int64) (
} }
} }
ch <- readChan ch <- readChan
close(ch)
}(p) }(p)
select { select {
case <-time.After(time.Second * timeout): case <-time.After(time.Second * timeout):
return 0, fmt.Errorf("requestId: %s, readLen timeout, timeout is %d(second),need read:%d", "sr.Headers.Get(HTTPHeaderOssRequestID)", timeout, len(p)) return 0, fmt.Errorf("requestId: %s, readLen timeout, timeout is %d(second),need read:%d", osr.Headers.Get("x-cos-request-id"), timeout, len(p))
case result := <-ch: case result := <-ch:
return result.readLen, result.err return result.readLen, result.err
} }