Updated on 2024-02-27 GMT+08:00

Modifying QoS of an EVS Disk

Function

This API is used to change the IOPS or throughput of an EVS disk.

Constraints

The disk must be in the available or in-use state. For a General Purpose SSD V2 disk, both the IOPS and throughput can be changed. For an Extreme SSD V2 disk, only the IOPS can be changed. This API is not supported for other types of EVS disks.

Calling Method

For details, see Calling APIs.

URI

PUT /v5/{project_id}/cloudvolumes/{volume_id}/qos

Table 1 Path Parameters

Parameter

Mandatory

Type

Description

project_id

Yes

String

The project ID. For details about how to obtain the project ID, see Obtaining a Project ID.

volume_id

Yes

String

The disk ID.

Request Parameters

Table 2 Request header parameters

Parameter

Mandatory

Type

Description

X-Auth-Token

Yes

String

The user token. It can be obtained by calling the IAM API used to obtain a user token. The value of X-Subject-Token in the response header is the user token.

Table 3 Request body parameters

Parameter

Mandatory

Type

Description

qos_modify

Yes

ModifyVolumeQoSOption object

The disk QoS change marker.

Table 4 ModifyVolumeQoSOption

Parameter

Mandatory

Type

Description

iops

Yes

Integer

The new maximum IOPS of the disk. This parameter is supported only for general purpose SSD V2 and extreme SSD V2 disks.

NOTE:

To learn the IOPS ranges of the general purpose SSD V2 and extreme SSD V2 disks, see [ [the table of EVS performance data in Disk Types and Performance.

throughput

No

Integer

The new maximum throughput of the disk, in the unit of MiB/s. This parameter is supported only for general purpose SSD V2 disks.

NOTE:

To learn the throughput range of the general purpose SSD V2 disks, see [ [the table of EVS performance data in Disk Types and Performance.

Response Parameters

Status code: 202

Table 5 Response body parameters

Parameter

Type

Description

job_id

String

The task ID returned in a normal response.

NOTE:

To query the task status, see Querying Task Status.

Status code: 400

Table 6 Response body parameters

Parameter

Type

Description

error

Error object

The error message returned if an error occurs. For details, seeParameters in the error field.

Table 7 Error

Parameter

Type

Description

code

String

The error code returned if an error occurs. For the error codes and their meanings, see Error Codes.

message

String

The error message returned if an error occurs.

Example Requests

PUT https://{endpoint}/v5/{project_id}/cloudvolumes/{volume_id}/qos

{
  "qos_modify" : {
    "iops" : 10000,
    "throughput" : 200
  }
}

Example Responses

Status code: 202

Accepted

{
  "job_id" : "70a599e0-31e7-49b7-b260-868f441e862b"
}

Status code: 400

Bad Request

{
  "error" : {
    "code" : "XXXX",
    "message" : "XXX"
  }
}

SDK Sample Code

The SDK sample code is as follows.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.evs.v2.region.EvsRegion;
import com.huaweicloud.sdk.evs.v2.*;
import com.huaweicloud.sdk.evs.v2.model.*;


public class ModifyVolumeQoSSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");

        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);

        EvsClient client = EvsClient.newBuilder()
                .withCredential(auth)
                .withRegion(EvsRegion.valueOf("<YOUR REGION>"))
                .build();
        ModifyVolumeQoSRequest request = new ModifyVolumeQoSRequest();
        ModifyVolumeQoSRequestBody body = new ModifyVolumeQoSRequestBody();
        ModifyVolumeQoSOption qosModifybody = new ModifyVolumeQoSOption();
        qosModifybody.withIops(10000)
            .withThroughput(200);
        body.withQosModify(qosModifybody);
        request.withBody(body);
        try {
            ModifyVolumeQoSResponse response = client.modifyVolumeQoS(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# coding: utf-8

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkevs.v2.region.evs_region import EvsRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkevs.v2 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.getenv("CLOUD_SDK_AK")
    sk = os.getenv("CLOUD_SDK_SK")

    credentials = BasicCredentials(ak, sk) \

    client = EvsClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(EvsRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = ModifyVolumeQoSRequest()
        qosModifybody = ModifyVolumeQoSOption(
            iops=10000,
            throughput=200
        )
        request.body = ModifyVolumeQoSRequestBody(
            qos_modify=qosModifybody
        )
        response = client.modify_volume_qo_s(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    evs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        Build()

    client := evs.NewEvsClient(
        evs.EvsClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.ModifyVolumeQoSRequest{}
	throughputQosModify:= int32(200)
	qosModifybody := &model.ModifyVolumeQoSOption{
		Iops: int32(10000),
		Throughput: &throughputQosModify,
	}
	request.Body = &model.ModifyVolumeQoSRequestBody{
		QosModify: qosModifybody,
	}
	response, err := client.ModifyVolumeQoS(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

For SDK sample code of more programming languages, see the Sample Code tab in API Explorer. SDK sample code can be automatically generated.

Status Codes

Status Code

Description

202

Accepted

400

Bad Request

Error Codes

See Error Codes.