Help Center/ Server Migration Service/ API Reference/ APIs V3.0/ Task Management/ Setting Migration Rate Limit Rules for a Migration Task
Updated on 2025-01-24 GMT+08:00

Setting Migration Rate Limit Rules for a Migration Task

Function

This API is used to set migration rate limit rules for a migration task.

Calling Method

For details, see Calling APIs.

URI

POST /v3/tasks/{task_id}/speed-limit

Table 1 Path parameter

Parameter

Mandatory

Type

Description

task_id

Yes

String

The migration task ID.

Minimum length: 0 characters

Maximum length: 255 characters

Request

Table 2 Request header parameter

Parameter

Mandatory

Type

Description

X-Auth-Token

Yes

String

X-Auth-Token

The user token. The token 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.

Minimum length: 1 character

Maximum length: 16,384 characters

Table 3 Request body parameters

Parameter

Mandatory

Type

Description

speed_limit

Yes

Array of SpeedLimitlJson objects

The information about the time segments when the migration rate is limited.

Array length: 0 to 65,535

Table 4 SpeedLimitlJson field description

Parameter

Mandatory

Type

Description

start

Yes

String

The start time of a segment. The format is XX:XX.

Minimum length: 0 characters

Maximum length: 255 characters

end

Yes

String

The end time of a segment. The format is XX:XX.

Minimum length: 0 characters

Maximum length: 255 characters

speed

Yes

Integer

The migration rate limit for the specified period of time. The value is an integer ranging from 0 to 1000. The unit is Mbit/s.

Minimum value: 0

Maximum value: 10000

over_speed_threshold

No

Double

The overspeed threshold for stopping migration. This is a protection measure. If the migration speed exceeds the threshold, the task is stopped. It is used to control the consumption of resources (especially network bandwidth) during the migration to ensure that the overall system performance is not affected by a single migration task. The unit is percentage.

Minimum value: 0

Maximum value: 100

Response

Status code: 200

Table 5 Response body parameters

Parameter

Type

Description

-

String

Setting migration rate limit rules for a migration task succeeded.

Status code: 403

Table 6 Response body parameters

Parameter

Type

Description

error_code

String

The error code.

Minimum length: 0 characters

Maximum length: 255 characters

error_msg

String

The error message.

Minimum length: 0 characters

Maximum length: 255 characters

encoded_authorization_message

String

Encrypted authorization information.

Minimum length: 0 characters

Maximum length: 65,535 characters

error_param

Array of strings

Invalid parameter.

Minimum length: 0 characters

Maximum length: 65,535 characters

Array length: 1 to 20

details

Array of details objects

The error message.

Array length: 1 to 20

Table 7 details field description

Parameter

Type

Description

error_code

String

The SMS error code.

Minimum length: 0 characters

Maximum length: 65,535 characters

error_msg

String

The SMS error message.

Minimum length: 0 characters

Maximum length: 65,535 characters

Example Request

  • This example limits the speed of a migration task to 20 Mbit/s from 0:00 to 8:00, 50 Mbit/s from 8:00 to 15:00, and 25 Mbit/s from 15:00 to 23:59. It also sets an overspeed threshold for the task.

    POST https://{endpoint}/v3/tasks/7a9a9540-ff28-4869-b9e4-855fbe12xxxx/speed-limit
    
    {
      "speed_limit" : [ {
        "start" : "00:00",
        "end" : "23:59",
        "speed" : 1000,
        "over_speed_threshold" : 50.0
      } ]
    }
  • This example updates the migration rate limit rules of the task whose ID is a45a300b-86b5-4b13-8802-52274fa43016.

    POST https://{endpoint}/v3/tasks/a45a300b-86b5-4b13-8802-52274fa43016/speed-limit
    
    {
      "speed_limit" : [ {
        "start" : "0:00",
        "end" : "8:00",
        "speed" : 20
      }, {
        "start" : "8:00",
        "end" : "15:00",
        "speed" : 50
      }, {
        "start" : "15:00",
        "end" : "23:59",
        "speed" : 25
      } ]
    }

Example Response

Status code: 403

Authentication failed.

