Updated on 2024-04-18 GMT+08:00

Creating a Resource Pool

Function

This API is used to create a resource pool.

Call Method

For details, see Calling APIs.

URI

PUT /v2/{project_id}/clusters/{cluster_id}/workload/queues
Table 1 URI parameters

Parameter

Mandatory

Type

Description

project_id

Yes

String

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

cluster_id

Yes

String

Cluster ID. For details about how to obtain the ID, see Obtaining the Cluster ID.

Request Parameters

Table 2 Request body parameters

Parameter

Mandatory

Type

Description

workload_queue

Yes

WorkloadQueue object

Resource pool objects

Table 3 WorkloadQueue

Parameter

Mandatory

Type

Description

workload_queue_name

Yes

String

Resource pool name The value must start with a lowercase letter and contain 3 to 28 characters, including only lowercase letters, numbers, and underscores (_).

logical_cluster_name

No

String

Name of a logical cluster In non-logical cluster mode, leave this parameter blank. In logical cluster mode, it is the logical cluster name.

workload_resource_item_list

Yes

Array of WorkloadResource objects

Resource configuration queue

Table 4 WorkloadResource

Parameter

Mandatory

Type

Description

resource_name

Yes

String

Resource name

  • memory: memory resource (%)
  • Tablespace: storage resource (MB)
  • activestatements: query concurrency
  • cpu_limit: dedicated limit
  • cpu_share: CPU share
NOTE:

When adding a resource pool, you need to set all resource types. cpu_limit is supported only by clusters later than 8.1.3.

resource_value

Yes

Integer

Resource attribute value

  • The value of memory ranges from 0 to 100. The value 0 indicates that the memory is not controlled.
  • The value of tablespace ranges from -1 to 2147483647. The value -1 indicates that the tablespace is not limited. Note: The value depends on the actual storage resources.
  • The value of activestatements ranges from -1 to 2147483647, where -1/0 indicates no limit.
  • The value of cpu_limit ranges from 1 to 99. If cpu_limit is set to 0, there is no restriction.
  • The value of cpu_share ranges from 1 to 99. If cpu_share is not specified, the default value 20 is used.
  • If cpu_limit and cpu_share can be set at the same time, cpu_limit takes precedence over cpu_share.

Response Parameters

Table 5 Response body parameters

Parameter

Type

Description

workload_res_code

Integer

Status code

workload_res_str

String

Status description.

Example Request

Add resource pool test11. Set the shared quota to 12%, memory resource to 0 (unlimited), storage resource to -1 (unlimited), and query concurrency to 10.

PUT https://{Endpoint}/v2/89cd04f168b84af6be287f71730fdb4b/clusters/e59d6b86-9072-46eb-a996-13f8b44994c1/workload/queues
{
  "workload_queue": {
    "workload_queue_name": "test11",
    "workload_resource_item_list": [
      {
        "resource_name": "memory",
        "resource_value": "0"
      },
      {
        "resource_name": "tablespace",
        "resource_value": "-1"
      },
      {
        "resource_name": "activestatements",
        "resource_value": "10"
      },
      {
        "resource_name": "cpu_limit",
        "resource_value": 0

      },
      {
        "resource_name": "cpu_share",
        "resource_value": 12
      }
    ],
    "logical_cluster_name": ""
  }
}

Example Response

Status code: 200

The resource pool is added successfully.

{
  "workload_res_code" : 0,
  "workload_res_str" : "Success to create the resource pool."
}

SDK Sample Code

The 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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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.dws.v2.region.DwsRegion;
import com.huaweicloud.sdk.dws.v2.*;
import com.huaweicloud.sdk.dws.v2.model.*;

import java.util.List;
import java.util.ArrayList;

