Use the OSS Go SDK V2 InvokeOperation API to manage Quality of Service (QoS) for resource pools. This page covers bandwidth throttling for buckets, requesters, resource pools, bucket groups, and priority QoS configurations.
All examples use client.InvokeOperation to send raw API calls. Each snippet is a standalone package main function that you can adapt to your application.
Prerequisites
Before you begin, make sure you have:
An Alibaba Cloud account with OSS access
The Go SDK V2 installed:
go get github.com/aliyun/alibabacloud-oss-go-sdk-v2The following environment variables set with your credentials:
OSS_ACCESS_KEY_IDOSS_ACCESS_KEY_SECRET
A QoS configuration XML file (for PUT operations)
The examples use the cn-hangzhou region and a public endpoint by default. To access OSS from other Alibaba Cloud products in the same region, use an internal network endpoint instead. For endpoint mappings by region, see Regions and endpoints.Operations reference
The following table summarizes all operations covered in this document.
| Section | Operation | Function | HTTP method |
|---|---|---|---|
| Bucket bandwidth | Set bucket throttling | PutBucketQoSInfo | PUT |
| Bucket bandwidth | Get bucket throttling | GetBucketQoSInfo | GET |
| Bucket bandwidth | Delete bucket throttling | DeleteBucketQoSInfo | DELETE |
| Requester (bucket level) | Set requester throttling | PutBucketRequesterQoSInfo | PUT |
| Requester (bucket level) | Get requester throttling | GetBucketRequesterQoSInfo | GET |
| Requester (bucket level) | List all requester throttling configs | ListBucketRequesterQoSInfos | GET |
| Requester (bucket level) | Delete requester throttling | DeleteBucketRequesterQoSInfo | DELETE |
| Requester (resource pool level) | List all resource pools | ListResourcePools | GET |
| Requester (resource pool level) | Get resource pool info | GetResourcePoolInfo | GET |
| Requester (resource pool level) | List buckets in a resource pool | ListResourcePoolBucketGroups | GET |
| Requester (resource pool level) | Set requester throttling | PutResourcePoolRequesterQoSInfo | PUT |
| Requester (resource pool level) | Get requester throttling | GetResourcePoolRequesterQoSInfo | GET |
| Requester (resource pool level) | List all requester throttling configs | ListResourcePoolRequesterQoSInfos | GET |
| Requester (resource pool level) | Delete requester throttling | DeleteResourcePoolRequesterQoSInfo | DELETE |
| Priority QoS | Set resource pool priority QoS | PutResourcePoolPriorityQosConfiguration | PUT |
| Priority QoS | Get resource pool priority QoS | GetResourcePoolPriorityQosConfiguration | GET |
| Priority QoS | Delete resource pool priority QoS | DeleteResourcePoolPriorityQosConfiguration | DELETE |
| Priority QoS | Set requester priority QoS | PutResourcePoolRequesterPriorityQosConfiguration | PUT |
| Priority QoS | Get requester priority QoS | GetResourcePoolRequesterPriorityQosConfiguration | GET |
| Priority QoS | Delete requester priority QoS | DeleteResourcePoolRequesterPriorityQosConfiguration | DELETE |
| Bucket group | Add bucket to a bucket group | PutBucketResourcePoolBucketGroup | PUT |
| Bucket group | List bucket groups | ListResourcePoolBucketGroups | GET |
| Bucket group | Set bucket group throttling | PutResourcePoolBucketGroupQosInfo | PUT |
| Bucket group | Get bucket group throttling | GetResourcePoolBucketGroupQosInfo | GET |
| Bucket group | List all bucket group throttling configs | ListResourcePoolBucketGroupQosInfos | GET |
| Bucket group | Delete bucket group throttling | DeleteResourcePoolBucketGroupQosInfo | DELETE |
Bucket bandwidth management
These operations configure, retrieve, and delete QoS throttling for a specific bucket in a resource pool.
Set throttling for a bucket
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutBucketQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
// Read the QoS configuration from an XML file.
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
// Compute the Base64-encoded MD5 hash of the request body for data integrity verification.
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutBucketQoSInfo",
Method: "PUT",
Parameters: map[string]string{
"qosInfo": "",
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of PutBucketQoSInfo:", res.Status)
}Get throttling configuration for a bucket
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetBucketQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
input := &oss.OperationInput{
OpName: "GetBucketQoSInfo",
Method: "GET",
Parameters: map[string]string{
"qosInfo": "",
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of GetBucketQoSInfo:", string(body))
}Delete throttling configuration for a bucket
package main
import (
"context"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteBucketQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
input := &oss.OperationInput{
OpName: "DeleteBucketQoSInfo",
Method: "DELETE",
Parameters: map[string]string{
"qosInfo": "",
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of DeleteBucketQoSInfo:", res.Status)
}Requester bandwidth management at the bucket level
These operations manage per-requester QoS throttling scoped to a specific bucket. A requester is identified by their Alibaba Cloud account ID.
Set throttling for a requester
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutBucketRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
requester := "2598732222222xxxx" // Requester's Alibaba Cloud account ID
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutBucketRequesterQoSInfo",
Method: "PUT",
Parameters: map[string]string{
"requesterQosInfo": "",
"qosRequester": requester,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of PutBucketRequesterQoSInfo:", res.Status)
}Get throttling configuration for a specific requester
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetBucketRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
requester := "2598732222222xxxx"
input := &oss.OperationInput{
OpName: "GetBucketRequesterQoSInfo",
Method: "GET",
Parameters: map[string]string{
"requesterQosInfo": "",
"qosRequester": requester,
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of GetBucketRequesterQoSInfo:", string(body))
}List throttling configurations for all requesters
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListBucketRequesterQoSInfos() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
input := &oss.OperationInput{
OpName: "ListBucketRequesterQoSInfos",
Method: "GET",
Parameters: map[string]string{
"requesterQosInfo": "",
// Optional paging parameters:
// "continuation-token": "25987311111111xxxx",
// "max-keys": "1",
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of ListBucketRequesterQoSInfos:", string(body))
}Delete throttling configuration for a requester
package main
import (
"context"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteBucketRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
bucketName := "examplebucket"
requester := "2033310434633xxxx"
input := &oss.OperationInput{
OpName: "DeleteBucketRequesterQoSInfo",
Method: "DELETE",
Parameters: map[string]string{
"requesterQosInfo": "",
"qosRequester": requester,
},
Bucket: oss.Ptr(bucketName),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of DeleteBucketRequesterQoSInfo:", res.Status)
}Requester bandwidth management at the resource pool level
These operations manage QoS throttling for requesters scoped to a resource pool rather than a specific bucket. All resource-pool-level operations set Bucket: nil.
List all resource pools
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePools() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "ListResourcePools",
Method: "GET",
Parameters: map[string]string{
"resourcePool": "",
// Optional paging parameters:
// "continuation-token": "example-resource-pool",
// "max-keys": "1",
},
Bucket: nil, // Not scoped to a specific bucket
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of ListResourcePools:", string(body))
}Get information about a resource pool
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "GetResourcePoolInfo",
Method: "GET",
Parameters: map[string]string{
"resourcePoolInfo": "",
"resourcePool": "example-resource-pool",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of GetResourcePoolInfo:", string(body))
}List buckets in a resource pool
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePoolBuckets() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroups",
Method: "GET",
Parameters: map[string]string{
"resourcePool": "example-resource-pool",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of ListResourcePoolBucketGroups:", string(body))
}Set throttling for a requester in a resource pool
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
requester := "2598733333333xxxx"
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolRequesterQoSInfo",
Method: "PUT",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
"qosRequester": requester,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of PutResourcePoolRequesterQoSInfo:", res.Status)
}Get throttling configuration for a specific requester in a resource pool
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
requester := "2598732222222xxxx"
input := &oss.OperationInput{
OpName: "GetResourcePoolRequesterQoSInfo",
Method: "GET",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
"qosRequester": requester,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of GetResourcePoolRequesterQoSInfo:", string(body))
}List throttling configurations for all requesters in a resource pool
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePoolRequesterQoSInfos() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
input := &oss.OperationInput{
OpName: "ListResourcePoolRequesterQoSInfos",
Method: "GET",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
// Optional paging parameters:
// "continuation-token": "25987311111111xxxx",
// "max-keys": "1",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of ListResourcePoolRequesterQoSInfos:", string(body))
}Delete throttling configuration for a requester in a resource pool
package main
import (
"context"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolRequesterQoSInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
requester := "2598732222222xxxx"
input := &oss.OperationInput{
OpName: "DeleteResourcePoolRequesterQoSInfo",
Method: "DELETE",
Parameters: map[string]string{
"requesterQosInfo": "",
"resourcePool": resourcePool,
"qosRequester": requester,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of DeleteResourcePoolRequesterQoSInfo:", res.Status)
}Resource pool priority QoS management
Priority QoS lets you assign bandwidth priority tiers to a resource pool or to specific requesters within it. PUT and DELETE operations include a request body and a Content-MD5 header.
Set priority QoS for a resource pool
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
qosConf, err := os.ReadFile("priority-qos.xml")
if err != nil {
fmt.Printf("failed to read priority-qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolPriorityQoSConfiguration",
Method: "PUT",
Parameters: map[string]string{
"priorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of PutResourcePoolPriorityQoSConfiguration:", res.Status)
}Get priority QoS configuration for a resource pool
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
input := &oss.OperationInput{
OpName: "GetResourcePoolPriorityQoSConfiguration",
Method: "GET",
Parameters: map[string]string{
"priorityQos": "",
"resourcePool": resourcePool,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of GetResourcePoolPriorityQosConfiguration:", string(body))
}Delete priority QoS configuration for a resource pool
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
qosConf, err := os.ReadFile("priority-qos.xml")
if err != nil {
fmt.Printf("failed to read priority-qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "DeleteResourcePoolPriorityQosConfiguration",
Method: "DELETE",
Parameters: map[string]string{
"priorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of DeleteResourcePoolPriorityQosConfiguration:", res.Status)
}Set priority QoS for a requester in a resource pool
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolRequesterPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
qosConf, err := os.ReadFile("requester-priority-qos.xml")
if err != nil {
fmt.Printf("failed to read requester-priority-qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolRequesterPriorityQoSConfiguration",
Method: "PUT",
Parameters: map[string]string{
"requesterPriorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of PutResourcePoolRequesterPriorityQoSConfiguration:", res.Status)
}Get priority QoS configuration for a requester in a resource pool
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolRequesterPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
input := &oss.OperationInput{
OpName: "GetResourcePoolRequesterPriorityQoSConfiguration",
Method: "GET",
Parameters: map[string]string{
"requesterPriorityQos": "",
"resourcePool": resourcePool,
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of GetResourcePoolRequesterPriorityQosConfiguration:", string(body))
}Delete priority QoS configuration for a requester in a resource pool
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolRequesterPriorityQosConfiguration() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "hz-rp-01"
qosConf, err := os.ReadFile("priority-qos.xml")
if err != nil {
fmt.Printf("failed to read priority-qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "DeleteResourcePoolRequesterPriorityQoSConfiguration",
Method: "DELETE",
Parameters: map[string]string{
"requesterPriorityQos": "",
"resourcePool": resourcePool,
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of DeleteResourcePoolRequesterPriorityQosConfiguration:", res.Status)
}Bucket group bandwidth management
A bucket group is a named collection of buckets within a resource pool. These operations let you assign buckets to groups and manage QoS throttling at the group level.
Add a bucket to a bucket group
package main
import (
"context"
"fmt"
"io"
"os"
"strings"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutBucketResourcePoolBucketGroup() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "PutBucketResourcePoolBucketGroup",
Method: "PUT",
Parameters: map[string]string{
"resourcePoolBucketGroup": "example-group",
"resourcePool": "example-resource-pool",
},
Bucket: oss.Ptr("test-bucket"),
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
var body []byte
if b, ok := res.Body.(io.Reader); ok {
buf := new(strings.Builder)
_, _ = io.Copy(buf, b)
body = []byte(buf.String())
} else {
body = []byte(fmt.Sprintf("%v", res.Body))
}
fmt.Println("The result of PutBucketResourcePoolBucketGroup:", string(body))
}List bucket groups in a resource pool
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePoolBucketGroups() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroups",
Method: "GET",
Parameters: map[string]string{
"resourcePool": "example-resource-pool",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of ListResourcePoolBucketGroups:", string(body))
}Set throttling for a bucket group
package main
import (
"bytes"
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func PutResourcePoolBucketGroupQosInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
group := "example-group"
qosConf, err := os.ReadFile("qos.xml")
if err != nil {
fmt.Printf("failed to read qos.xml: %v\n", err)
os.Exit(1)
}
calcMd5 := func(input []byte) string {
if len(input) == 0 {
return "1B2M2Y8AsgTpgAmY7PhCfg=="
}
h := md5.New()
h.Write(input)
return base64.StdEncoding.EncodeToString(h.Sum(nil))
}
input := &oss.OperationInput{
OpName: "PutResourcePoolBucketGroupQoSInfo",
Method: "PUT",
Parameters: map[string]string{
"resourcePool": resourcePool,
"resourcePoolBucketGroup": group,
"resourcePoolBucketGroupQosInfo": "",
},
Headers: map[string]string{
"Content-MD5": calcMd5(qosConf),
},
Body: bytes.NewReader(qosConf),
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of PutResourcePoolBucketGroupQoSInfo:", res.Status)
}Get throttling configuration for a bucket group
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func GetResourcePoolBucketGroupQosInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
resourcePoolBucketGroup := "example-group"
input := &oss.OperationInput{
OpName: "GetResourcePoolBucketGroupQoSInfo",
Method: "GET",
Parameters: map[string]string{
"resourcePool": resourcePool,
"resourcePoolBucketGroup": resourcePoolBucketGroup,
"resourcePoolBucketGroupQoSInfo": "",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of GetResourcePoolBucketGroupQoSInfo:", string(body))
}List throttling configurations for all bucket groups
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func ListResourcePoolBucketGroupQosInfos() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
input := &oss.OperationInput{
OpName: "ListResourcePoolBucketGroupQoSInfos",
Method: "GET",
Parameters: map[string]string{
"resourcePool": resourcePool,
// Optional paging parameters:
// "continuation-token": "25987311111111xxxx",
// "max-keys": "1",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Printf("failed to read response body: %v\n", err)
os.Exit(1)
}
defer res.Body.Close()
fmt.Println("The result of ListResourcePoolBucketGroupQoSInfos:", string(body))
}Delete throttling configuration for a bucket group
package main
import (
"context"
"fmt"
"os"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
func DeleteResourcePoolBucketGroupQosInfo() {
var region = "cn-hangzhou"
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
resourcePool := "example-resource-pool"
group := "example-group"
input := &oss.OperationInput{
OpName: "DeleteResourcePoolBucketGroupQoSInfo",
Method: "DELETE",
Parameters: map[string]string{
"resourcePool": resourcePool,
"resourcePoolBucketGroup": group,
"resourcePoolBucketGroupQoSInfo": "",
},
Bucket: nil,
}
res, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
fmt.Printf("invoke operation got error: %v\n", err)
os.Exit(1)
}
fmt.Println("The result of DeleteResourcePoolBucketGroupQoSInfo:", res.Status)
}What's next
For the full API reference for resource pool QoS operations, see Resource pool QoS operations.
For configuration examples including sample XML structures, see Resource pool QoS configuration examples.