All Products
Search
Document Center

Object Storage Service:Manage resource pool QoS (Go SDK V2)

Last Updated:Mar 20, 2026

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-v2

  • The following environment variables set with your credentials:

    • OSS_ACCESS_KEY_ID

    • OSS_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.

SectionOperationFunctionHTTP method
Bucket bandwidthSet bucket throttlingPutBucketQoSInfoPUT
Bucket bandwidthGet bucket throttlingGetBucketQoSInfoGET
Bucket bandwidthDelete bucket throttlingDeleteBucketQoSInfoDELETE
Requester (bucket level)Set requester throttlingPutBucketRequesterQoSInfoPUT
Requester (bucket level)Get requester throttlingGetBucketRequesterQoSInfoGET
Requester (bucket level)List all requester throttling configsListBucketRequesterQoSInfosGET
Requester (bucket level)Delete requester throttlingDeleteBucketRequesterQoSInfoDELETE
Requester (resource pool level)List all resource poolsListResourcePoolsGET
Requester (resource pool level)Get resource pool infoGetResourcePoolInfoGET
Requester (resource pool level)List buckets in a resource poolListResourcePoolBucketGroupsGET
Requester (resource pool level)Set requester throttlingPutResourcePoolRequesterQoSInfoPUT
Requester (resource pool level)Get requester throttlingGetResourcePoolRequesterQoSInfoGET
Requester (resource pool level)List all requester throttling configsListResourcePoolRequesterQoSInfosGET
Requester (resource pool level)Delete requester throttlingDeleteResourcePoolRequesterQoSInfoDELETE
Priority QoSSet resource pool priority QoSPutResourcePoolPriorityQosConfigurationPUT
Priority QoSGet resource pool priority QoSGetResourcePoolPriorityQosConfigurationGET
Priority QoSDelete resource pool priority QoSDeleteResourcePoolPriorityQosConfigurationDELETE
Priority QoSSet requester priority QoSPutResourcePoolRequesterPriorityQosConfigurationPUT
Priority QoSGet requester priority QoSGetResourcePoolRequesterPriorityQosConfigurationGET
Priority QoSDelete requester priority QoSDeleteResourcePoolRequesterPriorityQosConfigurationDELETE
Bucket groupAdd bucket to a bucket groupPutBucketResourcePoolBucketGroupPUT
Bucket groupList bucket groupsListResourcePoolBucketGroupsGET
Bucket groupSet bucket group throttlingPutResourcePoolBucketGroupQosInfoPUT
Bucket groupGet bucket group throttlingGetResourcePoolBucketGroupQosInfoGET
Bucket groupList all bucket group throttling configsListResourcePoolBucketGroupQosInfosGET
Bucket groupDelete bucket group throttlingDeleteResourcePoolBucketGroupQosInfoDELETE

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