public class AddWorkloadQueueSolution {

    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);

        DwsClient client = DwsClient.newBuilder()
                .withCredential(auth)
                .withRegion(DwsRegion.valueOf("cn-north-4"))
                .build();
        AddWorkloadQueueRequest request = new AddWorkloadQueueRequest();
        WorkloadQueueReq body = new WorkloadQueueReq();
        List<WorkloadResource> listWorkloadQueueWorkloadResourceItemList = new ArrayList<>();
        listWorkloadQueueWorkloadResourceItemList.add(
            new WorkloadResource()
                .withResourceName("memory")
                .withResourceValue(0)
        );
        listWorkloadQueueWorkloadResourceItemList.add(
            new WorkloadResource()
                .withResourceName("tablespace")
                .withResourceValue(-1)
        );
        listWorkloadQueueWorkloadResourceItemList.add(
            new WorkloadResource()
                .withResourceName("activestatements")
                .withResourceValue(10)
        );
        listWorkloadQueueWorkloadResourceItemList.add(
            new WorkloadResource()
                .withResourceName("cpu_limit")
                .withResourceValue(0)
        );
        listWorkloadQueueWorkloadResourceItemList.add(
            new WorkloadResource()
                .withResourceName("cpu_share")
                .withResourceValue(12)
        );
        WorkloadQueue workloadQueuebody = new WorkloadQueue();
        workloadQueuebody.withWorkloadQueueName("test11")
            .withLogicalClusterName("")
            .withWorkloadResourceItemList(listWorkloadQueueWorkloadResourceItemList);
        body.withWorkloadQueue(workloadQueuebody);
        request.withBody(body);
        try {
            AddWorkloadQueueResponse response = client.addWorkloadQueue(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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# coding: utf-8

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkdws.v2.region.dws_region import DwsRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkdws.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 = DwsClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(DwsRegion.value_of("cn-north-4")) \
        .build()

    try:
        request = AddWorkloadQueueRequest()
        listWorkloadResourceItemListWorkloadQueue = [
            WorkloadResource(
                resource_name="memory",
                resource_value=0
            ),
            WorkloadResource(
                resource_name="tablespace",
                resource_value=-1
            ),
            WorkloadResource(
                resource_name="activestatements",
                resource_value=10
            ),
            WorkloadResource(
                resource_name="cpu_limit",
                resource_value=0
            ),
            WorkloadResource(
                resource_name="cpu_share",
                resource_value=12
            )
        ]
        workloadQueuebody = WorkloadQueue(
            workload_queue_name="test11",
            logical_cluster_name="",
            workload_resource_item_list=listWorkloadResourceItemListWorkloadQueue
        )
        request.body = WorkloadQueueReq(
            workload_queue=workloadQueuebody
        )
        response = client.add_workload_queue(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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    dws "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dws/v2"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dws/v2/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/dws/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 := dws.NewDwsClient(
        dws.DwsClientBuilder().
            WithRegion(region.ValueOf("cn-north-4")).
            WithCredential(auth).
            Build())

    request := &model.AddWorkloadQueueRequest{}
	var listWorkloadResourceItemListWorkloadQueue = []model.WorkloadResource{
        {
            ResourceName: "memory",
            ResourceValue: int32(0),
        },
        {
            ResourceName: "tablespace",
            ResourceValue: int32(-1),
        },
        {
            ResourceName: "activestatements",
            ResourceValue: int32(10),
        },
        {
            ResourceName: "cpu_limit",
            ResourceValue: int32(0),
        },
        {
            ResourceName: "cpu_share",
            ResourceValue: int32(12),
        },
    }
	logicalClusterNameWorkloadQueue:= ""
	workloadQueuebody := &model.WorkloadQueue{
		WorkloadQueueName: "test11",
		LogicalClusterName: &logicalClusterNameWorkloadQueue,
		WorkloadResourceItemList: listWorkloadResourceItemListWorkloadQueue,
	}
	request.Body = &model.WorkloadQueueReq{
		WorkloadQueue: workloadQueuebody,
	}
	response, err := client.AddWorkloadQueue(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

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

Status Code

Status Code

Description

200

The resource pool is added successfully.

400

Request error.

401

Authentication failed.

403

You do not have required permissions.

404

No resources found.

500

Internal server error.

503

The service was unavailable.