Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add bucket archive direct read api #429

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions oss/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2666,6 +2666,70 @@ func (client Client) DescribeRegionsXml(options ...Option) (string, error) {
return out, err
}

// PutBucketArchiveDirectRead set bucket's archive direct read
// bucketName the bucket name.
// archiveDirectRead the archive direct read content in struct format.
// error it's nil if no error, otherwise it's an error object.
func (client Client) PutBucketArchiveDirectRead(bucketName string, archiveDirectRead PutBucketArchiveDirectRead, options ...Option) error {
bs, err := xml.Marshal(archiveDirectRead)
if err != nil {
return err
}
err = client.PutBucketArchiveDirectReadXml(bucketName, string(bs), options...)
return err
}

// PutBucketArchiveDirectReadXml set bucket's archive direct read
// bucketName the bucket name.
// xmlData the archive direct read content in xml format
// error it's nil if no error, otherwise it's an error object.
func (client Client) PutBucketArchiveDirectReadXml(bucketName, xmlData string, options ...Option) error {
buffer := new(bytes.Buffer)
buffer.Write([]byte(xmlData))
contentType := http.DetectContentType(buffer.Bytes())
headers := map[string]string{}
headers[HTTPHeaderContentType] = contentType
params := map[string]interface{}{}
params["bucketArchiveDirectRead"] = nil
resp, err := client.do("PUT", bucketName, params, nil, buffer, options...)
if err != nil {
return err
}
defer resp.Body.Close()
return CheckRespCode(resp.StatusCode, []int{http.StatusOK})
}

// GetBucketArchiveDirectRead get bucket's archive direct read
// bucketName the bucket name.
// GetBucketStyleResult the style result of bucket.
// error it's nil if no error, otherwise it's an error object.
func (client Client) GetBucketArchiveDirectRead(bucketName string, options ...Option) (GetBucketArchiveDirectReadResult, error) {
var out GetBucketArchiveDirectReadResult
body, err := client.GetBucketArchiveDirectReadXml(bucketName, options...)
if err != nil {
return out, err
}
err = xmlUnmarshal(strings.NewReader(body), &out)
return out, err
}

// GetBucketArchiveDirectReadXml get bucket's archive direct read
// bucketName the bucket name.
// string the style result of bucket in xml format.
// error it's nil if no error, otherwise it's an error object.
func (client Client) GetBucketArchiveDirectReadXml(bucketName string, options ...Option) (string, error) {
params := map[string]interface{}{}
params["bucketArchiveDirectRead"] = nil
resp, err := client.do("GET", bucketName, params, nil, nil, options...)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
out := string(body)
return out, err
}

// LimitUploadSpeed set upload bandwidth limit speed,default is 0,unlimited
// upSpeed KB/s, 0 is unlimited,default is 0
// error it's nil if success, otherwise failure
Expand Down
41 changes: 41 additions & 0 deletions oss/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5881,3 +5881,44 @@ func (s *OssClientSuite) TestBucketResponseHeader(c *C) {
c.Assert(err, IsNil)
client.DeleteBucket(bucketName)
}

// TestBucketArchiveDirectRead
func (s *OssClientSuite) TestBucketArchiveDirectRead(c *C) {
var bucketNameTest = bucketNamePrefix + "-acc-" + RandLowStr(6)
client, err := New(endpoint, accessID, accessKey)
c.Assert(err, IsNil)

err = client.CreateBucket(bucketNameTest)
c.Assert(err, IsNil)
time.Sleep(3 * time.Second)

res, err := client.GetBucketArchiveDirectRead(bucketNameTest)
c.Assert(err, IsNil)
c.Assert(res.Enabled, Equals, false)

var req PutBucketArchiveDirectRead
req.Enabled = true
err = client.PutBucketArchiveDirectRead(bucketNameTest, req)
c.Assert(err, IsNil)

time.Sleep(3 * time.Second)

res, err = client.GetBucketArchiveDirectRead(bucketNameTest)
c.Assert(err, IsNil)
c.Assert(res.Enabled, Equals, true)

req.Enabled = false
err = client.PutBucketArchiveDirectRead(bucketNameTest, req)
c.Assert(err, IsNil)

res, err = client.GetBucketArchiveDirectRead(bucketNameTest)
c.Assert(err, IsNil)
c.Assert(res.Enabled, Equals, false)

err = client.PutBucketArchiveDirectRead("bucket-not-exist", req)
c.Assert(err, NotNil)

_, err = client.GetBucketArchiveDirectRead("bucket-not-exist")
c.Assert(err, NotNil)

}
2 changes: 1 addition & 1 deletion oss/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ var signKeyList = []string{"acl", "uploads", "location", "cors",
"x-oss-enable-md5", "x-oss-enable-sha1", "x-oss-enable-sha256",
"x-oss-hash-ctx", "x-oss-md5-ctx", "transferAcceleration",
"regionList", "cloudboxes", "x-oss-ac-source-ip", "x-oss-ac-subnet-mask", "x-oss-ac-vpc-id", "x-oss-ac-forward-allow",
"metaQuery", "resourceGroup", "rtc", "x-oss-async-process", "responseHeader",
"metaQuery", "resourceGroup", "rtc", "x-oss-async-process", "responseHeader", "bucketArchiveDirectRead",
}