{
  "error_code" : "SMS.9004",
  "error_msg" : "The current account does not have the permission to execute policy You do not have permission to perform action XXX on resource XXX.",
  "encoded_authorization_message" : "XXXXXX",
  "error_param" : [ "You do not have permission to perform action XXX on resource XXX." ],
  "details" : [ {
    "error_code" : "SMS.9004",
    "error_msg" : "You do not have permission to perform action XXX on resource XXX."
  } ]
}

SDK Sample Code

The sample code is as follows.

  • This example limits the speed of a migration task to 20 Mbit/s from 0:00 to 8:00, 50 Mbit/s from 8:00 to 15:00, and 25 Mbit/s from 15:00 to 23:59. It also sets an overspeed threshold for the task.

     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
    52
    53
    54
    55
    56
    57
    58
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.GlobalCredentials;
    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.sms.v3.region.SmsRegion;
    import com.huaweicloud.sdk.sms.v3.*;
    import com.huaweicloud.sdk.sms.v3.model.*;
    
    import java.util.List;
    import java.util.ArrayList;
    
    public class UpdateSpeedSolution {
    
        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 GlobalCredentials()
                    .withAk(ak)
                    .withSk(sk);
    
            SmsClient client = SmsClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(SmsRegion.valueOf("<YOUR REGION>"))
                    .build();
            UpdateSpeedRequest request = new UpdateSpeedRequest();
            request.withTaskId("{task_id}");
            SpeedLimit body = new SpeedLimit();
            List<SpeedLimitlJson> listbodySpeedLimit = new ArrayList<>();
            listbodySpeedLimit.add(
                new SpeedLimitlJson()
                    .withStart("00:00")
                    .withEnd("23:59")
                    .withSpeed(1000)
            );
            body.withSpeedLimit(listbodySpeedLimit);
            request.withBody(body);
            try {
                UpdateSpeedResponse response = client.updateSpeed(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());
            }
        }
    }
    
  • This example updates the migration rate limit rules of the task whose ID is a45a300b-86b5-4b13-8802-52274fa43016.

     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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    package com.huaweicloud.sdk.test;
    
    import com.huaweicloud.sdk.core.auth.ICredential;
    import com.huaweicloud.sdk.core.auth.GlobalCredentials;
    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.sms.v3.region.SmsRegion;
    import com.huaweicloud.sdk.sms.v3.*;
    import com.huaweicloud.sdk.sms.v3.model.*;
    
    import java.util.List;
    import java.util.ArrayList;
    
    public class UpdateSpeedSolution {
    
        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 GlobalCredentials()
                    .withAk(ak)
                    .withSk(sk);
    
            SmsClient client = SmsClient.newBuilder()
                    .withCredential(auth)
                    .withRegion(SmsRegion.valueOf("<YOUR REGION>"))
                    .build();
            UpdateSpeedRequest request = new UpdateSpeedRequest();
            request.withTaskId("{task_id}");
            SpeedLimit body = new SpeedLimit();
            List<SpeedLimitlJson> listbodySpeedLimit = new ArrayList<>();
            listbodySpeedLimit.add(
                new SpeedLimitlJson()
                    .withStart("0:00")
                    .withEnd("8:00")
                    .withSpeed(20)
            );
            listbodySpeedLimit.add(
                new SpeedLimitlJson()
                    .withStart("8:00")
                    .withEnd("15:00")
                    .withSpeed(50)
            );
            listbodySpeedLimit.add(
                new SpeedLimitlJson()
                    .withStart("15:00")
                    .withEnd("23:59")
                    .withSpeed(25)
            );
            body.withSpeedLimit(listbodySpeedLimit);
            request.withBody(body);
            try {
                UpdateSpeedResponse response = client.updateSpeed(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());
            }
        }
    }
    
  • This example limits the speed of a migration task to 20 Mbit/s from 0:00 to 8:00, 50 Mbit/s from 8:00 to 15:00, and 25 Mbit/s from 15:00 to 23:59. It also sets an overspeed threshold for the task.

     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
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import GlobalCredentials
    from huaweicloudsdksms.v3.region.sms_region import SmsRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdksms.v3 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.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
    
        credentials = GlobalCredentials(ak, sk)
    
        client = SmsClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(SmsRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = UpdateSpeedRequest()
            request.task_id = "{task_id}"
            listSpeedLimitbody = [
                SpeedLimitlJson(
                    start="00:00",
                    end="23:59",
                    speed=1000
                )
            ]
            request.body = SpeedLimit(
                speed_limit=listSpeedLimitbody
            )
            response = client.update_speed(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • This example updates the migration rate limit rules of the task whose ID is a45a300b-86b5-4b13-8802-52274fa43016.

     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
    # coding: utf-8
    
    import os
    from huaweicloudsdkcore.auth.credentials import GlobalCredentials
    from huaweicloudsdksms.v3.region.sms_region import SmsRegion
    from huaweicloudsdkcore.exceptions import exceptions
    from huaweicloudsdksms.v3 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.environ["CLOUD_SDK_AK"]
        sk = os.environ["CLOUD_SDK_SK"]
    
        credentials = GlobalCredentials(ak, sk)
    
        client = SmsClient.new_builder() \
            .with_credentials(credentials) \
            .with_region(SmsRegion.value_of("<YOUR REGION>")) \
            .build()
    
        try:
            request = UpdateSpeedRequest()
            request.task_id = "{task_id}"
            listSpeedLimitbody = [
                SpeedLimitlJson(
                    start="0:00",
                    end="8:00",
                    speed=20
                ),
                SpeedLimitlJson(
                    start="8:00",
                    end="15:00",
                    speed=50
                ),
                SpeedLimitlJson(
                    start="15:00",
                    end="23:59",
                    speed=25
                )
            ]
            request.body = SpeedLimit(
                speed_limit=listSpeedLimitbody
            )
            response = client.update_speed(request)
            print(response)
        except exceptions.ClientRequestException as e:
            print(e.status_code)
            print(e.request_id)
            print(e.error_code)
            print(e.error_msg)
    
  • This example limits the speed of a migration task to 20 Mbit/s from 0:00 to 8:00, 50 Mbit/s from 8:00 to 15:00, and 25 Mbit/s from 15:00 to 23:59. It also sets an overspeed threshold for the task.

     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
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global"
        sms "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3/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 := global.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            Build()
    
        client := sms.NewSmsClient(
            sms.SmsClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.UpdateSpeedRequest{}
    	request.TaskId = "{task_id}"
    	var listSpeedLimitbody = []model.SpeedLimitlJson{
            {
                Start: "00:00",
                End: "23:59",
                Speed: int32(1000),
            },
        }
    	request.Body = &model.SpeedLimit{
    		SpeedLimit: listSpeedLimitbody,
    	}
    	response, err := client.UpdateSpeed(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    
  • This example updates the migration rate limit rules of the task whose ID is a45a300b-86b5-4b13-8802-52274fa43016.

     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
    52
    53
    54
    55
    56
    package main
    
    import (
    	"fmt"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global"
        sms "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3"
    	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3/model"
        region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/sms/v3/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 := global.NewCredentialsBuilder().
            WithAk(ak).
            WithSk(sk).
            Build()
    
        client := sms.NewSmsClient(
            sms.SmsClientBuilder().
                WithRegion(region.ValueOf("<YOUR REGION>")).
                WithCredential(auth).
                Build())
    
        request := &model.UpdateSpeedRequest{}
    	request.TaskId = "{task_id}"
    	var listSpeedLimitbody = []model.SpeedLimitlJson{
            {
                Start: "0:00",
                End: "8:00",
                Speed: int32(20),
            },
            {
                Start: "8:00",
                End: "15:00",
                Speed: int32(50),
            },
            {
                Start: "15:00",
                End: "23:59",
                Speed: int32(25),
            },
        }
    	request.Body = &model.SpeedLimit{
    		SpeedLimit: listSpeedLimitbody,
    	}
    	response, err := client.UpdateSpeed(request)
    	if err == nil {
            fmt.Printf("%+v\n", response)
        } else {
            fmt.Println(err)
        }
    }
    

For more SDK sample code of programming languages, visit API Explorer and click the Sample Code tab. Example code can be automatically generated.

Status Codes

Status Code

Description

200

Setting migration rate limit rules for a migration task succeeded.

403

Authentication failed.

Error Codes

For details, see Error Codes.