// init initializes Conn
Expand Down
12 changes: 12 additions & 0 deletions oss/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -1693,3 +1693,15 @@ type ResponseHeaderRuleFilters struct {
type ResponseHeaderRuleHeaders struct {
Header []string `xml:"Header,omitempty"`
}

// GetBucketArchiveDirectReadResult define config for get bucket's archive direct read
type GetBucketArchiveDirectReadResult BucketArchiveDirectReadXml

// PutBucketArchiveDirectRead define the xml of bucket's archive direct read
type PutBucketArchiveDirectRead BucketArchiveDirectReadXml

// BucketArchiveDirectReadXml define get bucket's archive direct read
type BucketArchiveDirectReadXml struct {
XMLName xml.Name `xml:"ArchiveDirectReadConfiguration"`
Enabled bool `xml:"Enabled"`
}
27 changes: 27 additions & 0 deletions oss/type_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2038,3 +2038,30 @@ func (s *OssTypeSuite) TestPutBucketCORS(c *C) {
c.Assert(err, IsNil)
c.Assert(string(bs), Equals, "<CORSConfiguration><CORSRule><AllowedOrigin>*</AllowedOrigin><AllowedMethod>PUT</AllowedMethod><AllowedMethod>GET</AllowedMethod><AllowedMethod>POST</AllowedMethod><MaxAgeSeconds>100</MaxAgeSeconds></CORSRule><CORSRule><AllowedOrigin>http://www.a.com</AllowedOrigin><AllowedOrigin>http://www.b.com</AllowedOrigin><AllowedMethod>GET</AllowedMethod><AllowedHeader>Authorization</AllowedHeader><ExposeHeader>x-oss-test</ExposeHeader><ExposeHeader>x-oss-test1</ExposeHeader><MaxAgeSeconds>100</MaxAgeSeconds></CORSRule><ResponseVary>true</ResponseVary></CORSConfiguration>")
}

func (s *OssTypeSuite) TestPutBucketArchiveDirectRead(c *C) {
var put PutBucketArchiveDirectRead
put.Enabled = true
xmlData, err := xml.Marshal(put)
c.Assert(err, IsNil)
c.Assert(string(xmlData), Equals, "<ArchiveDirectReadConfiguration><Enabled>true</Enabled></ArchiveDirectReadConfiguration>")

var put1 PutBucketArchiveDirectRead
put1.Enabled = false
xmlData1, err := xml.Marshal(put1)
c.Assert(err, IsNil)
c.Assert(string(xmlData1), Equals, "<ArchiveDirectReadConfiguration><Enabled>false</Enabled></ArchiveDirectReadConfiguration>")
}

func (s *OssTypeSuite) TestGetBucketArchiveDirectReadResult(c *C) {
var repResult GetBucketArchiveDirectReadResult
xmlData := "<ArchiveDirectReadConfiguration><Enabled>true</Enabled></ArchiveDirectReadConfiguration>"
err := xmlUnmarshal(strings.NewReader(xmlData), &repResult)
c.Assert(err, IsNil)
c.Assert(repResult.Enabled, Equals, true)

xmlData = "<ArchiveDirectReadConfiguration><Enabled>false</Enabled></ArchiveDirectReadConfiguration>"
err = xmlUnmarshal(strings.NewReader(xmlData), &repResult)
c.Assert(err, IsNil)
c.Assert(repResult.Enabled, Equals, false)
}
77 changes: 39 additions & 38 deletions sample.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,44 +12,45 @@ import (

// sampleMap contains all samples
var sampleMap = map[string]interface{}{
"CreateBucketSample": sample.CreateBucketSample,
"NewBucketSample": sample.NewBucketSample,
"ListBucketsSample": sample.ListBucketsSample,
"BucketInfoSample": sample.BucketInfoSample,
"BucketACLSample": sample.BucketACLSample,
"BucketLifecycleSample": sample.BucketLifecycleSample,
"BucketRefererSample": sample.BucketRefererSample,
"BucketStatSample": sample.BucketStatSample,
"BucketLoggingSample": sample.BucketLoggingSample,
"BucketWebsiteSample": sample.BucketWebsiteSample,
"BucketCORSSample": sample.BucketCORSSample,
"BucketPolicySample": sample.BucketPolicySample,
"BucketrRequestPaymentSample": sample.BucketrRequestPaymentSample,
"BucketQoSInfoSample": sample.BucketQoSInfoSample,
"BucketInventorySample": sample.BucketInventorySample,
"BucketDataIndexingSample": sample.BucketMetaQuerySample,
"BucketTaggingSample": sample.BucketTaggingSample,
"BucketAccessMonitorSample": sample.BucketAccessMonitorSample,
"BucketResourceGroupSample": sample.BucketResourceGroupSample,
"BucketCnameSample": sample.BucketCnameSample,
"BucketStyleSample": sample.BucketStyleSample,
"BucketReplicationSample": sample.BucketReplicationSample,
"BucketResponseHeaderSample": sample.BucketResponseHeaderSample,
"ObjectACLSample": sample.ObjectACLSample,
"ObjectMetaSample": sample.ObjectMetaSample,
"ListObjectsSample": sample.ListObjectsSample,
"DeleteObjectSample": sample.DeleteObjectSample,
"AppendObjectSample": sample.AppendObjectSample,
"CopyObjectSample": sample.CopyObjectSample,
"PutObjectSample": sample.PutObjectSample,
"GetObjectSample": sample.GetObjectSample,
"CnameSample": sample.CnameSample,
"SignURLSample": sample.SignURLSample,
"ArchiveSample": sample.ArchiveSample,
"ObjectTaggingSample": sample.ObjectTaggingSample,
"BucketEncryptionSample": sample.BucketEncryptionSample,
"SelectObjectSample": sample.SelectObjectSample,
"DescribeRegionsSample": sample.DescribeRegionsSample,
"CreateBucketSample": sample.CreateBucketSample,
"NewBucketSample": sample.NewBucketSample,
"ListBucketsSample": sample.ListBucketsSample,
"BucketInfoSample": sample.BucketInfoSample,
"BucketACLSample": sample.BucketACLSample,
"BucketLifecycleSample": sample.BucketLifecycleSample,
"BucketRefererSample": sample.BucketRefererSample,
"BucketStatSample": sample.BucketStatSample,
"BucketLoggingSample": sample.BucketLoggingSample,
"BucketWebsiteSample": sample.BucketWebsiteSample,
"BucketCORSSample": sample.BucketCORSSample,
"BucketPolicySample": sample.BucketPolicySample,
"BucketrRequestPaymentSample": sample.BucketrRequestPaymentSample,
"BucketQoSInfoSample": sample.BucketQoSInfoSample,
"BucketInventorySample": sample.BucketInventorySample,
"BucketDataIndexingSample": sample.BucketMetaQuerySample,
"BucketTaggingSample": sample.BucketTaggingSample,
"BucketAccessMonitorSample": sample.BucketAccessMonitorSample,
"BucketResourceGroupSample": sample.BucketResourceGroupSample,
"BucketCnameSample": sample.BucketCnameSample,
"BucketStyleSample": sample.BucketStyleSample,
"BucketReplicationSample": sample.BucketReplicationSample,
"BucketResponseHeaderSample": sample.BucketResponseHeaderSample,
"BucketArchiveDirectReadSample": sample.BucketArchiveDirectReadSample,
"ObjectACLSample": sample.ObjectACLSample,
"ObjectMetaSample": sample.ObjectMetaSample,
"ListObjectsSample": sample.ListObjectsSample,
"DeleteObjectSample": sample.DeleteObjectSample,
"AppendObjectSample": sample.AppendObjectSample,
"CopyObjectSample": sample.CopyObjectSample,
"PutObjectSample": sample.PutObjectSample,
"GetObjectSample": sample.GetObjectSample,
"CnameSample": sample.CnameSample,
"SignURLSample": sample.SignURLSample,
"ArchiveSample": sample.ArchiveSample,
"ObjectTaggingSample": sample.ObjectTaggingSample,
"BucketEncryptionSample": sample.BucketEncryptionSample,
"SelectObjectSample": sample.SelectObjectSample,
"DescribeRegionsSample": sample.DescribeRegionsSample,
}

func main() {
Expand Down
46 changes: 46 additions & 0 deletions sample/bucket_archivedirectread.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package sample

import (
"fmt"

"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

// BucketArchiveDirectReadSample shows how to set, get the bucket archive direct read.
func BucketArchiveDirectReadSample() {
// New client
client, err := oss.New(endpoint, accessID, accessKey)
if err != nil {
HandleError(err)
}

// Create the bucket with default parameters
err = client.CreateBucket(bucketName)
if err != nil {
HandleError(err)
}

// Set bucket's archive direct read
var req oss.PutBucketArchiveDirectRead
req.Enabled = true
err = client.PutBucketArchiveDirectRead(bucketName, req)
if err != nil {
HandleError(err)
}
fmt.Println("Set Bucket Archive Direct Read Success!")

// Get bucket's archive direct read
res, err := client.GetBucketArchiveDirectRead(bucketName)
if err != nil {
HandleError(err)
}
fmt.Println("Bucket Archive Direct Read Enabled:", res.Enabled)

// Delete bucket
err = client.DeleteBucket(bucketName)
if err != nil {
HandleError(err)
}

fmt.Println("BucketArchiveDirectReadSample completed")
}