From d804d7d1be705aeaabd1754958bca7de159d1369 Mon Sep 17 00:00:00 2001 From: "Ru, Li Yi" Date: Tue, 9 Apr 2024 12:27:54 +0000 Subject: [PATCH] ddm_api Reviewed-by: Boka, Ladislav Co-authored-by: Ru, Li Yi Co-committed-by: Ru, Li Yi --- docs/ddm/api-ref/ALL_META.TXT.json | 923 +++++++++++++++++ docs/ddm/api-ref/CLASS.TXT.json | 461 +++++++++ docs/ddm/api-ref/PARAMETERS.txt | 3 + docs/ddm/api-ref/ddm_03_0002.html | 191 ++++ docs/ddm/api-ref/ddm_04_0001.html | 378 +++++++ docs/ddm/api-ref/ddm_16_0001.html | 373 +++++++ docs/ddm/api-ref/ddm_api_01_0001.html | 19 + docs/ddm/api-ref/ddm_api_01_0002.html | 15 + docs/ddm/api-ref/ddm_api_01_0003.html | 11 + docs/ddm/api-ref/ddm_api_01_0004.html | 11 + docs/ddm/api-ref/ddm_api_01_0005.html | 11 + docs/ddm/api-ref/ddm_api_01_0006.html | 19 + docs/ddm/api-ref/ddm_api_01_0007.html | 163 +++ docs/ddm/api-ref/ddm_api_01_0008.html | 15 + docs/ddm/api-ref/ddm_api_01_0011.html | 50 + docs/ddm/api-ref/ddm_api_01_0012.html | 39 + docs/ddm/api-ref/ddm_api_01_0014.html | 51 + docs/ddm/api-ref/ddm_api_01_0015.html | 333 ++++++ docs/ddm/api-ref/ddm_api_01_0016.html | 465 +++++++++ docs/ddm/api-ref/ddm_api_01_0017.html | 242 +++++ docs/ddm/api-ref/ddm_api_01_0018.html | 421 ++++++++ docs/ddm/api-ref/ddm_api_01_0019.html | 393 +++++++ docs/ddm/api-ref/ddm_api_01_0020.html | 226 ++++ docs/ddm/api-ref/ddm_api_01_0021.html | 223 ++++ docs/ddm/api-ref/ddm_api_01_0022.html | 232 +++++ docs/ddm/api-ref/ddm_api_01_0023.html | 267 +++++ docs/ddm/api-ref/ddm_api_01_0024.html | 178 ++++ docs/ddm/api-ref/ddm_api_01_0025.html | 275 +++++ docs/ddm/api-ref/ddm_api_01_0026.html | 255 +++++ docs/ddm/api-ref/ddm_api_01_0027.html | 23 + docs/ddm/api-ref/ddm_api_01_0029.html | 354 +++++++ docs/ddm/api-ref/ddm_api_01_0030.html | 470 +++++++++ docs/ddm/api-ref/ddm_api_01_0031.html | 233 +++++ docs/ddm/api-ref/ddm_api_01_0041.html | 17 + docs/ddm/api-ref/ddm_api_01_0058.html | 21 + docs/ddm/api-ref/ddm_api_01_0059.html | 42 + docs/ddm/api-ref/ddm_api_01_0060.html | 130 +++ docs/ddm/api-ref/ddm_api_01_0061.html | 974 ++++++++++++++++++ docs/ddm/api-ref/ddm_api_01_0062.html | 52 + docs/ddm/api-ref/ddm_api_01_0063.html | 44 + docs/ddm/api-ref/ddm_api_01_0064.html | 168 +++ docs/ddm/api-ref/ddm_api_01_0069.html | 43 + docs/ddm/api-ref/ddm_api_01_0080.html | 236 +++++ docs/ddm/api-ref/ddm_api_01_0081.html | 204 ++++ docs/ddm/api-ref/ddm_api_01_0082.html | 301 ++++++ docs/ddm/api-ref/ddm_api_01_0083.html | 277 +++++ docs/ddm/api-ref/ddm_api_01_0084.html | 342 ++++++ docs/ddm/api-ref/ddm_api_01_0085.html | 480 +++++++++ docs/ddm/api-ref/ddm_api_01_0089.html | 15 + docs/ddm/api-ref/ddm_api_01_0090.html | 340 ++++++ docs/ddm/api-ref/ddm_api_01_0100.html | 369 +++++++ docs/ddm/api-ref/ddm_api_01_0101.html | 241 +++++ docs/ddm/api-ref/ddm_api_01_0102.html | 212 ++++ docs/ddm/api-ref/ddm_api_02_0000.html | 21 + .../api-ref/en-us_image_0000001685146158.png | Bin 0 -> 51740 bytes .../api-ref/en-us_image_0000001733265073.png | Bin 0 -> 51463 bytes .../api-ref/en-us_image_0000001733265081.jpg | Bin 0 -> 139826 bytes .../caution_3.0-en-us.png | Bin 0 -> 2752 bytes .../public_sys-resources/danger_3.0-en-us.png | Bin 0 -> 2771 bytes .../api-ref/public_sys-resources/delta.gif | Bin 0 -> 836 bytes .../api-ref/public_sys-resources/deltaend.gif | Bin 0 -> 834 bytes .../public_sys-resources/icon-arrowdn.gif | Bin 0 -> 1887 bytes .../public_sys-resources/icon-arrowrt.gif | Bin 0 -> 1890 bytes .../public_sys-resources/icon-caution.gif | Bin 0 -> 1086 bytes .../public_sys-resources/icon-danger.gif | Bin 0 -> 1086 bytes .../public_sys-resources/icon-huawei.gif | Bin 0 -> 2767 bytes .../public_sys-resources/icon-note.gif | Bin 0 -> 983 bytes .../public_sys-resources/icon-notice.gif | Bin 0 -> 962 bytes .../api-ref/public_sys-resources/icon-tip.gif | Bin 0 -> 879 bytes .../public_sys-resources/icon-warning.gif | Bin 0 -> 1086 bytes .../public_sys-resources/note_3.0-en-us.png | Bin 0 -> 1080 bytes .../public_sys-resources/notice_3.0-en-us.png | Bin 0 -> 1672 bytes .../warning_3.0-en-us.png | Bin 0 -> 3164 bytes 73 files changed, 11852 insertions(+) create mode 100644 docs/ddm/api-ref/ALL_META.TXT.json create mode 100644 docs/ddm/api-ref/CLASS.TXT.json create mode 100644 docs/ddm/api-ref/PARAMETERS.txt create mode 100644 docs/ddm/api-ref/ddm_03_0002.html create mode 100644 docs/ddm/api-ref/ddm_04_0001.html create mode 100644 docs/ddm/api-ref/ddm_16_0001.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0001.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0002.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0003.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0004.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0005.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0006.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0007.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0008.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0011.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0012.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0014.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0015.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0016.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0017.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0018.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0019.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0020.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0021.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0022.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0023.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0024.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0025.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0026.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0027.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0029.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0030.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0031.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0041.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0058.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0059.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0060.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0061.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0062.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0063.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0064.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0069.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0080.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0081.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0082.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0083.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0084.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0085.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0089.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0090.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0100.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0101.html create mode 100644 docs/ddm/api-ref/ddm_api_01_0102.html create mode 100644 docs/ddm/api-ref/ddm_api_02_0000.html create mode 100644 docs/ddm/api-ref/en-us_image_0000001685146158.png create mode 100644 docs/ddm/api-ref/en-us_image_0000001733265073.png create mode 100644 docs/ddm/api-ref/en-us_image_0000001733265081.jpg create mode 100644 docs/ddm/api-ref/public_sys-resources/caution_3.0-en-us.png create mode 100644 docs/ddm/api-ref/public_sys-resources/danger_3.0-en-us.png create mode 100644 docs/ddm/api-ref/public_sys-resources/delta.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/deltaend.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-arrowdn.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-arrowrt.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-caution.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-danger.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-huawei.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-note.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-notice.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-tip.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/icon-warning.gif create mode 100644 docs/ddm/api-ref/public_sys-resources/note_3.0-en-us.png create mode 100644 docs/ddm/api-ref/public_sys-resources/notice_3.0-en-us.png create mode 100644 docs/ddm/api-ref/public_sys-resources/warning_3.0-en-us.png diff --git a/docs/ddm/api-ref/ALL_META.TXT.json b/docs/ddm/api-ref/ALL_META.TXT.json new file mode 100644 index 000000000..cb92cdad6 --- /dev/null +++ b/docs/ddm/api-ref/ALL_META.TXT.json @@ -0,0 +1,923 @@ +[ + { + "dockw":"API Reference" + }, + { + "uri":"ddm_api_01_0001.html", + "node_id":"ddm_api_01_0001.xml", + "product_code":"ddm", + "code":"1", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Before You Start", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Before You Start", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0002.html", + "node_id":"ddm_api_01_0002.xml", + "product_code":"ddm", + "code":"2", + "des":"Welcome to Distributed Database Middleware (DDM). This document describes functions, syntax, parameters, and examples of DDM.If you plan to access DDM through an API, ens", + "doc_type":"api", + "kw":"Overview,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Overview", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0003.html", + "node_id":"ddm_api_01_0003.xml", + "product_code":"ddm", + "code":"3", + "des":"DDM supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS.", + "doc_type":"api", + "kw":"API Calling,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"API Calling", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0004.html", + "node_id":"ddm_api_01_0004.xml", + "product_code":"ddm", + "code":"4", + "des":"An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.", + "doc_type":"api", + "kw":"Endpoints,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Endpoints", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0005.html", + "node_id":"ddm_api_01_0005.xml", + "product_code":"ddm", + "code":"5", + "des":"The number of DDM instances that you can create is determined by your quota.For more constraints, see API description.", + "doc_type":"api", + "kw":"Constraints,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Constraints", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0006.html", + "node_id":"ddm_api_01_0006.xml", + "product_code":"ddm", + "code":"6", + "des":"AccountAn account is created upon successful registration. The account has full access permissions for all of its cloud services and resources. It can be used to reset us", + "doc_type":"api", + "kw":"Concepts,Before You Start,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Concepts", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0007.html", + "node_id":"ddm_api_01_0007.xml", + "product_code":"ddm", + "code":"7", + "des":"DDM provides REST APIs. With DDM APIs, you can use all DDM functions, including creating DDM instances and schemas.", + "doc_type":"api", + "kw":"API Overview,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"API Overview", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0008.html", + "node_id":"ddm_api_01_0008.xml", + "product_code":"ddm", + "code":"8", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Calling APIs", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Calling APIs", + "githuburl":"" + }, + { + "uri":"ddm_03_0002.html", + "node_id":"ddm_03_0002.xml", + "product_code":"ddm", + "code":"9", + "des":"This section describes the structure of a REST API and how to call an API. Before calling an API, you need to obtain the user token using the IAM API.A request URI is in ", + "doc_type":"api", + "kw":"Making an API Request,Calling APIs,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Making an API Request", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0011.html", + "node_id":"ddm_api_01_0011.xml", + "product_code":"ddm", + "code":"10", + "des":"Token authentication is required to call APIs.Authentication using tokens: General requests are authenticated using tokens.The validity period of a token is 24 hours. If ", + "doc_type":"api", + "kw":"Authentication,Calling APIs,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Authentication", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0012.html", + "node_id":"ddm_api_01_0012.xml", + "product_code":"ddm", + "code":"11", + "des":"After sending a request, you will receive a response, including the status code, response header, and response body.A status code is a group of digits ranging from 1xx to", + "doc_type":"api", + "kw":"Returned Values,Calling APIs,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Returned Values", + "githuburl":"" + }, + { + "uri":"ddm_api_02_0000.html", + "node_id":"ddm_api_02_0000.xml", + "product_code":"ddm", + "code":"12", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"APIs (Recommended)", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"APIs (Recommended)", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0014.html", + "node_id":"ddm_api_01_0014.xml", + "product_code":"ddm", + "code":"13", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"DDM Instances", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"DDM Instances", + "githuburl":"" + }, + { + "uri":"ddm_04_0001.html", + "node_id":"ddm_04_0001.xml", + "product_code":"ddm", + "code":"14", + "des":"This API is used to create a DDM instance.DDM runs in VPCs. Before you create a DDM instance, ensure that a VPC is available and a subnet and security group have been con", + "doc_type":"api", + "kw":"Creating a DDM instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Creating a DDM instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0018.html", + "node_id":"ddm_api_01_0018.xml", + "product_code":"ddm", + "code":"15", + "des":"This API is used to query DDM instances.NoneGET /v1/{project_id}/instances?offset={offset}&limit={limit}Status code: 200Status code: 400Status code: 500Status code: 200OK", + "doc_type":"api", + "kw":"Querying DDM Instances,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying DDM Instances", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0019.html", + "node_id":"ddm_api_01_0019.xml", + "product_code":"ddm", + "code":"16", + "des":"This API is used to query details about a DDM instance.NoneGET /v1/{project_id}/instances/{instance_id}Status code: 200Status code: 400Status code: 500Status code: 200OKS", + "doc_type":"api", + "kw":"Querying Details of a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying Details of a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0020.html", + "node_id":"ddm_api_01_0020.xml", + "product_code":"ddm", + "code":"17", + "des":"This API is used to modify the name of a DDM instance.NonePUT /v1/{project_id}/instances/{instance_id}/modify-nameStatus code: 200Status code: 400Status code: 500Status c", + "doc_type":"api", + "kw":"Modifying the Name of a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Modifying the Name of a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0021.html", + "node_id":"ddm_api_01_0021.xml", + "product_code":"ddm", + "code":"18", + "des":"This API is used to modify the security group of a DDM instance.NonePUT /v1/{project_id}/instances/{instance_id}/modify-security-groupStatus code: 200Status code: 400Stat", + "doc_type":"api", + "kw":"Modifying the Security Group of a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Modifying the Security Group of a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0022.html", + "node_id":"ddm_api_01_0022.xml", + "product_code":"ddm", + "code":"19", + "des":"This API is used to delete a DDM instance to release all its resources.NoneDELETE /v1/{project_id}/instances/{instance_id}Status code: 200Status code: 400Status code: 500", + "doc_type":"api", + "kw":"Deleting a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Deleting a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0023.html", + "node_id":"ddm_api_01_0023.xml", + "product_code":"ddm", + "code":"20", + "des":"This API is used to restart a DDM instance.NonePOST /v1/{project_id}/instances/{instance_id}/actionStatus code: 200Status code: 400Status code: 500Status code: 200okStatu", + "doc_type":"api", + "kw":"Restarting a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Restarting a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0024.html", + "node_id":"ddm_api_01_0024.xml", + "product_code":"ddm", + "code":"21", + "des":"This API is used to reload table data of the destination DDM instance for cross-region DR.NonePOST /v1/{project_id}/instances/{instance_id}/reload-configStatus code: 200N", + "doc_type":"api", + "kw":"Reloading Table Data,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Reloading Table Data", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0025.html", + "node_id":"ddm_api_01_0025.xml", + "product_code":"ddm", + "code":"22", + "des":"This API is used to scale out a specified DDM instance.Make sure that the associated RDS instances are available and not undergoing other operations.POST /v2/{project_id}", + "doc_type":"api", + "kw":"Scaling Out a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Scaling Out a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0026.html", + "node_id":"ddm_api_01_0026.xml", + "product_code":"ddm", + "code":"23", + "des":"This API is used to remove nodes from a specified DDM instance.Make sure that the associated RDS instances are available and not undergoing other operations.POST /v2/{pro", + "doc_type":"api", + "kw":"Scaling In a DDM instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Scaling In a DDM instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0080.html", + "node_id":"ddm_api_01_0080.xml", + "product_code":"ddm", + "code":"24", + "des":"This API is used to modify the read policy of the DB instance associated with a DDM instance.Make sure that the associated RDS instances are available and not undergoing ", + "doc_type":"api", + "kw":"Modifying the Read Policy of the Associated DB Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Modifying the Read Policy of the Associated DB Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0081.html", + "node_id":"ddm_api_01_0081.xml", + "product_code":"ddm", + "code":"25", + "des":"This API is used to synchronize configuration information of all data nodes that are associated with a DDM instance.NonePOST /v1/{project_id}/instances/{instance_id}/rds/", + "doc_type":"api", + "kw":"Synchronizing Data Node Information,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Synchronizing Data Node Information", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0082.html", + "node_id":"ddm_api_01_0082.xml", + "product_code":"ddm", + "code":"26", + "des":"This API is used to query nodes of a DDM instance.NoneGET /v1/{project_id}/instances/{instance_id}/nodes?offset={offset}&limit={limit}Status code: 200Status code: 400Stat", + "doc_type":"api", + "kw":"Querying Nodes of a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying Nodes of a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0083.html", + "node_id":"ddm_api_01_0083.xml", + "product_code":"ddm", + "code":"27", + "des":"This API is used to query details of a DDM instance node.NoneGET /v1/{project_id}/instances/{instance_id}/nodes/{node_id}Status code: 200Status code: 400Status code: 500S", + "doc_type":"api", + "kw":"Querying Details of a DDM Instance Node,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying Details of a DDM Instance Node", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0084.html", + "node_id":"ddm_api_01_0084.xml", + "product_code":"ddm", + "code":"28", + "des":"This API is used to query parameters of a specified DDM instance.NoneGET /v3/{project_id}/instances/{instance_id}/configurations?offset={offset}&limit={limit}Status code:", + "doc_type":"api", + "kw":"Querying Parameters of a Specified DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying Parameters of a Specified DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0085.html", + "node_id":"ddm_api_01_0085.xml", + "product_code":"ddm", + "code":"29", + "des":"This API is used to modify parameters of a DDM instance.NonePUT /v3/{project_id}/instances/{instance_id}/configurationsStatus code: 200Status code: 400Status code: 500Sta", + "doc_type":"api", + "kw":"Modifying Parameters of a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Modifying Parameters of a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0015.html", + "node_id":"ddm_api_01_0015.xml", + "product_code":"ddm", + "code":"30", + "des":"This API is used to query engines that DDM supports.NoneGET /v2/{project_id}/engines?offset={offset}&limit={limit}Status code: 200Status code: 400Status code: 500Status c", + "doc_type":"api", + "kw":"Querying DDM Engine Information,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying DDM Engine Information", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0016.html", + "node_id":"ddm_api_01_0016.xml", + "product_code":"ddm", + "code":"31", + "des":"This API is used to query DDM node classes available in an AZ.NoneGET /v2/{project_id}/flavors?engine_id={engine_id}?offset={offset}&limit={limit}Status code: 200Status c", + "doc_type":"api", + "kw":"Querying DDM Node Classes Available in an AZ,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying DDM Node Classes Available in an AZ", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0017.html", + "node_id":"ddm_api_01_0017.xml", + "product_code":"ddm", + "code":"32", + "des":"This API is used to change the node class of a DDM instance.The node class can be changed only when the corresponding DDM instance is normal.The new node class cannot be ", + "doc_type":"api", + "kw":"Changing the Node Class of a DDM Instance,DDM Instances,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Changing the Node Class of a DDM Instance", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0027.html", + "node_id":"ddm_api_01_0027.xml", + "product_code":"ddm", + "code":"33", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Schemas", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Schemas", + "githuburl":"" + }, + { + "uri":"ddm_16_0001.html", + "node_id":"ddm_16_0001.xml", + "product_code":"ddm", + "code":"34", + "des":"This API is used to create a schema.Before creating a schema, ensure that you have associated RDS instances with your DDM instance and that the RDS instances are not asso", + "doc_type":"api", + "kw":"Creating a Schema,Schemas,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Creating a Schema", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0029.html", + "node_id":"ddm_api_01_0029.xml", + "product_code":"ddm", + "code":"35", + "des":"This API is used to query schemas of a DDM instance.NoneGET /v1/{project_id}/instances/{instance_id}/databases?offset={offset}&limit={limit}Status code: 200Status code: 4", + "doc_type":"api", + "kw":"Querying Schemas,Schemas,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying Schemas", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0030.html", + "node_id":"ddm_api_01_0030.xml", + "product_code":"ddm", + "code":"36", + "des":"This API is used to query details about a schema.NoneGET /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}Status code: 200Status code: 400Status code: 500St", + "doc_type":"api", + "kw":"Querying Details of a Schema,Schemas,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying Details of a Schema", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0031.html", + "node_id":"ddm_api_01_0031.xml", + "product_code":"ddm", + "code":"37", + "des":"This API is used to delete a schema to release all its resources.NoneDELETE /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}?delete_rds_data={delete_rds_da", + "doc_type":"api", + "kw":"Deleting a Schema,Schemas,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Deleting a Schema", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0100.html", + "node_id":"ddm_api_01_0100.xml", + "product_code":"ddm", + "code":"38", + "des":"This API is used to query DB instances that can be used for creating a schema.NoneGET /v1/{project_id}/instances/{instance_id}/rds?offset={offset}&limit={limit}Status cod", + "doc_type":"api", + "kw":"Querying DB Instances Available for Creating a Schema,Schemas,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Querying DB Instances Available for Creating a Schema", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0041.html", + "node_id":"ddm_api_01_0041.xml", + "product_code":"ddm", + "code":"39", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"DDM Accounts", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"DDM Accounts", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0101.html", + "node_id":"ddm_api_01_0101.xml", + "product_code":"ddm", + "code":"40", + "des":"If it is the first time to call this API, it is used to create an administrator and reset its password for a DDM instance. Then this API can only be used to update the ad", + "doc_type":"api", + "kw":"Managing the Administrator Password,DDM Accounts,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Managing the Administrator Password", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0102.html", + "node_id":"ddm_api_01_0102.xml", + "product_code":"ddm", + "code":"41", + "des":"This API is used to check whether an instance password is a weak password.POST /v3/{project_id}/weak-password-verificationStatus code: 200Status code: 400Status code: 500", + "doc_type":"api", + "kw":"Validating Password Strength,DDM Accounts,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Validating Password Strength", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0089.html", + "node_id":"ddm_api_01_0089.xml", + "product_code":"ddm", + "code":"42", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Monitoring", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Monitoring", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0090.html", + "node_id":"ddm_api_01_0090.xml", + "product_code":"ddm", + "code":"43", + "des":"This API is used to query the SQL statements that take a long time to execute on the DDM instance within a specified time range.NoneGET /v2/{project_id}/instances/{instan", + "doc_type":"api", + "kw":"Monitoring Slow Query Logs,Monitoring,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Monitoring Slow Query Logs", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0058.html", + "node_id":"ddm_api_01_0058.xml", + "product_code":"ddm", + "code":"44", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Appendix", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Appendix", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0059.html", + "node_id":"ddm_api_01_0059.xml", + "product_code":"ddm", + "code":"45", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Abnormal Request Results,Appendix,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Abnormal Request Results", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0060.html", + "node_id":"ddm_api_01_0060.xml", + "product_code":"ddm", + "code":"46", + "des":"Table 1 lists the status codes that may be returned.Table 2 lists the status codes that may be returned.", + "doc_type":"api", + "kw":"Status Codes,Appendix,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Status Codes", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0061.html", + "node_id":"ddm_api_01_0061.xml", + "product_code":"ddm", + "code":"47", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Error Codes,Appendix,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Error Codes", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0062.html", + "node_id":"ddm_api_01_0062.xml", + "product_code":"ddm", + "code":"48", + "des":"DDM node classes are listed in the following table and vary according to actual situations.", + "doc_type":"api", + "kw":"Node Classes,Appendix,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Node Classes", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0063.html", + "node_id":"ddm_api_01_0063.xml", + "product_code":"ddm", + "code":"49", + "des":"When calling APIs, you need to specify the project ID in some URLs. To do so, you need to obtain the project ID first Two methods are available:Obtaining the Project ID b", + "doc_type":"api", + "kw":"Obtaining a Project ID,Appendix,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Obtaining a Project ID", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0064.html", + "node_id":"ddm_api_01_0064.xml", + "product_code":"ddm", + "code":"50", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Status Description,Appendix,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Status Description", + "githuburl":"" + }, + { + "uri":"ddm_api_01_0069.html", + "node_id":"ddm_api_01_0069.xml", + "product_code":"ddm", + "code":"51", + "des":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "doc_type":"api", + "kw":"Change History,API Reference", + "search_title":"", + "metedata":[ + { + "documenttype":"api", + "prodname":"ddm" + } + ], + "title":"Change History", + "githuburl":"" + } +] \ No newline at end of file diff --git a/docs/ddm/api-ref/CLASS.TXT.json b/docs/ddm/api-ref/CLASS.TXT.json new file mode 100644 index 000000000..58127b124 --- /dev/null +++ b/docs/ddm/api-ref/CLASS.TXT.json @@ -0,0 +1,461 @@ +[ + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Before You Start", + "uri":"ddm_api_01_0001.html", + "doc_type":"api", + "p_code":"", + "code":"1" + }, + { + "desc":"Welcome to Distributed Database Middleware (DDM). This document describes functions, syntax, parameters, and examples of DDM.If you plan to access DDM through an API, ens", + "product_code":"ddm", + "title":"Overview", + "uri":"ddm_api_01_0002.html", + "doc_type":"api", + "p_code":"1", + "code":"2" + }, + { + "desc":"DDM supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS.", + "product_code":"ddm", + "title":"API Calling", + "uri":"ddm_api_01_0003.html", + "doc_type":"api", + "p_code":"1", + "code":"3" + }, + { + "desc":"An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.", + "product_code":"ddm", + "title":"Endpoints", + "uri":"ddm_api_01_0004.html", + "doc_type":"api", + "p_code":"1", + "code":"4" + }, + { + "desc":"The number of DDM instances that you can create is determined by your quota.For more constraints, see API description.", + "product_code":"ddm", + "title":"Constraints", + "uri":"ddm_api_01_0005.html", + "doc_type":"api", + "p_code":"1", + "code":"5" + }, + { + "desc":"AccountAn account is created upon successful registration. The account has full access permissions for all of its cloud services and resources. It can be used to reset us", + "product_code":"ddm", + "title":"Concepts", + "uri":"ddm_api_01_0006.html", + "doc_type":"api", + "p_code":"1", + "code":"6" + }, + { + "desc":"DDM provides REST APIs. With DDM APIs, you can use all DDM functions, including creating DDM instances and schemas.", + "product_code":"ddm", + "title":"API Overview", + "uri":"ddm_api_01_0007.html", + "doc_type":"api", + "p_code":"", + "code":"7" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Calling APIs", + "uri":"ddm_api_01_0008.html", + "doc_type":"api", + "p_code":"", + "code":"8" + }, + { + "desc":"This section describes the structure of a REST API and how to call an API. Before calling an API, you need to obtain the user token using the IAM API.A request URI is in ", + "product_code":"ddm", + "title":"Making an API Request", + "uri":"ddm_03_0002.html", + "doc_type":"api", + "p_code":"8", + "code":"9" + }, + { + "desc":"Token authentication is required to call APIs.Authentication using tokens: General requests are authenticated using tokens.The validity period of a token is 24 hours. If ", + "product_code":"ddm", + "title":"Authentication", + "uri":"ddm_api_01_0011.html", + "doc_type":"api", + "p_code":"8", + "code":"10" + }, + { + "desc":"After sending a request, you will receive a response, including the status code, response header, and response body.A status code is a group of digits ranging from 1xx to", + "product_code":"ddm", + "title":"Returned Values", + "uri":"ddm_api_01_0012.html", + "doc_type":"api", + "p_code":"8", + "code":"11" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"APIs (Recommended)", + "uri":"ddm_api_02_0000.html", + "doc_type":"api", + "p_code":"", + "code":"12" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"DDM Instances", + "uri":"ddm_api_01_0014.html", + "doc_type":"api", + "p_code":"12", + "code":"13" + }, + { + "desc":"This API is used to create a DDM instance.DDM runs in VPCs. Before you create a DDM instance, ensure that a VPC is available and a subnet and security group have been con", + "product_code":"ddm", + "title":"Creating a DDM instance", + "uri":"ddm_04_0001.html", + "doc_type":"api", + "p_code":"13", + "code":"14" + }, + { + "desc":"This API is used to query DDM instances.NoneGET /v1/{project_id}/instances?offset={offset}&limit={limit}Status code: 200Status code: 400Status code: 500Status code: 200OK", + "product_code":"ddm", + "title":"Querying DDM Instances", + "uri":"ddm_api_01_0018.html", + "doc_type":"api", + "p_code":"13", + "code":"15" + }, + { + "desc":"This API is used to query details about a DDM instance.NoneGET /v1/{project_id}/instances/{instance_id}Status code: 200Status code: 400Status code: 500Status code: 200OKS", + "product_code":"ddm", + "title":"Querying Details of a DDM Instance", + "uri":"ddm_api_01_0019.html", + "doc_type":"api", + "p_code":"13", + "code":"16" + }, + { + "desc":"This API is used to modify the name of a DDM instance.NonePUT /v1/{project_id}/instances/{instance_id}/modify-nameStatus code: 200Status code: 400Status code: 500Status c", + "product_code":"ddm", + "title":"Modifying the Name of a DDM Instance", + "uri":"ddm_api_01_0020.html", + "doc_type":"api", + "p_code":"13", + "code":"17" + }, + { + "desc":"This API is used to modify the security group of a DDM instance.NonePUT /v1/{project_id}/instances/{instance_id}/modify-security-groupStatus code: 200Status code: 400Stat", + "product_code":"ddm", + "title":"Modifying the Security Group of a DDM Instance", + "uri":"ddm_api_01_0021.html", + "doc_type":"api", + "p_code":"13", + "code":"18" + }, + { + "desc":"This API is used to delete a DDM instance to release all its resources.NoneDELETE /v1/{project_id}/instances/{instance_id}Status code: 200Status code: 400Status code: 500", + "product_code":"ddm", + "title":"Deleting a DDM Instance", + "uri":"ddm_api_01_0022.html", + "doc_type":"api", + "p_code":"13", + "code":"19" + }, + { + "desc":"This API is used to restart a DDM instance.NonePOST /v1/{project_id}/instances/{instance_id}/actionStatus code: 200Status code: 400Status code: 500Status code: 200okStatu", + "product_code":"ddm", + "title":"Restarting a DDM Instance", + "uri":"ddm_api_01_0023.html", + "doc_type":"api", + "p_code":"13", + "code":"20" + }, + { + "desc":"This API is used to reload table data of the destination DDM instance for cross-region DR.NonePOST /v1/{project_id}/instances/{instance_id}/reload-configStatus code: 200N", + "product_code":"ddm", + "title":"Reloading Table Data", + "uri":"ddm_api_01_0024.html", + "doc_type":"api", + "p_code":"13", + "code":"21" + }, + { + "desc":"This API is used to scale out a specified DDM instance.Make sure that the associated RDS instances are available and not undergoing other operations.POST /v2/{project_id}", + "product_code":"ddm", + "title":"Scaling Out a DDM Instance", + "uri":"ddm_api_01_0025.html", + "doc_type":"api", + "p_code":"13", + "code":"22" + }, + { + "desc":"This API is used to remove nodes from a specified DDM instance.Make sure that the associated RDS instances are available and not undergoing other operations.POST /v2/{pro", + "product_code":"ddm", + "title":"Scaling In a DDM instance", + "uri":"ddm_api_01_0026.html", + "doc_type":"api", + "p_code":"13", + "code":"23" + }, + { + "desc":"This API is used to modify the read policy of the DB instance associated with a DDM instance.Make sure that the associated RDS instances are available and not undergoing ", + "product_code":"ddm", + "title":"Modifying the Read Policy of the Associated DB Instance", + "uri":"ddm_api_01_0080.html", + "doc_type":"api", + "p_code":"13", + "code":"24" + }, + { + "desc":"This API is used to synchronize configuration information of all data nodes that are associated with a DDM instance.NonePOST /v1/{project_id}/instances/{instance_id}/rds/", + "product_code":"ddm", + "title":"Synchronizing Data Node Information", + "uri":"ddm_api_01_0081.html", + "doc_type":"api", + "p_code":"13", + "code":"25" + }, + { + "desc":"This API is used to query nodes of a DDM instance.NoneGET /v1/{project_id}/instances/{instance_id}/nodes?offset={offset}&limit={limit}Status code: 200Status code: 400Stat", + "product_code":"ddm", + "title":"Querying Nodes of a DDM Instance", + "uri":"ddm_api_01_0082.html", + "doc_type":"api", + "p_code":"13", + "code":"26" + }, + { + "desc":"This API is used to query details of a DDM instance node.NoneGET /v1/{project_id}/instances/{instance_id}/nodes/{node_id}Status code: 200Status code: 400Status code: 500S", + "product_code":"ddm", + "title":"Querying Details of a DDM Instance Node", + "uri":"ddm_api_01_0083.html", + "doc_type":"api", + "p_code":"13", + "code":"27" + }, + { + "desc":"This API is used to query parameters of a specified DDM instance.NoneGET /v3/{project_id}/instances/{instance_id}/configurations?offset={offset}&limit={limit}Status code:", + "product_code":"ddm", + "title":"Querying Parameters of a Specified DDM Instance", + "uri":"ddm_api_01_0084.html", + "doc_type":"api", + "p_code":"13", + "code":"28" + }, + { + "desc":"This API is used to modify parameters of a DDM instance.NonePUT /v3/{project_id}/instances/{instance_id}/configurationsStatus code: 200Status code: 400Status code: 500Sta", + "product_code":"ddm", + "title":"Modifying Parameters of a DDM Instance", + "uri":"ddm_api_01_0085.html", + "doc_type":"api", + "p_code":"13", + "code":"29" + }, + { + "desc":"This API is used to query engines that DDM supports.NoneGET /v2/{project_id}/engines?offset={offset}&limit={limit}Status code: 200Status code: 400Status code: 500Status c", + "product_code":"ddm", + "title":"Querying DDM Engine Information", + "uri":"ddm_api_01_0015.html", + "doc_type":"api", + "p_code":"13", + "code":"30" + }, + { + "desc":"This API is used to query DDM node classes available in an AZ.NoneGET /v2/{project_id}/flavors?engine_id={engine_id}?offset={offset}&limit={limit}Status code: 200Status c", + "product_code":"ddm", + "title":"Querying DDM Node Classes Available in an AZ", + "uri":"ddm_api_01_0016.html", + "doc_type":"api", + "p_code":"13", + "code":"31" + }, + { + "desc":"This API is used to change the node class of a DDM instance.The node class can be changed only when the corresponding DDM instance is normal.The new node class cannot be ", + "product_code":"ddm", + "title":"Changing the Node Class of a DDM Instance", + "uri":"ddm_api_01_0017.html", + "doc_type":"api", + "p_code":"13", + "code":"32" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Schemas", + "uri":"ddm_api_01_0027.html", + "doc_type":"api", + "p_code":"12", + "code":"33" + }, + { + "desc":"This API is used to create a schema.Before creating a schema, ensure that you have associated RDS instances with your DDM instance and that the RDS instances are not asso", + "product_code":"ddm", + "title":"Creating a Schema", + "uri":"ddm_16_0001.html", + "doc_type":"api", + "p_code":"33", + "code":"34" + }, + { + "desc":"This API is used to query schemas of a DDM instance.NoneGET /v1/{project_id}/instances/{instance_id}/databases?offset={offset}&limit={limit}Status code: 200Status code: 4", + "product_code":"ddm", + "title":"Querying Schemas", + "uri":"ddm_api_01_0029.html", + "doc_type":"api", + "p_code":"33", + "code":"35" + }, + { + "desc":"This API is used to query details about a schema.NoneGET /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}Status code: 200Status code: 400Status code: 500St", + "product_code":"ddm", + "title":"Querying Details of a Schema", + "uri":"ddm_api_01_0030.html", + "doc_type":"api", + "p_code":"33", + "code":"36" + }, + { + "desc":"This API is used to delete a schema to release all its resources.NoneDELETE /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}?delete_rds_data={delete_rds_da", + "product_code":"ddm", + "title":"Deleting a Schema", + "uri":"ddm_api_01_0031.html", + "doc_type":"api", + "p_code":"33", + "code":"37" + }, + { + "desc":"This API is used to query DB instances that can be used for creating a schema.NoneGET /v1/{project_id}/instances/{instance_id}/rds?offset={offset}&limit={limit}Status cod", + "product_code":"ddm", + "title":"Querying DB Instances Available for Creating a Schema", + "uri":"ddm_api_01_0100.html", + "doc_type":"api", + "p_code":"33", + "code":"38" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"DDM Accounts", + "uri":"ddm_api_01_0041.html", + "doc_type":"api", + "p_code":"12", + "code":"39" + }, + { + "desc":"If it is the first time to call this API, it is used to create an administrator and reset its password for a DDM instance. Then this API can only be used to update the ad", + "product_code":"ddm", + "title":"Managing the Administrator Password", + "uri":"ddm_api_01_0101.html", + "doc_type":"api", + "p_code":"39", + "code":"40" + }, + { + "desc":"This API is used to check whether an instance password is a weak password.POST /v3/{project_id}/weak-password-verificationStatus code: 200Status code: 400Status code: 500", + "product_code":"ddm", + "title":"Validating Password Strength", + "uri":"ddm_api_01_0102.html", + "doc_type":"api", + "p_code":"39", + "code":"41" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Monitoring", + "uri":"ddm_api_01_0089.html", + "doc_type":"api", + "p_code":"12", + "code":"42" + }, + { + "desc":"This API is used to query the SQL statements that take a long time to execute on the DDM instance within a specified time range.NoneGET /v2/{project_id}/instances/{instan", + "product_code":"ddm", + "title":"Monitoring Slow Query Logs", + "uri":"ddm_api_01_0090.html", + "doc_type":"api", + "p_code":"42", + "code":"43" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Appendix", + "uri":"ddm_api_01_0058.html", + "doc_type":"api", + "p_code":"", + "code":"44" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Abnormal Request Results", + "uri":"ddm_api_01_0059.html", + "doc_type":"api", + "p_code":"44", + "code":"45" + }, + { + "desc":"Table 1 lists the status codes that may be returned.Table 2 lists the status codes that may be returned.", + "product_code":"ddm", + "title":"Status Codes", + "uri":"ddm_api_01_0060.html", + "doc_type":"api", + "p_code":"44", + "code":"46" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Error Codes", + "uri":"ddm_api_01_0061.html", + "doc_type":"api", + "p_code":"44", + "code":"47" + }, + { + "desc":"DDM node classes are listed in the following table and vary according to actual situations.", + "product_code":"ddm", + "title":"Node Classes", + "uri":"ddm_api_01_0062.html", + "doc_type":"api", + "p_code":"44", + "code":"48" + }, + { + "desc":"When calling APIs, you need to specify the project ID in some URLs. To do so, you need to obtain the project ID first Two methods are available:Obtaining the Project ID b", + "product_code":"ddm", + "title":"Obtaining a Project ID", + "uri":"ddm_api_01_0063.html", + "doc_type":"api", + "p_code":"44", + "code":"49" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Status Description", + "uri":"ddm_api_01_0064.html", + "doc_type":"api", + "p_code":"44", + "code":"50" + }, + { + "desc":"HUAWEI CLOUD Help Center presents technical documents to help you quickly get started with HUAWEI CLOUD services. The technical documents include Service Overview, Price Details, Purchase Guide, User Guide, API Reference, Best Practices, FAQs, and Videos.", + "product_code":"ddm", + "title":"Change History", + "uri":"ddm_api_01_0069.html", + "doc_type":"api", + "p_code":"", + "code":"51" + } +] \ No newline at end of file diff --git a/docs/ddm/api-ref/PARAMETERS.txt b/docs/ddm/api-ref/PARAMETERS.txt new file mode 100644 index 000000000..6da8d5f07 --- /dev/null +++ b/docs/ddm/api-ref/PARAMETERS.txt @@ -0,0 +1,3 @@ +version="" +language="en-us" +type="" \ No newline at end of file diff --git a/docs/ddm/api-ref/ddm_03_0002.html b/docs/ddm/api-ref/ddm_03_0002.html new file mode 100644 index 000000000..9f842797f --- /dev/null +++ b/docs/ddm/api-ref/ddm_03_0002.html @@ -0,0 +1,191 @@ + + +

Making an API Request

+

This section describes the structure of a REST API and how to call an API. Before calling an API, you need to obtain the user token using the IAM API.

+

Request URI

A request URI is in the following format:

+

{URI-scheme} :// {Endpoint} / {resource-path} ? {query-string}

+

Although a request URI is a part of a request header, most programming languages or frameworks require the request URI to be separately transmitted, rather than being conveyed in a request message.

+ +
+ + + + + + + + + + + + + + + + +
Table 1 URI parameter description

Parameter

+

Description

+

URI-scheme

+

Protocol used to transmit requests. All APIs use HTTPS.

+

Endpoint

+

Domain name or IP address of the server bearing the REST service endpoint. The endpoint varies depending on the service and service region. Endpoint: Endpoint of the Objective-func function. For details, see Regions and Endpoints.

+

resource-path

+

Access path of an API for performing a specified operation. Obtain the path from the URI of an API. For example, the resource-path of the API used to obtain a user token is /v3/auth/tokens.

+

Query string

+

Query parameter, which is optional. Ensure that a question mark (?) is included before each query parameter that is in the format of "Parameter name=Parameter value". For example, ? limit=10 indicates that a maximum of 10 data records will be displayed.

+
+
+
+
+

To simplify the URI display, each API is provided only with a resource-path and a request method. This is because the URI-scheme value of all APIs is HTTPS, and the endpoints in a region are the same. Therefore, the two parts are omitted.

+
+

Request Method

HTTP methods, which are also called operations or actions, specify the type of operations that you are requesting. +
+ + + + + + + + + + + + + + + + + + + +
Table 2 HTTP methods

Method

+

Description

+

GET

+

Requests a server to return specified resources.

+

PUT

+

Requests a server to update specified resources.

+

POST

+

Requests the server to add a resource or perform special operations.

+

DELETE

+

Requests a server to delete specified resources, for example, an object.

+

PATCH

+

Requests a server to update partial content of a specified resource.

+

If the resource does not exist, a new resource will be created.

+
+
+
+

For example, for the URI of the API used to obtain a user token, the request method is POST. The request is as follows:

+
1
POST https://{{Endpoint}}/v3/auth/tokens
+
+ +
+
+

Request Headers

You can also add additional header fields to a request, such as the fields required by a specified URI or HTTP method. For example, to request for the authentication information, add Content-Type, which specifies the request body type.

+

You can also add additional fields to the request header, for example, the fields required by a specified URI and an HTTP method. Table 3 lists common request header fields.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Common request headers

Field

+

Description

+

Mandatory

+

Example

+

Content-Type

+

MIME type of the request body. You are advised to use the default value application/json. For APIs used to upload objects or images, the value varies depending on the flow type.

+

Yes

+

application/json

+

Content-Length

+

Length of the request body. The unit is byte.

+

This parameter is optional for POST requests, but must be left blank for GET requests.

+

3495

+

X-Project-Id

+

Project ID. Obtain the project ID by following the instructions in Obtaining a Project ID.

+

No

+

e9993fc787d94b6c886cbaa340f9c0f4

+

X-Auth-Token

+

User token

+

After the request is processed, the value of X-Subject-Token in the header is the token value.

+

Yes

+

The following is part of an example token:

+

MIIPAgYJKoZIhvcNAQcCo...ggg1BBIINPXsidG9rZ

+
+
+
+

The API used to obtain a user token does not require authentication. Therefore, this API only requires adding the Content-Type field. The request with the added Content-Type header is as follows:

+
POST https://{{endpoint}}/v3/auth/tokens
+Content-Type: application/json
+

(Optional) Request Body

This part is optional. The body of a request is often sent in a structured format (for example, JSON or XML) as specified in the Content-Type header field.

+

The request body varies depending on APIs. Some APIs do not require the request body, such as the APIs requested using GET and DELETE methods.

+

For the API used to obtain a user token, the request parameters and parameter description can be obtained in the API request. The following provides an example request with a body included. Replace username, domainname, ******** (login password), and xxxxxxxxxxxxxxxxxx (project name) with actual values. You can obtain the values from Regions and Endpoints.

+

The scope parameter specifies where a token takes effect. You can set scope to an account or a project under an account. In the following example, the token takes effect only for the resources in a specified project.

+
+
+POST https://{{endpoint}}/v3/auth/tokens
+Content-Type: application/json
+
+{
+    "auth": {
+        "identity": {
+            "methods": [
+                "password"
+            ],
+            "password": {
+                "user": {
+                    "name": "username",
+                    "password": "********",
+                    "domain": {
+                        "name": "domainname"
+                    }
+                }
+            }
+        },
+        "scope": {
+            "project": {
+                "name": "xxxxxxxxxxxxxxxxxx"
+            }
+        }
+    }
+}
+

If all data required for the API request is available, you can send the request to call the API through curl, Postman, or coding. For the API of obtaining a user token, x-subject-token in the response header is the required user token. This token can then be used to authenticate the calling of other APIs.

+
+

Initiating Requests

You can initiate a request based on the constructed request message in one of the following ways:

+
  • cURL

    cURL is a command-line tool used to perform URL operations and transmit information. It serves as an HTTP client that can send HTTP requests to the server and receive response messages. cURL is used for API debugging. For more information about cURL, visit https://curl.haxx.se/.

    +

    For security purposes, run the curl command on the server to query information, and then clear operation records, including but not limited to records in the ~/.bash_history and /var/log/messages directories (if any).

    +
    +
  • Code

    You can call APIs using code to assemble, send, and process request messages.

    +
  • REST client

    Both Mozilla Firefox and Google Chrome provide a graphical browser plug-in, REST client, to send and process requests. For Mozilla Firefox, see Firefox REST Client. For Google Chrome, see Chrome REST Client.

    +
+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_04_0001.html b/docs/ddm/api-ref/ddm_04_0001.html new file mode 100644 index 000000000..2744bc5ba --- /dev/null +++ b/docs/ddm/api-ref/ddm_04_0001.html @@ -0,0 +1,378 @@ + + +

Creating a DDM instance

+

Function

This API is used to create a DDM instance.

+
+

Constraints

DDM runs in VPCs. Before you create a DDM instance, ensure that a VPC is available and a subnet and security group have been configured.

+
+

URI

POST /v1/{project_id}/instances

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

instance

+

Yes

+

CreateInstanceDetail object

+

Instance information

+

extend_param

+

No

+

object

+

The function has not been supported, and this field is reserved.

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 CreateInstanceDetail

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Name of a DDM instance, which:

+
  • Can include 4 to 64 characters.
  • Must start with a letter.
  • Can contain only letters, digits, and hyphens (-).
+

Minimum length: 4 characters

+

Maximum length: 64 characters

+

flavor_id

+

Yes

+

String

+

Class ID

+

node_num

+

Yes

+

Integer

+

Number of nodes

+

engine_id

+

Yes

+

String

+

Engine ID

+

available_zones

+

Yes

+

Array of strings

+

AZ code. The value cannot be empty. For details, see Regions and Endpoints.

+

vpc_id

+

Yes

+

String

+

VPC ID

+

security_group_id

+

Yes

+

String

+

Security group ID

+

subnet_id

+

Yes

+

String

+

Subnet ID

+

param_group_id

+

No

+

String

+

Parameter group ID

+

time_zone

+

No

+

String

+

UTC time zone. The default value is UTC. The value can be UTC, UTC-12:00, UTC-11:00, UTC-10:00, UTC-09:00, UTC-08:00, UTC-07:00, UTC-06:00, UTC-05:00, UTC-04:00, UTC-03:00, UTC-02:00, UTC-01:00, UTC+01:00, UTC+02:00, UTC+03:00, UTC+05:00, UTC+06:00, UTC+07:00, UTC+08:00, UTC+09:00, UTC+10:00, UTC+11:00, and UTC+12:00.

+

admin_user_name

+

No

+

String

+

Username of the administrator. The username:

+
  • Can include 1 to 32 characters.
  • Must start with a letter.
  • Can contain only letters, digits, and underscores (_).
+

admin_user_password

+

No

+

String

+

Password of the administrator. The password:

+
  • Can include 8 to 32 characters.
  • Must be a combination of uppercase letters, lowercase letters, digits, and the following special characters: ~!@#%^*-_=+? Must be a strong password to improve security and prevent security risks such as brute force cracking.
+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

id

+

String

+

Instance ID.

+

order_id

+

String

+

The function has not been supported, and this field is reserved.

+

job_id

+

String

+

ID of the job for creating an instance.

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

POST https://{endpoint}/v1/{project_id}/instances
+
+{
+  "instance" : {
+    "name" : "ddm-test-001",
+    "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606",
+    "node_num" : "4,",
+    "engine_id" : "2325a707-0361-8be6-dd01-13474bbac437",
+   
+    "available_zones" : [ "az1xahz" ],
+    "vpc_id" : "e1d886ec-cfe7-4cd4-b748-fc55a10b4172",
+    "security_group_id" : "035b70ed-319b-4086-9fd7-62a2e8548b2e",
+    "subnet_id" : "f942f970-1a02-4eee-8927-xxxxxxxx",
+    "param_group_id" : "035b70ed-319b-4086-9fd7-xxxxxxxx"
+  }
+}
+ +
+

Example Response

Status code: 200

+

OK

+
{
+  "job_id" : "2x414788a5112333a02390e2eb0ea227",
+  "id" : "7191674e562d495d9e8e4b23ece6522ein09",
+  "order_id" : null
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_16_0001.html b/docs/ddm/api-ref/ddm_16_0001.html new file mode 100644 index 000000000..0f186f301 --- /dev/null +++ b/docs/ddm/api-ref/ddm_16_0001.html @@ -0,0 +1,373 @@ + + +

Creating a Schema

+

Function

This API is used to create a schema.

+
+

Constraints

Before creating a schema, ensure that you have associated RDS instances with your DDM instance and that the RDS instances are not associated with other DDM instances.

+
+

URI

POST /v1/{project_id}/instances/{instance_id}/databases

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token

+

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

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

databases

+

Yes

+

Array of CreateDatabaseDetail objects

+

Schema information

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 CreateDatabaseDetail

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Schema name, which:

+
  • Can include 2 to 48 characters.
  • Must start with a letter.
  • Contains only lowercase letters, digits, and underscores (_).
  • Cannot contain keywords information_schema, mysql, performance_schema, or sys.
+

Minimum length: 2 characters

+

Maximum length: 48 characters

+

shard_mode

+

Yes

+

String

+

Sharding mode of the schema. The value can be:

+
  • cluster: indicates that the schema is in sharded mode.
  • single: indicates that the schema is in unsharded mode.
+

Enumerated values:

+
  • cluster
  • single
+

shard_number

+

Yes

+

Integer

+

Number of shards in the same working mode

+
  • If shard_unit is not empty, the value is the product of shard_unit multiplied by the associated RDS instances.
  • If shard_unit is left blank, the value must be greater than the number of associated RDS instances and less than or equal to the product of the associated RDS instances multiplied by 64.
+

shard_unit

+

No

+

Integer

+

Number of shards per RDS instance This parameter is optional.

+
  • The value is 1 if the schema is unsharded.
  • The value ranges from 1 to 64 if the schema is sharded.
+

Minimum value: 1

+

Maximum value: 64

+

used_rds

+

Yes

+

Array of DatabaseInstabcesParam objects

+

RDS instances associated with the schema

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 5 DatabaseInstabcesParam

Parameter

+

Mandatory

+

Type

+

Description

+

id

+

Yes

+

String

+

ID of the RDS instance associated with the schema

+

adminUser

+

Yes

+

String

+

Username for logging in to the associated RDS instance

+

adminPassword

+

Yes

+

String

+

Password for logging in to the associated RDS instance

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

databases

+

Array of CreateDatabaseDetailResponses objects

+

Schema information

+

job_id

+

String

+

ID of the job for creating a schema.

+
+
+ +
+ + + + + + + + + +
Table 7 CreateDatabaseDetailResponses

Parameter

+

Type

+

Description

+

name

+

String

+

Schema name

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 8 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 9 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

The following is an example request of creating a schema and associating it with an existing DDM account.

+
POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/databases
+
+{
+  "databases" : [ {
+    "name" : "mytestdb",
+    "shard_mode" : "cluster",
+    "shard_number" : 8,
+    "shard_unit" : 8,
+    "used_rds" : [ {
+      "id" : "f296c394f13f48449d715bf99af07e59in01",
+      "adminUser" : "root",
+      "adminPassword" : "PassWord_234"
+    } ]
+  } ]
+}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "databases" : [ {
+    "name" : "mytestdb"
+  } ],
+  "job_id" : "68a55553-4057-4d05-b074-d6£090e08a50"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0001.html b/docs/ddm/api-ref/ddm_api_01_0001.html new file mode 100644 index 000000000..f6dd2da06 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0001.html @@ -0,0 +1,19 @@ + + +

Before You Start

+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0002.html b/docs/ddm/api-ref/ddm_api_01_0002.html new file mode 100644 index 000000000..41672430a --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0002.html @@ -0,0 +1,15 @@ + + +

Overview

+

Welcome to Distributed Database Middleware (DDM). This document describes functions, syntax, parameters, and examples of DDM.

+

If you plan to access DDM through an API, ensure that you are familiar with DDM concepts.

+

This document describes how to use application programming interfaces (APIs) to perform creating, querying, deleting, and updating operations.

+
  • This document will be updated when APIs of new functions are added, for example, adding response parameters.
  • To reduce impacts caused by API changes, DDM is backward compatible with existing APIs. When using DDM, you should accept and ignore unused parameters and parameter values in JSON responses.
+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0003.html b/docs/ddm/api-ref/ddm_api_01_0003.html new file mode 100644 index 000000000..304f86f2a --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0003.html @@ -0,0 +1,11 @@ + + +

API Calling

+

DDM supports Representational State Transfer (REST) APIs, allowing you to call APIs using HTTPS.

+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0004.html b/docs/ddm/api-ref/ddm_api_01_0004.html new file mode 100644 index 000000000..eddbb3d1d --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0004.html @@ -0,0 +1,11 @@ + + +

Endpoints

+

An endpoint is the request address for calling an API. Endpoints vary depending on services and regions. For the endpoints of all services, see Regions and Endpoints.

+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0005.html b/docs/ddm/api-ref/ddm_api_01_0005.html new file mode 100644 index 000000000..2830ef6d6 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0005.html @@ -0,0 +1,11 @@ + + +

Constraints

+
  • The number of DDM instances that you can create is determined by your quota.
  • For more constraints, see API description.
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0006.html b/docs/ddm/api-ref/ddm_api_01_0006.html new file mode 100644 index 000000000..54cc2b87a --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0006.html @@ -0,0 +1,19 @@ + + +

Concepts

+
  • Account

    An account is created upon successful registration. The account has full access permissions for all of its cloud services and resources. It can be used to reset user passwords and grant user permissions. The account is a payment entity and should not be used directly to perform routine management. For security purposes, create users and grant them permissions for routine management.

    +
  • IAM user

    An IAM user is created using an account to use cloud services. Each IAM user has its own identity credentials (password and access keys).

    +
  • Region

    A region is a geographic area in which cloud resources are deployed. Availability zones (AZs) in the same region can communicate with each other over an intranet, while AZs in different regions are isolated from each other. Deploying cloud resources in different regions can better suit certain user requirements or comply with local laws or regulations.

    +
  • AZ

    An AZ comprises one or more physical data centers equipped with independent cooling, fire extinguishing, moisture-proof, and electricity facilities. Computing, network, storage, and other resources in an AZ are logically divided into multiple clusters. AZs within a region are interconnected using high-speed optical fibers to allow users to build cross-AZ high-availability systems.

    +
  • Project

    A project corresponds to a region. Projects group and isolate resources (including compute, storage, and network resources) across physical regions. Users can be granted permissions in a default project to access all resources in the region associated with the project. For more refined access control, create subprojects under a project and purchase resources in the subprojects. Users can then be assigned permissions to access only specific resources in the subprojects.

    +
    Figure 1 Project isolating model
    +
    • Enterprise project

      Enterprise projects group and manage resources across regions. Resources in enterprise projects are logically isolated from each other. An enterprise project can contain resources of multiple regions, and resources can be added to or removed from the enterprise project.

      +
    +
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0007.html b/docs/ddm/api-ref/ddm_api_01_0007.html new file mode 100644 index 000000000..72da352fa --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0007.html @@ -0,0 +1,163 @@ + + +

API Overview

+

DDM provides REST APIs. With DDM APIs, you can use all DDM functions, including creating DDM instances and schemas.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 API description

Type

+

Subtype

+

Description

+

APIs for managing DDM instances

+

Creating a DDM instance

+

This API is used to create a DDM instance.

+

DDM runs in VPCs. Before you apply for a DDM instance, ensure that a VPC is available and a subnet and security group have been configured.

+

Querying DDM instances

+

This API is used to query DDM instances.

+

Querying details of a DDM instance

+

This API is used to query details about a DDM instance.

+

Modifying the name of a DDM instance

+

This API is used to modify the name of an existing DDM instance.

+

Modifying the security group of a DDM instance

+

This API is used to modify the security group of a DDM instance.

+

Deleting a DDM instance

+

This API is used to delete a DDM instance to release all its resources.

+

Restarting a DDM instance

+

This API is used to restart a DDM instance.

+

Reloading table data

+

This API is used to reload table data of the required DDM instance for cross-region DR.

+

Scaling out a DDM instance

+

This API is used to add nodes to a specified DDM instance.

+

Scaling in a DDM instance

+

This API is used to remove nodes from a specified DDM instance.

+

Modifying the read policy of the associated DB instance

+

This API is used to modify the read policy of the DB instance associated with a DDM instance.

+

Synchronizing data node information

+

This API is used to synchronize configuration information of all data nodes that are associated with the current DDM instance.

+

Querying nodes of a DDM instance

+

This API is used to query nodes of a DDM instance.

+

Querying details of a DDM instance node

+

This API is used to query details of a DDM instance node.

+

Querying parameters of a specified DDM instance

+

This API is used to query parameters of a specified DDM instance.

+

Modifying parameters of a DDM instance

+

This API is used to modify parameters of a DDM instance.

+

Querying DDM engine information

+

This API is used to query information about DDM engine.

+

Querying DDM node classes available in an AZ

+

This API is used to query DDM node classes available in an AZ.

+

Changing the node class of a DDM Instance

+

This API is used to change the node class of a DDM instance.

+

APIs for managing schemas

+

Creating a schema

+

This API is used to create a schema.

+

Before creating a schema, ensure that there is an RDS instance available and that the instance is running properly and not associated with any DDM instance.

+

Querying schemas of a DDM instance

+

This API is used to query schemas of a DDM instance.

+

Querying details of a schema

+

This API is used to query details about a schema.

+

Deleting a schema

+

This API is used to delete a schema to release all its resources.

+

Querying DB instances available for creating a schema

+

This API is used to query DB instances that can be used for creating a schema.

+

APIs for managing DDM accounts

+

Managing the administrator password

+

If it is the first time to call this API, it is used to create an administrator and reset its password for a DDM instance. Then this API can only be used to update the administrator password.

+

Validating password strength

+

This API is used to validate whether an instance password is a weak password.

+

Monitoring

+

Monitoring slow query logs

+

This API is used to query the SQL statements that take a long time to execute on the DDM instance within a specified time range.

+
+
+
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0008.html b/docs/ddm/api-ref/ddm_api_01_0008.html new file mode 100644 index 000000000..1ea2aa849 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0008.html @@ -0,0 +1,15 @@ + + +

Calling APIs

+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0011.html b/docs/ddm/api-ref/ddm_api_01_0011.html new file mode 100644 index 000000000..b48bbe620 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0011.html @@ -0,0 +1,50 @@ + + +

Authentication

+

Token authentication is required to call APIs.

+

Authentication using tokens: General requests are authenticated using tokens.

+

Token-based Authentication

The validity period of a token is 24 hours. If a token is required, the system caches the token to avoid frequent calling.

+
+

A token specifies temporary permissions in a computer system. Token-based authentication adds a token in a request as its header during API calling to obtain the permissions for operating APIs on IAM.

+
{ 
+     "auth": { 
+         "identity": { 
+             "methods": [ 
+                 "password" 
+             ], 
+             "password": { 
+                 "user": { 
+                     "name": "username", 
+                     "password": "********", 
+                     "domain": { 
+                         "name": "domainname" 
+                     } 
+                 } 
+             } 
+         }, 
+         "scope": { 
+             "project": { 
+                 "name": "xxxxxxxx" 
+             } 
+         } 
+     } 
+ }
+
+

In Making an API Request, the process of calling the API used to obtain a user token is described.

+

After obtaining the token, add the X-Auth-Token header in a request to specify the token when calling other APIs. For example, if the token is ABCDEFJ...., X-Auth-Token: ABCDEFJ.... can be added to a request as follows:

+
1
+2
+3
POST https://{{Endpoint}}/v3/auth/projects
+Content-Type: application/json
+X-Auth-Token: ABCDEFJ....
+
+ +
+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0012.html b/docs/ddm/api-ref/ddm_api_01_0012.html new file mode 100644 index 000000000..b009cb6a7 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0012.html @@ -0,0 +1,39 @@ + + +

Returned Values

+

Status Code

After sending a request, you will receive a response, including the status code, response header, and response body.

+

A status code is a group of digits ranging from 1xx to 5xx. It indicates the status of a response. For more information, see Status Codes.

+

For example, if status code 201 is returned for calling the API used to obtain a user token, the request is successful.

+
+

Response Header

Similar to a request, a response also has a header, for example, Content-Type.

+

Figure 1 shows the response header for the API used to obtain a user token. The x-subject-token header field is the desired user token. This token can then be used to authenticate the calling of other APIs.

+
Figure 1 Header fields of the response to the request for obtaining a user token
+
+

(Optional) Response Body

This part is optional. The body of a response is often returned in structured format (for example, JSON or XML) as specified in the Content-Type header field. The response body transfers content except the response header.

+
For the API used to obtain a user token, the following information is returned. The following describes part of the request body.
{
+    "token": {
+        "expires_at": "2019-02-13T06:52:13.855000Z",
+        "methods": [
+            "password"
+        ],
+        "catalog": [
+            {
+                "endpoints": [
+                    {
+                        "region_id": "az-01",
+......
+
+
If an error occurs during API calling, the system returns an error code and message to you. The following shows the format of an error response body:
{
+	"error_code": "AS.0001",
+	"error_msg": "The format of message is error"
+}
+
+

In the response body, error_code is an error code, and error_msg provides information about the error.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0014.html b/docs/ddm/api-ref/ddm_api_01_0014.html new file mode 100644 index 000000000..cda1a3fc4 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0014.html @@ -0,0 +1,51 @@ + + +

DDM Instances

+
+
+ + + +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0015.html b/docs/ddm/api-ref/ddm_api_01_0015.html new file mode 100644 index 000000000..20b95d0ce --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0015.html @@ -0,0 +1,333 @@ + + +

Querying DDM Engine Information

+

Function

This API is used to query engines that DDM supports.

+
+

Constraints

None

+
+

URI

GET /v2/{project_id}/engines?offset={offset}&limit={limit}

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

offset

+

No

+

Integer

+

Index offset.

+

The query starts from the next piece of data indexed by this parameter. The value is 0 by default.

+

The value must be a positive integer.

+

limit

+

No

+

Integer

+

A maximum of engines to be queried.

+

Value range: 1 to 128.

+

If the parameter value is not specified, 10 engines are queried by default.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

engineGroups

+

Array of EngineGroupsInfo objects

+

Information of available engines

+

offset

+

Integer

+

Which page the server starts returning items

+

limit

+

Integer

+

Number of records displayed on each page

+

total

+

Integer

+

Number of engine versions

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 5 EngineGroupsInfo

Parameter

+

Type

+

Description

+

id

+

String

+

Engine ID

+

name

+

String

+

Engine name

+

version

+

String

+

Engine version

+

supportAzs

+

Array of SupportAzsInfo objects

+

AZs

+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 6 SupportAzsInfo

Parameter

+

Type

+

Description

+

code

+

String

+

AZ code

+

name

+

String

+

AZ name

+

favored

+

Boolean

+

Whether the current AZ is supported

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 8 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v2/{project_id}/engines?offset={offset}&limit={limit}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "engineGroups" : [ {
+    "id" : "b6907aa2-aacb-3ac9-9782-b90b152d456c",
+    "name" : "ddm",
+    "version" : "3.0.8",
+    "supportAzs" : [ {
+      "code" : "az1",
+      "name" : "az1",
+      "favored" : false
+    }, {
+      "code" : "az2",
+      "name" : "az2",
+      "favored" : true
+    } ]
+  } ],
+  "offset" : 0,
+  "limit" : 128,
+  "total" : 1
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0016.html b/docs/ddm/api-ref/ddm_api_01_0016.html new file mode 100644 index 000000000..b38a14c36 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0016.html @@ -0,0 +1,465 @@ + + +

Querying DDM Node Classes Available in an AZ

+

Function

This API is used to query DDM node classes available in an AZ.

+
+

Constraints

None

+
+

URI

GET /v2/{project_id}/flavors?engine_id={engine_id}?offset={offset}&limit={limit}

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

engine_id

+

Yes

+

String

+

Engine ID, which can be obtained by calling the API for querying DDM engine information.

+

offset

+

No

+

Integer

+

Index offset.

+

The query starts from the next piece of data indexed by this parameter. The value is 0 by default.

+

The value must be a positive integer.

+

limit

+

No

+

Integer

+

A maximum of node classes to be queried.

+

Value range: 1 to 128.

+

If the parameter value is not specified, 10 node classes are queried by default.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

computeFlavorGroups

+

Array of ComputeFlavorGroupsInfo objects

+

Compute flavor information

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 ComputeFlavorGroupsInfo

Parameter

+

Type

+

Description

+

groupType

+

String

+

Compute resource architecture type. The value can be x86 or ARM.

+

computeFlavors

+

Array of ComputeFlavors objects

+

Compute flavors

+

offset

+

Integer

+

Which page the server starts returning items

+

limit

+

Integer

+

Number of records displayed on each page

+

total

+

Integer

+

Total number of compute flavors

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 6 ComputeFlavors

Parameter

+

Type

+

Description

+

id

+

String

+

Flavor ID

+

typeCode

+

String

+

Resource type code

+

code

+

String

+

VM flavor types recorded in DDM

+

iaasCode

+

String

+

VM flavor types recorded by the IaaS layer

+

cpu

+

String

+

Number of CPUs

+

mem

+

String

+

Memory size, in GB

+

maxConnections

+

String

+

Maximum number of connections

+

serverType

+

String

+

Compute resource type

+

architecture

+

String

+

Compute resource architecture type. The value can be x86 or ARM.

+

azStatus

+

Map<String,String>

+

Status of the AZ where node classes are available. The key is the AZ ID and the value is the AZ status. The value can be:

+
  • normal: indicates that the node classes in the AZ are available.
  • unsupported: indicates that the node classes are not supported by the AZ.
  • sellout: indicates that the node classes in the AZ are sold out.
+

regionStatus

+

String

+

Region status

+

groupType

+

String

+

Compute resource architecture type. The value can be x86 or ARM.

+

dbType

+

String

+

Engine type

+

extendFields

+

Map<String,String>

+

Extension field for storing AZ information

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 8 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v2/{project_id}/flavors?engine_id={engine_id}
+
+

Example Response

Status code: 200

+

OK

+
{
+	"computeFlavorGroups": [{
+		"offset": 0,
+		"limit": 100,
+		"total": 3,
+		"groupType": "X86",
+		"computeFlavors": [{
+				"id": "7267235a-80b0-3fd4-892f-4f3dd0cd60e4",
+				"typeCode": "hws.resource.type.ddm",
+				"code": "ddm.2xlarge.2",
+				"iaasCode": "s2.xlarge.2",
+				"cpu": "8",
+				"mem": "16",
+				"maxConnections": null,
+				"serverType": "KVM",
+				"architecture": "X86",
+				"azStatus": {
+					"eu-de-03": "unsupported",
+					"eu-de-02": "normal",
+					"eu-de-01": "normal"
+				},
+				"regionStatus": "abandon",
+				"groupType": null,
+				"dbType": "DDM",
+				"extendFields": {
+					"azCode": "eu-de-03,eu-de-02,eu-de-01",
+					"azDescription": "eu-de-03,eu-de-02,eu-de-01"
+				}
+			},
+			{
+				"id": "8cfd2730-1d53-3349-acbb-12a741767f70",
+				"typeCode": "hws.resource.type.ddm",
+				"code": "ddm.4xlarge.2",
+				"iaasCode": "s2.xlarge.2",
+				"cpu": "16",
+				"mem": "32",
+				"maxConnections": null,
+				"serverType": "KVM",
+				"architecture": "X86",
+				"azStatus": {
+					"eu-de-03": "unsupported",
+					"eu-de-02": "normal",
+					"eu-de-01": "normal"
+				},
+				"regionStatus": "abandon",
+				"groupType": null,
+				"dbType": "DDM",
+				"extendFields": {
+					"azCode": "eu-de-03,eu-de-02,eu-de-01,",
+					"azDescription": "eu-de-03,eu-de-02,eu-de-01"
+				}
+			},
+			{
+				"id": "f8388a59-b2af-3be0-8fe5-7422755d4570",
+				"typeCode": "hws.resource.type.ddm",
+				"code": "ddm.8xlarge.2",
+				"iaasCode": "s2.xlarge.2",
+				"cpu": "32",
+				"mem": "64",
+				"maxConnections": null,
+				"serverType": "KVM",
+				"architecture": "X86",
+				"azStatus": {
+					"eu-de-03": "unsupported",
+					"eu-de-02": "normal",
+					"eu-de-01": "normal"
+				},
+				"regionStatus": "abandon",
+				"groupType": null,
+				"dbType": "DDM",
+				"extendFields": {
+					"azCode": "eu-de-03,eu-de-02,eu-de-01",
+					"azDescription": "eu-de-03,eu-de-02,eu-de-01"
+				}
+			}
+		]
+	}]
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0017.html b/docs/ddm/api-ref/ddm_api_01_0017.html new file mode 100644 index 000000000..82137b091 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0017.html @@ -0,0 +1,242 @@ + + +

Changing the Node Class of a DDM Instance

+

Function

This API is used to change the node class of a DDM instance.

+
+

Constraints

  • The node class can be changed only when the corresponding DDM instance is normal.
  • The new node class cannot be the same as the original one.
  • Node classes of c6s series cannot be changed to those classes of c6 series.
+
+

URI

PUT /v3/{project_id}/instances/{instance_id}/flavor

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

x-auth-token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

spec_code

+

Yes

+

String

+

Resource specification code of the new node class

+

group_id

+

No

+

String

+

This parameter is not required if the instance has only one node group. Each instance has one node group by default. If you need to create multiple node groups, set this parameter to the ID of the group whose node class you want to change.

+

is_auto_pay

+

No

+

Boolean

+

The function has not been supported, and this field is reserved.

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

job_id

+

String

+

ID of the task for changing node class.

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

PUT https://{endpoint}/v3/{project_id}/instances/{instance_id}/flavor
+
+{
+  "spec_code" : "ddm.8xlarge.2",
+  "group_id" : "3e5a9063d3b84729b0a3310fad3a0942gr09"
+  }
+
+

Example Response

Status code: 200

+

ok

+
{
+  "job_id" : "2x414788a5112333a02390e2eb0ea227"
+}
+
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0018.html b/docs/ddm/api-ref/ddm_api_01_0018.html new file mode 100644 index 000000000..97b1e31ac --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0018.html @@ -0,0 +1,421 @@ + + +

Querying DDM Instances

+

Function

This API is used to query DDM instances.

+
+

Constraints

None

+
+

URI

GET /v1/{project_id}/instances?offset={offset}&limit={limit}

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

offset

+

No

+

Integer

+

Index offset.

+

The query starts from the next piece of data indexed by this parameter. The value is 0 by default.

+

The value must be a positive integer.

+

limit

+

No

+

Integer

+

A maximum of instances to be queried.

+

Value range: 1 to 128.

+

If the parameter value is not specified, 10 DDM instances are queried by default.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

instances

+

Array of ShowInstanceBeanResponse objects

+

DDM instance information

+

instance_num

+

Integer

+

Number of DDM instances of a tenant

+

page_no

+

Integer

+

Current page

+

page_size

+

Integer

+

Data records on the current page

+

total_record

+

Integer

+

Total records

+

total_page

+

Integer

+

Total pages

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 ShowInstanceBeanResponse

Parameter

+

Type

+

Description

+

id

+

String

+

DDM instance ID

+

status

+

String

+

DDM instance status. For details about this parameter value, see Status Description.

+

name

+

String

+

Name of the created DDM instance

+

created

+

String

+

Time when the DDM instance is created. The time must be in the format of yyyy-mm-dd Thh:mm:ssZ.

+

T indicates the separator between the calendar and the hourly notation of time. Z indicates Coordinated Universal Time (UTC).

+

updated

+

String

+

Time when the DDM instance is last updated, which is in the same format as created.

+

available_zone

+

String

+

AZ name

+

vpc_id

+

String

+

VPC ID

+

subnet_id

+

String

+

Subnet ID

+

security_group_id

+

String

+

Security group ID

+

node_count

+

Integer

+

Number of nodes

+

access_ip

+

String

+

Address for accessing the DDM instance

+

access_port

+

String

+

Port for accessing the DDM instance

+

core_count

+

String

+

Number of CPUs

+

ram_capacity

+

String

+

Memory size in GB

+

error_msg

+

String

+

Response message. This parameter is not returned if no abnormality occurs.

+

node_status

+

String

+

Node status For details, see Status Description.

+

project_id

+

String

+

Project ID of a tenant in a region

+

engine_version

+

String

+

Engine version (core instance version)

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v1/{project_id}/instances?offset={offset}&limit={limit}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "instance_num" : 26,
+  "instances" : [ {
+    "id" : "73f27bb0b26d4a79a9b0c58a4c700c4fin09",
+    "status" : "RUNNING",
+    "name" : "ddm-36c7",
+    "created" : "2021-12-14T07:46:22+0000",
+    "updated" : "2021-12-14T10:11:22+0000",
+    "available_zone" : "az1",
+    "vpc_id" : "1d9441c5-1a4b-431d-9edb-bf3564a83e74",
+    "subnet_id" : "20c2d83c-755b-42a2-846a-4688eb35d1a7",
+    "security_group_id" : "fbdff89d-32fe-45a4-832b-115ac4bfaac9",
+    "node_count" : 1,
+    "access_ip" : "192.168.23.143",
+    "access_port" : "5066",
+    "core_count" : "2",
+    "ram_capacity" : "4",
+    "node_status" : "RUNNING",
+    
+    "project_id" : "055d9f4ee780d4d42f96c01c1bc3c50c",
+    "engine_version" : "3.0.8"
+  } ],
+  "page_size" : 1,
+  "total_record" : 26,
+  "total_page" : 26,
+  "page_no" : 3
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0019.html b/docs/ddm/api-ref/ddm_api_01_0019.html new file mode 100644 index 000000000..3b4736c82 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0019.html @@ -0,0 +1,393 @@ + + +

Querying Details of a DDM Instance

+

Function

This API is used to query details about a DDM instance.

+
+

Constraints

None

+
+

URI

GET /v1/{project_id}/instances/{instance_id}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

id

+

String

+

DDM instance ID

+

status

+

String

+

DDM instance status. For details about this parameter value, see Status Description.

+

name

+

String

+

DDM instance name

+

created

+

String

+

Time when the DDM instance is created

+

updated

+

String

+

Time when the DDM instance is last updated

+

available_zone

+

String

+

Name of the AZ where the DDM instance is located

+

vpc_id

+

String

+

VPC ID

+

subnet_id

+

String

+

Subnet ID

+

security_group_id

+

String

+

Security group ID

+

node_count

+

Integer

+

Number of nodes

+

access_ip

+

String

+

Address for accessing the DDM instance

+

access_port

+

String

+

Port for accessing the DDM instance

+

node_status

+

String

+

Node status For details, see Status Description.

+

core_count

+

String

+

Number of CPUs

+

ram_capacity

+

String

+

Memory size in GB

+

error_msg

+

String

+

Response message. This parameter is not returned if no abnormality occurs.

+

project_id

+

String

+

Project ID

+

order_id

+

String

+

The function has not been supported, and this field is reserved.

+

engine_version

+

String

+

Engine version (core instance version)

+

nodes

+

Array of GetDetailfNodesInfo objects

+

Node information

+

admin_user_name

+

String

+

Username of the administrator. The username:

+
  • Can include 1 to 32 characters.
  • Must start with a letter.
  • Can contain only letters, digits, and underscores (_).
+
+
+ +
+ + + + + + + + + + + + + + + + + +
Table 4 GetDetailfNodesInfo

Parameter

+

Type

+

Description

+

status

+

String

+

Status of the DDM instance node For details, see Status Description.

+

port

+

String

+

Port of the DDM instance node

+

ip

+

String

+

IP address of the DDM instance node

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v1/{project_id}/instances/{instance_id}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "nodes" : [ {
+    "status" : "RUNNING",
+    "port" : "5066",
+    "ip" : "192.168.0.160"
+  } ],
+  "id" : "1f5c9fd6cd984056ba89c8c87cc03278in09",
+  "status" : "RUNNING",
+  "name" : "ddm2-test",
+  "created" : "2021-11-09T03:30:01+0000",
+  "updated" : "2021-12-15T09:12:58+0000",
+  "available_zone" : "az1",
+  "vpc_id" : "cfaa4024-0603-4aba-81d4-2203b4ad26fb",
+  "subnet_id" : "48f270ef-af70-4ad9-bb1c-c28dd5b37f93",
+  "security_group_id" : "bc28ef93-0083-4652-bce6-381e14284db6",
+  "node_count" : 1,
+  "access_ip" : "192.168.0.160",
+  "access_port" : "5066",
+  "core_count" : "2",
+  "ram_capacity" : "8",
+  "node_status" : "RUNNING",
+ 
+  "project_id" : "070c071d8e80d58c2f42c0121b10cf9f",
+  "engine_version" : "3.0.6",
+  "admin_user_name" : "root"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0020.html b/docs/ddm/api-ref/ddm_api_01_0020.html new file mode 100644 index 000000000..5199dac77 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0020.html @@ -0,0 +1,226 @@ + + +

Modifying the Name of a DDM Instance

+

Function

This API is used to modify the name of a DDM instance.

+
+

Constraints

None

+
+

URI

PUT /v1/{project_id}/instances/{instance_id}/modify-name

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Name of a DDM instance, which:

+
  • Can include 4 to 64 characters.
  • Must start with a letter.
  • Can contain only letters, digits, and hyphens (-).
+

Minimum length: 4 characters

+

Maximum length: 64 characters

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

name

+

String

+

DDM instance name

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

PUT https://{endpoint}/v1/{project_id}/instances/{instance_id}/modify-name
+
+{
+  "name" : "DDM-test-04"
+}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "name" : "DDM-test-04"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0021.html b/docs/ddm/api-ref/ddm_api_01_0021.html new file mode 100644 index 000000000..93e165b56 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0021.html @@ -0,0 +1,223 @@ + + +

Modifying the Security Group of a DDM Instance

+

Function

This API is used to modify the security group of a DDM instance.

+
+

Constraints

None

+
+

URI

PUT /v1/{project_id}/instances/{instance_id}/modify-security-group

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token

+

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

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

security_group_id

+

Yes

+

String

+

Security group ID. The default value is the original security group ID. You can change the value as required.

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

security_group_id

+

String

+

Security group ID

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

PUT https://{endpoint}/v1/{project_id}/instances/{instance_id}/modify-security-group
+
+{
+  "security_group_id" : "035b70ed-319b-4086-9fd7-62a2e8548b2e"
+}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "security_group_id" : "035b70ed-319b-4086-9fd7-62a2e8548b2e"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0022.html b/docs/ddm/api-ref/ddm_api_01_0022.html new file mode 100644 index 000000000..26cc348ae --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0022.html @@ -0,0 +1,232 @@ + + +

Deleting a DDM Instance

+

Function

This API is used to delete a DDM instance to release all its resources.

+
+

Constraints

None

+
+

URI

DELETE /v1/{project_id}/instances/{instance_id}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+ +
+ + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

delete_rds_data

+

No

+

String

+

Whether data stored on the associated DB instances is deleted. The value can be:

+
  • true: indicates that the data stored on the associated DB instances is deleted.
  • false: indicates that the data stored on the associated DB instances is not deleted. It is left blank by default.
+

Enumerated values:

+
  • true
  • false
+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

id

+

String

+

DDM instance ID

+

job_id

+

String

+

ID of the job for deleting an instance.

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

  • Request to delete a DDM instance (including the data stored on the associated DB instances)
    DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}?delete_rds_data=true
    +
  • Request to delete a DDM instance (excluding the data stored on the associated DB instances)
    DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}?delete_rds_data=false
    +
+
+

Example Response

Status code: 200

+

OK

+
{
+  "job_id" : "394976a1-8fb1-48b8-a2c0-a733405c1bb9",
+  "id" : "9608ce63-bf66-4342-be8a-44f9b6b15d54"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0023.html b/docs/ddm/api-ref/ddm_api_01_0023.html new file mode 100644 index 000000000..58ea5e544 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0023.html @@ -0,0 +1,267 @@ + + +

Restarting a DDM Instance

+

Function

This API is used to restart a DDM instance.

+
+

Constraints

None

+
+

URI

POST /v1/{project_id}/instances/{instance_id}/action

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

restart

+

No

+

RestarInstanceInfo object

+

Restart-related parameter

+
+
+ +
+ + + + + + + + + + + +
Table 4 RestarInstanceInfo

Parameter

+

Mandatory

+

Type

+

Description

+

type

+

No

+

String

+

Restart type, which can be soft or hard.

+
  • soft: Only the process is restarted.
  • hard: The instance VM is forcibly restarted.
+

Enumerated values:

+
  • soft
  • hard
+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

instanceId

+

String

+

DDM instance ID

+

instanceName

+

String

+

DDM instance name

+

jobId

+

String

+

Task ID

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/action
+
+{
+  "restart" : {
+    "type" : "soft"
+  }
+}
+
+

Example Response

Status code: 200

+

ok

+
{
+  "instanceId" : "28e8841d0b9c4f6a9a30742ee60e1068in09",
+  "instanceName" : "ddm-fb88-test",
+  "jobId" : "1eb697c0-1842-43a3-8671-f562d0385cb9"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

ok

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0024.html b/docs/ddm/api-ref/ddm_api_01_0024.html new file mode 100644 index 000000000..43684fc4c --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0024.html @@ -0,0 +1,178 @@ + + +

Reloading Table Data

+

Function

This API is used to reload table data of the destination DDM instance for cross-region DR.

+
+

Constraints

None

+
+

URI

POST /v1/{project_id}/instances/{instance_id}/reload-config

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+

No response parameters

+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/reload_config
+
+{ }
+
+

Example Response

Status code: 200

+

ok

+
{ }
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

ok

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0025.html b/docs/ddm/api-ref/ddm_api_01_0025.html new file mode 100644 index 000000000..7033305a1 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0025.html @@ -0,0 +1,275 @@ + + +

Scaling Out a DDM Instance

+

Function

This API is used to scale out a specified DDM instance.

+
+

Constraints

Make sure that the associated RDS instances are available and not undergoing other operations.

+
+

URI

POST /v2/{project_id}/instances/{instance_id}/action/enlarge

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

flavor_id

+

Yes

+

String

+

Flavor ID of the VM for deploying the DDM instance that is to be scaled out

+

node_number

+

Yes

+

Integer

+

Number of nodes to be added

+

group_id

+

No

+

String

+

Group ID, which specifies the node group that is scaled out. This parameter must be specified if there are more than one node group.

+

is_auto_pay

+

No

+

Boolean

+

The function has not been supported, and this field is reserved.

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

instanceId

+

String

+

DDM instance ID

+

instanceName

+

String

+

DDM instance name

+

jobId

+

String

+

Task ID

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

  • Example request
    POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/enlarge
    +
    +{
    +  "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606",
    +  "node_number" : 1
    +}
    +
  • Example request where the DDM instance has more than one group
    POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/enlarge
    +
    +{
    +  "flavor_id" : "8f2e696c-a9c1-30bd-af90-25522bc67606",
    +  "group_id" : "f080abf2010d45118068c28c8958f5fcgr09",
    +  "node_number" : 1
    +}
    +
+
+

Example Response

Status code: 200

+

ok

+
{
+  "instanceId" : "28e8841d0b9c4f6a9a30742ee60e1068in09",
+  "instanceName" : "BUG-ddm-fb88-test",
+  "jobId" : "1eb697c0-1842-43a3-8671-f562d0385cb9"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

ok

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0026.html b/docs/ddm/api-ref/ddm_api_01_0026.html new file mode 100644 index 000000000..10e78f404 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0026.html @@ -0,0 +1,255 @@ + + +

Scaling In a DDM instance

+

Function

This API is used to remove nodes from a specified DDM instance.

+
+

Constraints

Make sure that the associated RDS instances are available and not undergoing other operations.

+
+

URI

POST /v2/{project_id}/instances/{instance_id}/action/reduce

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

node_number

+

Yes

+

Integer

+

Number of nodes to be removed. The maximum value is the instance nodes minus 1.

+

group_id

+

No

+

String

+

Group ID, which specifies the group that is scaled out. This parameter must be specified if there are more than one node group.

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

instanceId

+

String

+

DDM instance ID

+

instanceName

+

String

+

DDM instance name

+

jobId

+

String

+

Task ID

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

  • Example request
    POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/reduce
    +
    +{
    +  "node_number" : 2
    +}
    +
  • Example request where the DDM instance has more than one group
    POST https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/reduce
    +
    +{
    +  "group_id" : "f080abf2010d45118068c28c8958f5fcgr09",
    +  "node_number" : 1
    +}
    +
+
+

Example Response

Status code: 200

+

ok

+
{
+  "instanceId" : "28e8841d0b9c4f6a9a30742ee60e1068in09",
+  "instanceName" : "ddm-test",
+  "jobId" : "1eb697c0-1842-43a3-8671-f562d0385cb9"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

ok

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0027.html b/docs/ddm/api-ref/ddm_api_01_0027.html new file mode 100644 index 000000000..5f491d4a2 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0027.html @@ -0,0 +1,23 @@ + + +

Schemas

+
+
+ + + +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0029.html b/docs/ddm/api-ref/ddm_api_01_0029.html new file mode 100644 index 000000000..90cf6f687 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0029.html @@ -0,0 +1,354 @@ + + +

Querying Schemas

+

Function

This API is used to query schemas of a DDM instance.

+
+

Constraints

None

+
+

URI

GET /v1/{project_id}/instances/{instance_id}/databases?offset={offset}&limit={limit}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

offset

+

No

+

Integer

+

Index offset.

+

The query starts from the next piece of data indexed by this parameter. The value is 0 by default.

+

The value must be a positive integer.

+

limit

+

No

+

Integer

+

Maximum schemas to be queried.

+

Value range: 1 to 128.

+

If the parameter value is not specified, 10 schemas are queried by default.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

databases

+

Array of GetDatabaseInfo objects

+

Schema information

+

total

+

Integer

+

Total records

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 GetDatabaseInfo

Parameter

+

Type

+

Description

+

name

+

String

+

Schema name

+

shard_mode

+

String

+

Sharding mode of the schema

+
  • cluster: indicates that the schema is in sharded mode.
  • single: indicates that the schema is in unsharded mode.
+

shard_number

+

Integer

+

Number of shards in the same working mode

+

status

+

String

+

Schema status. For details about this parameter value, see Status Description.

+

created

+

Integer

+

Time when the schema is created

+

used_rds

+

Array of GetDatabaseUsedRds objects

+

RDS instances associated with the schema

+

shard_unit

+

Integer

+

Number of shards per RDS instance

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 6 GetDatabaseUsedRds

Parameter

+

Type

+

Description

+

id

+

String

+

Node ID of the associated RDS instance

+

name

+

String

+

Name of the associated RDS instance

+

status

+

String

+

Status of the associated RDS instance

+

error_msg

+

String

+

Response message. This parameter is not returned if no abnormality occurs.

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 8 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/databases?offset={offset}&limit={limit}
+
+

Example Response

Status code: 200

+

OK

+
{
+	"databases": [{
+		"status": "RUNNING",
+		"created": 1642063713625,
+		"name": "mytestdb170",
+		"shard_mode": "cluster",
+		"shard_number": 8,
+		"shard_unit": 8,
+		"used_rds": [{
+			"id": "c6f68fed9e74478c8679479a07d7d568in01",
+			"status": "normal",
+			"name": "rds-test"
+		}]
+	}],
+	"total": 172
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0030.html b/docs/ddm/api-ref/ddm_api_01_0030.html new file mode 100644 index 000000000..4ddb05f22 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0030.html @@ -0,0 +1,470 @@ + + +

Querying Details of a Schema

+

Function

This API is used to query details about a schema.

+
+

Constraints

None

+
+

URI

GET /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+

instance_id

+

Yes

+

String

+

DDM instance ID

+

ddm_dbname

+

Yes

+

String

+

Name of the schema to be queried, which is case-insensitive

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

database

+

GetDatabaseResponseBean object

+

Schema information

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 GetDatabaseResponseBean

Parameter

+

Type

+

Description

+

name

+

String

+

Schema name

+

created

+

String

+

Time when the schema is created

+

status

+

String

+

Schema status. For details about this parameter value, see Status Description.

+

updated

+

String

+

Time when the DDM instance is last updated

+

databases

+

Array of GetDatabases objects

+

Sharding information of the schema

+

shard_mode

+

String

+

Sharding mode of the schema

+
  • cluster: indicates that the schema is in sharded mode.
  • single: indicates that the schema is in unsharded mode.
+

shard_number

+

Integer

+

Number of shards in the same working mode

+

shard_unit

+

Integer

+

Number of shards per RDS instance

+

dataVips

+

Array of strings

+

IP address and port number for connecting to the schema

+

used_rds

+

Array of GetDatabaseUsedRds objects

+

Associated RDS instances

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 GetDatabases

Parameter

+

Type

+

Description

+

dbslot

+

Integer

+

Number of shards

+

name

+

String

+

Shard name

+

status

+

String

+

Shard status

+

created

+

String

+

Time when the shard is created

+

updated

+

String

+

Time when the shard is last updated

+

id

+

String

+

ID of the RDS instance where the shard is located

+

idName

+

String

+

Name of the RDS instance where the shard is located

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 6 GetDatabaseUsedRds

Parameter

+

Type

+

Description

+

id

+

String

+

Node ID of the associated RDS instance

+

name

+

String

+

Name of the associated RDS instance

+

status

+

String

+

Status of the associated RDS instance

+

error_msg

+

String

+

Response message. This parameter is not returned if no abnormality occurs.

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 8 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint} /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "database" : {
+    "name" : "db_7567",
+    "created" : 1604631243234,
+    "status" : "RUNNING",
+    "updated" : 1604631243234,
+    "databases" : [ {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "db_7567_0000",
+      "idName" : "db_7567_0000",
+      "dbslot" : 0,
+      "status" : "RUNNING",
+      "created" : 1604631243234,
+      "updated" : 1604631243234
+    }, {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "db_7567_0001",
+      "idName" : "db_7567_0001",
+      "dbslot" : 1,
+      "status" : "RUNNING",
+      "created" : 1604631243234,
+      "updated" : 1604631243234
+    }, {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "db_7567_0002",
+      "idName" : "db_7567_0002",
+      "dbslot" : 2,
+      "status" : "RUNNING",
+      "created" : 1604631243234,
+      "updated" : 1604631243234
+    }, {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "db_7567_0003",
+      "idName" : "db_7567_0003",
+      "dbslot" : 3,
+      "status" : "RUNNING",
+      "created" : 1604631243234,
+      "updated" : 1604631243234
+    }, {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "db_7567_0004",
+      "idName" : "db_7567_0004",
+      "dbslot" : 4,
+      "status" : "RUNNING",
+      "created" : 1604631243234,
+      "updated" : 1604631243234
+    }, {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "db_7567_0005",
+      "idName" : "db_7567_0005",
+      "dbslot" : 5,
+      "status" : "RUNNING",
+      "created" : 1604631243234,
+      "updated" : 1604631243234
+    }, {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "db_7567_0006",
+      "idName" : "db_7567_0006",
+      "dbslot" : 6,
+      "status" : "RUNNING",
+      "created" : 1604631243234,
+      "updated" : 1604631243234
+    }, {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "db_7567_0007",
+      "idName" : "db_7567_0007",
+      "dbslot" : 7,
+      "status" : "RUNNING",
+      "created" : 1604631243234,
+      "updated" : 1604631243234
+    } ],
+    "shard_mode" : "cluster",
+    "shard_number" : 8,
+    "shard_unit" : 8,
+    "dataVips" : [ {
+      "192.168.185.97:5066"
+    } ],
+    "used_rds" : [ {
+      "id" : "e70a82534a364492b795c5080e3a1591in01",
+      "name" : "rds-5338",
+      "status" : "normal"
+    } ]
+  }
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0031.html b/docs/ddm/api-ref/ddm_api_01_0031.html new file mode 100644 index 000000000..30605716c --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0031.html @@ -0,0 +1,233 @@ + + +

Deleting a Schema

+

Function

This API is used to delete a schema to release all its resources.

+
+

Constraints

None

+
+

URI

DELETE /v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}?delete_rds_data={delete_rds_data}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+

instance_id

+

Yes

+

String

+

DDM instance ID

+

ddm_dbname

+

Yes

+

String

+

Name of the schema to be queried, which is case-insensitive

+
+
+ +
+ + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

delete_rds_data

+

No

+

String

+

Whether data stored on the associated DB instances is deleted. The value can be:

+
  • true: indicates that the data stored on the associated DB instances is deleted.
  • false: indicates that the data stored on the associated DB instances is not deleted. It is left blank by default.
+

Enumerated values:

+
  • true
  • false
+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

job_id

+

String

+

ID of the job for deleting a schema.

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

  • Request to delete a schema (including the data stored on associated DB instances)
    DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}?delete_rds_data=true
    +
  • Request to delete a schema (excluding the data stored on associated DB instances)
    DELETE https://{endpoint}/v1/{project_id}/instances/{instance_id}/databases/{ddm_dbname}?delete_rds_data=false
    +
+
+

Example Response

Status code: 200

+

OK

+
{ 
+  "job_id" : "01a53563-6057-9ab3-6618-f135nxsj5h2s"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0041.html b/docs/ddm/api-ref/ddm_api_01_0041.html new file mode 100644 index 000000000..358fc8a50 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0041.html @@ -0,0 +1,17 @@ + + +

DDM Accounts

+
+
+ + + +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0058.html b/docs/ddm/api-ref/ddm_api_01_0058.html new file mode 100644 index 000000000..35612adfe --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0058.html @@ -0,0 +1,21 @@ + + +

Appendix

+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0059.html b/docs/ddm/api-ref/ddm_api_01_0059.html new file mode 100644 index 000000000..285194ea1 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0059.html @@ -0,0 +1,42 @@ + + +

Abnormal Request Results

+

Abnormal Response

+
+ + + + + + + + + + + + + +
Table 1 Parameter description

Parameter

+

Type

+

Description

+

errCode

+

String

+

Returned error code when a task submission exception occurs. For details, see Error Codes.

+

externalMessage

+

String

+

Description of the error returned when a task submission exception occurs.

+
+
+
+

Example Response

{  
+     "errCode": "DBS.300101",  
+     "externalMessage": "Failed to delete the schema"  
+}
+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0060.html b/docs/ddm/api-ref/ddm_api_01_0060.html new file mode 100644 index 000000000..5675f28c5 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0060.html @@ -0,0 +1,130 @@ + + +

Status Codes

+

Normal

Table 1 lists the status codes that may be returned.

+ +
+ + + + + + + + + + + + + +
Table 1 Normal status codes

Status Code

+

Message

+

Description

+

200

+

OK

+

The request has been processed successfully.

+

202

+

OK

+

The asynchronous request is submitted successfully.

+
+
+
+

Abnormal

Table 2 lists the status codes that may be returned.

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Abnormal status codes

Status Code

+

Message

+

Description

+

400

+

Bad Request

+

The server fails to process the request. The possible causes are as follows:

+
  • The request could not be parsed by the server due to incorrect syntax.
  • Request parameters are incorrect.
+

401

+

Unauthorized

+

Necessary credentials (for example, username and password) required for user authentication are not provided.

+

403

+

Forbidden

+

You are forbidden to access the page requested.

+

404

+

Not Found

+

The request failed because the requested resource could not be found on the server.

+

405

+

Method Not Allowed

+

You are not allowed to use the method specified in the request.

+

409

+

Conflict

+

The request could not be processed due to a conflict with the current resource status.

+

413

+

Request Entity Too Large

+

The requested resource exceeds the resource quota.

+

415

+

Unsupported Media Type

+

ContentType contained in the request header is neither application nor json.

+

500

+

Internal Server Error

+

The request is not completed due to a service error.

+

501

+

Not Implemented

+

The request is not completed because the server does not support the requested function.

+

503

+

Service Unavailable

+

The request could not be processed by the server because the server is being maintained or overloaded.

+
+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0061.html b/docs/ddm/api-ref/ddm_api_01_0061.html new file mode 100644 index 000000000..406bec7bc --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0061.html @@ -0,0 +1,974 @@ + + +

Error Codes

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Status Code

+

Error Code

+

Error Message

+

Solution

+

400

+

DBS.280001

+

Parameter error.

+

Refresh the page, modify some parameters, and try again.

+

400

+

DBS.300002

+

Server failure.

+

Refresh the page and try again later.

+

400

+

DBS.300005

+

Failed to process the request. Contact technical support.

+

-

+

400

+

DBS.300100

+

Failed to create the schema.

+

Check whether the DDM instance is available, whether the instance is in the Running state, whether the RDS instance is being scaled, and whether the schema name is duplicated. If the schema name is duplicated, modify the name and send the request again.

+

400

+

DBS.300101

+

Failed to delete the schema.

+

Check whether the schema has been deleted and whether the associated RDS instance exists or becomes abnormal.

+

400

+

DBS.300102

+

The number of RDS instances associated with the schema is invalid.

+

Check whether the number of RDS instances associated with the schema is valid and try again.

+

400

+

DBS.300103

+

The RDS instance does not exist or it is not in the same VPC as the schema.

+

Check whether the RDS DB instance exists and whether the DB instance is in the same VPC as the required DDM instance, and then try again.

+

400

+

DBS.300104

+

The sharding rule of the schema is invalid.

+

Ensure that the sharding rule is valid and try again.

+

400

+

DBS.300106

+

The number of shards per RDS instance is invalid.

+

Check whether the number of shards per RDS instance in the request is correct. If not, modify the number and try again.

+

400

+

DBS.300107

+

The accounts are duplicated.

+

Check whether the accounts configured in parameters are duplicated and try again.

+

400

+

DBS.300108

+

The RDS instances are duplicated.

+

Check whether there are duplicate RDS instances in the request. If yes, modify them and try again.

+

400

+

DBS.300109

+

The schema name is invalid.

+

Check whether the schema name is valid. If no, modify it and try again.

+

400

+

DBS.300110

+

The status of the RDS instance does not allow associating with the schema.

+

Resolve the RDS instance status exception and try again.

+

400

+

DBS.300112

+

This schema name already exists.

+

Check whether a schema with the same name exists. If yes, modify the name and try again.

+

400

+

DBS.300113

+

Failed to create a physical database.

+

Check whether the RDS instance administrator and password are correct. If no, modify them and try again.

+

400

+

DBS.300114

+

The administrator or password is incorrect.

+

Check whether the RDS administrator and password are correct. If no, modify them and try again.

+

400

+

DBS.300115

+

Failed to delete the shard.

+

To delete the schema, check whether there are RDS instances associated with it. If the associated RDS DB instances have been deleted, click Synchronize DB Instance Data on the Basic Information page and delete the schema again.

+

400

+

DBS.300116

+

Failed to query available RDS instances.

+

Check whether the RDS service is running properly and try again.

+

400

+

DBS.300117

+

Failed to obtain the associated RDS instances.

+

Check whether the RDS service is running properly and try again.

+

400

+

DBS.300118

+

Failed to scale out the schema.

+

Check input parameters in the request.

+

400

+

DBS.300120

+

Failed to obtain task information.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300121

+

Failed to clear source data.

+

Ensure that the scale-out task exists and is in the valid state and that the administrator password of the destination RDS instance is correct, and try again.

+

400

+

DBS.300122

+

Failed to roll back the scale-out task.

+

Ensure that the scale-out task exists and is in the valid state and that the administrator password of the destination RDS instance is correct, and try again.

+

400

+

DBS.300123

+

Failed to retry the scale-out task.

+

Ensure that the scaling out task exists and its status is normal, and try again.

+

400

+

DBS.300125

+

Failed to synchronize RDS information.

+

Ensure that the RDS service is running properly and try again.

+

400

+

DBS.300127

+

The number of shards in the RDS instances associated with the schema is invalid.

+

Ensure that the total number of shards in the associated RDS DB instances is valid and try again.

+

400

+

DBS.300128

+

Failed to query schema information.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300129

+

Failed to query schema information.

+

Ensure that the schema exists and try again.

+

400

+

DBS.300130

+

Invalid schema status.

+

Ensure that the schema is in the Running state and try again.

+

400

+

DBS.300131

+

Failed to update the schema SQL blacklist.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300132

+

Failed to query the schema SQL blacklist.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300133

+

The RDS instance is being used to scale out a schema.

+

Ensure that the RDS DB instance status is not Scaling out or Scaling failed and try again.

+

400

+

DBS.300134

+

The schema status does not allow rolling back or canceling the scale-out task.

+

Refresh the page and try again later.

+

400

+

DBS.300135

+

Failed to update the relative read weight of the RDS instance.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300300

+

Failed to create a DDM account

+

Ensure that the DDM instance, schema, and account exist and try again.

+

400

+

DBS.300301

+

Failed to update the account.

+

Ensure that the account and associated schema exist and that the password meets the requirements, and try again.

+

400

+

DBS.300302

+

Failed to delete the account.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300305

+

Invalid DDM account name.

+

Ensure that the account name is valid and try again.

+

400

+

DBS.300306

+

The account password is invalid.

+

Ensure that the account name and password in the request body are correct and try again.

+

400

+

DBS.300307

+

The account description is invalid.

+

Ensure that the maximum length of account description does not exceed 256 characters and try again.

+

400

+

DBS.300309

+

The account basic permissions are invalid.

+

Ensure that basic permissions configured for the account are correct and try again.

+

400

+

DBS.300310

+

The account extended permissions are invalid.

+

Ensure that extended permissions configured for the account are correct and try again.

+

400

+

DBS.300311

+

The account already exists.

+

Ensure that the account name is unique and try again.

+

400

+

DBS.300312

+

Failed to query the account.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300313

+

Failed to configure the SQL blacklist.

+

Ensure that the schema exists and is in the Running state, and try again.

+

400

+

DBS.300314

+

Failed to modify the read/write policy.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300315

+

Invalid read/write relative weight.

+

Ensure that the weight is greater than 0 and less than 100.

+

400

+

DBS.300316

+

Failed to query the read/write policy.

+

Ensure that the DDM instance is running properly and try again.

+

400

+

DBS.300322

+

Failed to save instance metadata.

+

Provide environment information, instance ID, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300323

+

The associated RDS instance is unavailable or this operation cannot be performed when the RDS instance is in the current state.

+

Ensure that the associated RDS DB instance exists and is in normal state, and try again.

+

400

+

DBS.300327

+

The account does not exist.

+

Ensure that the account exists and try again.

+

400

+

DBS.300328

+

Failed to reset the password.

+

Ensure that the account exists and try again.

+

400

+

DBS.300329

+

Failed to obtain the step name.

+

Try again or roll back the scale-out task.

+

400

+

DBS.300330

+

Failed to convert the string from JSON to the required format.

+

Provide environment information, involved operations, instance ID, and symptom description and contact technical support.

+

400

+

DBS.300331

+

Data migration error.

+

Provide environment information, involved operations, instance ID, and symptom description and contact technical support.

+

400

+

DBS.300332

+

The scale-out task timed out.

+

Try again or roll back the scale-out task.

+

400

+

DBS.300333

+

Failed to check the time zone.

+

Log in to the RDS console. In the instance list, locate the source RDS instance and click its name. In the navigation pane, choose Parameters, search for time_zone in the upper right text box to check its value. Then, perform these operations on the target RDS instance, and check whether its time_zone value is consistent with the source instance. If not, modify it to ensure that the two values are consistent and retry.

+

400

+

DBS.300334

+

sql_mode check failed.

+

Log in to the RDS console. In the instance list, locate the source RDS instance and click its name. In the navigation pane, choose Parameters, search for sql_mode in the upper right text box to check its value. Then, perform these operations on the target RDS instance, and check whether its sql_mode value is consistent with the source instance. If not, modify it to ensure that the two values are consistent and retry.

+

400

+

DBS.300335

+

Failed to obtain the RDS link.

+

Check whether the RDS service is running properly.

+

400

+

DBS.300336

+

Physical database not found.

+

Log in to the associated RDS instance and execute SHOW DATABASES. Check whether there is a physical database whose name starts with the schema name, and whether the number of physical databases must be the same as the number of shards in the schema.

+

400

+

DBS.300337

+

Failed to check the primary key.

+

Check whether there are tables without primary keys. If yes, add primary keys for those tables and retry.

+

400

+

DBS.300338

+

Failed to disable DDL or DML.

+

Provide environment information, instance ID, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300339

+

Failed to insert a scale-out subtask.

+

Contact technical support.

+

400

+

DBS.300340

+

Failed to change statuses of scale-out subtasks to Initialization.

+

Contact technical support.

+

400

+

DBS.300341

+

Failed to issue a scale-out subtask.

+

Contact technical support.

+

400

+

DBS.300342

+

Failed to obtain scale-out subtasks.

+

Contact technical support.

+

400

+

DBS.300343

+

The volume of remaining subtask data is invalid.

+

Provide environment information, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300344

+

Status check for scale-out task failed.

+

Contact technical support.

+

400

+

DBS.300345

+

Failed to obtain information about the scale-out task.

+

Try again.

+

400

+

DBS.300346

+

Failed to obtain information about the DDM process.

+

Try again.

+

400

+

DBS.300347

+

Failed to disable the link.

+

Try again.

+

400

+

DBS.300348

+

Failed to obtain subtasks during data verification.

+

Contact technical support.

+

400

+

DBS.300349

+

Failed to update the schema status during route switching.

+

Contact technical support.

+

400

+

DBS.300350

+

The required data is not found.

+

Provide environment information, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300351

+

Failed to change statuses of scale-out subtasks to Error.

+

Contact technical support.

+

400

+

DBS.300352

+

Failed to change statuses of scale-out subtasks to Stop.

+

Provide environment information, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300353

+

Data verification failed.

+

Provide environment information, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300354

+

Failed to change statuses of scale-out subtasks to Complete.

+

Provide environment information, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300355

+

Schema creation failed.

+

Provide environment information, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300356

+

Failed to connect to the RDS DB instance.

+

Check whether the RDS service is running properly.

+

400

+

DBS.300357

+

The RDS instance administrator or password is incorrect.

+

If the RDS instance administrator is incorrect, log in to the RDS console, locate the required RDS instance and click its name, and view the administrator on the instance details page.

+

400

+

DBS.300358

+

There is a schema where source data is not cleared.

+

Log in to the DDM console, switch to the schema management page, locate the target schema, and click Clear in the Operation column.

+

400

+

DBS.300360

+

The associated instance does not support this operation.

+

Provide environment information, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300362

+

The scaling method is invalid.

+

Select either one of rebalance and reshard.

+

400

+

DBS.300363

+

Pre-check failed.

+

Provide environment information, involved operations, and symptom description and contact technical support.

+

400

+

DBS.300364

+

Failed to check disk space of the DB instance.

+

Perform the following operations to scale up disk space of the DB instance:

+
  1. Log in to the management console.
  2. Hover on the left menu to display Service List and choose Database > Relational Database Service.
  3. On the Instance Management page, locate the required DB instance and click its name.
  4. On the Basic Information page, locate the Storage Space part.
  5. Click Scale and try again after the scaling is complete.
+

400

+

DBS.300365

+

Failed to update metadata.

+

Retry the scale-out task.

+

400

+

DBS.300366

+

Failed to rename physical tables during migration.

+

Retry the scale-out task.

+

400

+

DBS.300367

+

Failed to clear source data.

+

Try again.

+

400

+

DBS.300368

+

Parameter lower_case_table_names of the DB instance is invalid.

+

Perform the following operations to scale up disk space of the DB instance:

+
  1. Log in to the management console.
  2. Hover on the left menu to display Service List and choose Database > Relational Database Service.
  3. On the Instance Management page, locate the required DB instance and click its name.
  4. Choose Parameters in the left navigation pane, search for lower_case_table_names and verify that its value is 1 and retry.
+

400

+

DBS.300369

+

Failed to configure access control. Contact technical support.

+

View DBS-ddm-instancemanager logs and DBS-resource-manager logs and modify as follows:

+
  • If error code APIG.xxxx is returned, indicating that you have no permission to access the API, contact ELB O&M engineers to grant the user the required permission.

    View the URI of the API in the resource management INFO log.

    +
  • If an error code containing ELB.xxxx is displayed, contact ELB O&M engineers to locate the fault.
+

400

+

DBS.300370

+

Load balancing is not enabled for the current DDM instance. To enable it, contact technical support.

+

If needed, go to DBS Operation System to enable access control for the required DDM instance.

+

400

+

DBS.300371

+

Creating a test DDM instance is not supported. To enable this function, contact technical support.

+

Creating DDM instances using the engine ID of a stable version is recommended. To create a test DDM instance, go to the DBS Operation System platform to add the user to the whitelist.

+

View the DDM instance management logs to obtain the whitelist name.

+

400

+

DBS.300372

+

Invalid destination DDM instance.

+

Create a DDM instance as the destination instance.

+

400

+

DBS.300375

+

Invalid {param}.

+

Change the value of {param} and try again.

+

400

+

DBS.300376

+

The time zone is invalid.

+

Enter a correct time zone.

+

400

+

DBS.300377

+

Invalid time range.

+
  1. Ensure that the format of the time range for route switching is HH:mm:ss.
  2. Ensure that the route switching start time and end time are the same day and the interval is longer than 1 hour.
  3. Retry after completing the above operations.
+

400

+

DBS.300379

+

The operation is not allowed for this type of tasks.

+

Enter the ID of the required schema scale-out task.

+

400

+

DBS.300400

+

The task is not found.

+

Enter a valid task ID.

+

400

+

DBS.300401

+

Failed to modify the automatic route switching time range.

+

Provide environment information, involved operations, symptom description, and tenant node logs and contact technical support.

+

400

+

DBS.300402

+

Failed to switch the route manually.

+

Provide environment information, involved operations, symptom description, and tenant node logs and contact technical support.

+

400

+

DBS.300405

+

The schema name length is invalid.

+

Ensure that the schema name contains 2 to 24 characters.

+

400

+

DBS.300406

+

The schema name cannot contain keyword keyword.

+

Ensure that the schema name does not contain information_schema, mysql, performance_schema, and sys.

+

400

+

DBS.300407

+

The schema name cannot contain uppercase letters.

+

Enter a schema name that only consists of lowercase letters.

+

400

+

DBS.300408

+

Failed to check the RDS connectivity.

+
  1. Upgrade Agent to 2.6.1 or later.
  2. Provide environment information, involved operations, symptom description and contact O&M engineers to check whether the Agent is faulty.
+
+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0062.html b/docs/ddm/api-ref/ddm_api_01_0062.html new file mode 100644 index 000000000..87db26295 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0062.html @@ -0,0 +1,52 @@ + + +

Node Classes

+

DDM node classes are listed in the following table and vary according to actual situations.

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Supported DDM node classes

Specification Code

+

vCPUs

+

Memory (GB)

+

Architecture

+

ddm.2xlarge.2

+

8

+

16

+

x86

+

ddm.4xlarge.2

+

16

+

32

+

x86

+

ddm.8xlarge.2

+

32

+

64

+

x86

+
+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0063.html b/docs/ddm/api-ref/ddm_api_01_0063.html new file mode 100644 index 000000000..97ae693fb --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0063.html @@ -0,0 +1,44 @@ + + +

Obtaining a Project ID

+

Scenarios

When calling APIs, you need to specify the project ID in some URLs. To do so, you need to obtain the project ID first Two methods are available:

+ +
+

Obtaining the Project ID by Calling an API

The API used to obtain a project ID is GET https://{Endpoint}/v3/projects. {Endpoint} is the IAM endpoint and can be obtained from Regions and Endpoints. For details about API authentication, see Authentication.

+

The following is an example response. id indicates the project ID.

+
{
+    "projects": [
+        {
+            "domain_id": "65382450e8f64ac0870cd180d14e684b",
+            "is_domain": false,
+            "parent_id": "65382450e8f64ac0870cd180d14e684b",
+            "name": "project_name",
+            "description": "",
+            "links": {
+                "next": null,
+                "previous": null,
+                "self": "https://www.example.com/v3/projects/a4a5d4098fb4474fa22cd05f897d6b99"
+            },
+            "id": "a4a5d4098fb4474fa22cd05f897d6b99",
+            "enabled": true
+        }
+    ],
+    "links": {
+        "next": null,
+        "previous": null,
+        "self": "https://www.example.com/v3/projects"
+    }
+}
+
+

Obtaining a Project ID from the Console

  1. Sign up and log in to the management console.
  2. Move your pointer over the username and select My Credentials in the displayed drop-down list.

    On the displayed page, view project IDs in the project list.

    +
    Figure 1 Viewing project IDs
    +

+
+

+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0064.html b/docs/ddm/api-ref/ddm_api_01_0064.html new file mode 100644 index 000000000..e888489e5 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0064.html @@ -0,0 +1,168 @@ + + +

Status Description

+

DDM Instance Statuses

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 DDM instance statuses

Status

+

Description

+

CREATE

+

The DDM instance is being created.

+

CREATEFAILED

+

The DDM instance fails to be created.

+

RUNNING

+

The DDM instance is running and available.

+

ERROR

+

The DDM instance is faulty.

+

RESTARTING

+

The DDM instance is being restarted.

+

RESIZING

+

Class of the DDM instance fail to be changed.

+

GROWING

+

A DDM instance is being scaled out.

+

REDUCING

+

A DDM instance is being scaled in.

+

data_disk_full

+

Disk space is full.

+

RESTORE

+

A DDM instance is being restored.

+

BACKUP

+

A DDM instance is being backed up.

+

SET_CONFIGURATION

+

The instance parameters are being updated.

+
+
+
+

DDM Schema Statuses

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 DDM schema statuses

Status

+

Description

+

CREATE

+

The schema is being created.

+

RUNNING

+

The schema is running and available.

+

CREATEFAILED

+

The schema fails to be created.

+

DELETING

+

The schema is being deleted.

+

Scaling out

+

The schema is being scaled out.

+

Scaling out failed

+

The schema fails to be scaled out.

+

Rolling back

+

The schema is being rolled back.

+
+
+
+

DDM Node Statuses

+
+ + + + + + + + + + + + + + + + + + + + + + +
Table 3 Node statuses

Status

+

Description

+

normal

+

The node is running normally.

+

abnormal

+

The node is abnormal.

+

creating

+

The DDM instance is being created.

+

createfail

+

The DDM instance fails to be created.

+

enlargefail

+

The DDM instance fails to be scaled out.

+

resizing

+

The node class is being changed.

+
+
+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0069.html b/docs/ddm/api-ref/ddm_api_01_0069.html new file mode 100644 index 000000000..39339a318 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0069.html @@ -0,0 +1,43 @@ + + +

Change History

+
+
+ + + + + + + + + + + + + + + + +
Table 1 Document change history

Released On

+

Description

+

2024-02-22

+

This issue is the fourth official release, which incorporates the following changes:

+

Added instance_id to the response parameters in section Managing the Administrator Password.

+

Deleted order_id from the response parameters in section Changing the Node Class of a DDM Instance.

+

Added subnet_name to the response parameters in section Querying Details of a DDM Instance Node.

+

Added ddmNodeId to the response parameters in section Monitoring Slow Query Logs.

+

2024-01-26

+

This issue is the third official release.

+

Added job_id to response parameters in the following sections.

+ +

2023-10-20

+

This issue is the second official release.

+

Added the SET_CONFIGURATION status in Status Description.

+

Changed the CREATING status to CREATE in Status Description.

+

2023-01-30

+

This issue is the first official release.

+
+
+
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0080.html b/docs/ddm/api-ref/ddm_api_01_0080.html new file mode 100644 index 000000000..a996bcc37 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0080.html @@ -0,0 +1,236 @@ + + +

Modifying the Read Policy of the Associated DB Instance

+

Function

This API is used to modify the read policy of the DB instance associated with a DDM instance.

+
+

Constraints

Make sure that the associated RDS instances are available and not undergoing other operations.

+
+

URI

PUT /v2/{project_id}/instances/{instance_id}/action/read-write-strategy

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

read_weight

+

Yes

+

Map<String, Integer>

+

Read weights of the primary DB instance and its read replicas

+
  • key: DB instance ID
  • value: read weight parameter
+
+
+

+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

success

+

Boolean

+

Whether the operation is successful

+

instance_id

+

String

+

DDM instance ID

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

PUT https://{endpoint}/v2/{project_id}/instances/{instance_id}/action/read-write-strategy
+
+{
+  "read_weight" : {
+    "395298ae6fb9496d95939ed556474983in01" : 60,
+    "38ef52c365a14b7caeb7333137900e96in01" : 50
+  }
+}
+
+

Example Response

Status code: 200

+

ok

+
{
+  "success" : true,
+  "instance_id" : "175f5aff-xxxx-xxxx-xxxx-d0858982bbec"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

ok

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0081.html b/docs/ddm/api-ref/ddm_api_01_0081.html new file mode 100644 index 000000000..77d302468 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0081.html @@ -0,0 +1,204 @@ + + +

Synchronizing Data Node Information

+

Function

This API is used to synchronize configuration information of all data nodes that are associated with a DDM instance.

+
+

Constraints

None

+
+

URI

POST /v1/{project_id}/instances/{instance_id}/rds/sync

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

instanceId

+

String

+

DDM instance ID

+

jobId

+

String

+

Task ID

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

POST https://{endpoint}/v1/{project_id}/instances/{instance_id}/rds/sync
+
+

Example Response

Status code: 200

+

OK

+
{
+  "instanceId" : "1f5c9fd6cd984056ba89c8c87cc03278in09",
+  "jobId" : "6f1334ca-faa6-479e-837f-f3219192675e"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0082.html b/docs/ddm/api-ref/ddm_api_01_0082.html new file mode 100644 index 000000000..4a85cb736 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0082.html @@ -0,0 +1,301 @@ + + +

Querying Nodes of a DDM Instance

+

Function

This API is used to query nodes of a DDM instance.

+
+

Constraints

None

+
+

URI

GET /v1/{project_id}/instances/{instance_id}/nodes?offset={offset}&limit={limit}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

offset

+

No

+

Integer

+

Index offset.

+

The query starts from the next piece of data indexed by this parameter. The value is 0 by default.

+

The value must be a positive integer.

+

limit

+

No

+

Integer

+

A maximum of nodes to be queried.

+

Value range: 1 to 128.

+

If the parameter value is not specified, 10 nodes are queried by default.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

nodes

+

Array of NodeList objects

+

Instance node information

+

offset

+

Integer

+

Which page the server starts returning items.

+

limit

+

Integer

+

Number of records displayed on each page

+

total

+

Integer

+

Number of DDM instance nodes

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 5 NodeList

Parameter

+

Type

+

Description

+

port

+

String

+

Port

+

status

+

String

+

Node status For details, see Status Description.

+

node_id

+

String

+

Node ID

+

ip

+

String

+

ip

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/nodes?offset={offset}&limit={limit}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "nodes" : [ {
+    "port" : "5066",
+    "status" : "normal",
+    "node_id" : "4a2b97b7f5e3462c9c78aae93b46ed83no09",
+    "ip" : "192.168.0.160"
+  } ],
+  "offset" : 0,
+  "limit" : 128,
+  "total" : 1
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0083.html b/docs/ddm/api-ref/ddm_api_01_0083.html new file mode 100644 index 000000000..55d9f9fe0 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0083.html @@ -0,0 +1,277 @@ + + +

Querying Details of a DDM Instance Node

+

Function

This API is used to query details of a DDM instance node.

+
+

Constraints

None

+
+

URI

GET /v1/{project_id}/instances/{instance_id}/nodes/{node_id}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+

node_id

+

Yes

+

String

+

DDM instance node ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3 Response body parameters

Parameter

+

Type

+

Description

+

status

+

String

+

Node status For details, see Status Description.

+

name

+

String

+

Node name

+

node_id

+

String

+

Node ID

+

private_ip

+

String

+

Private IP address of the node

+

floating_ip

+

String

+

Floating IP address of the node

+

server_id

+

String

+

VM ID

+

subnet_name

+

String

+

Subnet name

+

datavolume_id

+

String

+

Data disk ID

+

res_subnet_ip

+

String

+

IP address provided by the resource subnet

+

systemvolume_id

+

String

+

System disk ID

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/nodes/{node_id}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "status" : "normal",
+  "name" : "ddm2-test_node_01",
+  "node_id" : "4a2b97b7f5e3462c9c78aae93b46ed83no09",
+  "private_ip" : "192.168.0.160",
+  "floating_ip" : "100.65.78.158",
+  "server_id" : "8bd4d0bd-f63e-489a-95b6-50351f9657e6",
+  "subnet_name": "manageSubnet",
+  "datavolume_id" : "30ade9fb-26de-4d1f-af08-c376974b9d86",
+  "res_subnet_ip" : "172.16.15.224",
+  "systemvolume_id" : "88d7de55-f886-4929-ae7c-04d842959700"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0084.html b/docs/ddm/api-ref/ddm_api_01_0084.html new file mode 100644 index 000000000..1f7a25b8c --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0084.html @@ -0,0 +1,342 @@ + + +

Querying Parameters of a Specified DDM Instance

+

Function

This API is used to query parameters of a specified DDM instance.

+
+

Constraints

None

+
+

URI

GET /v3/{project_id}/instances/{instance_id}/configurations?offset={offset}&limit={limit}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

offset

+

No

+

Integer

+

Index offset.

+

The query starts from the next piece of data indexed by this parameter. The value is 0 by default.

+

The value must be a positive integer.

+

limit

+

No

+

Integer

+

A maximum of parameters to be queried.

+

Value range: 1 to 128.

+

If the parameter value is not specified, 10 parameters are queried by default.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Language

+

No

+

String

+

Language.

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

updated

+

String

+

Time when DDM instance parameters are last updated

+

configuration_parameter

+

Array of ConfigurationParameterList objects

+

Information about DDM instance parameters

+

offset

+

Integer

+

Which page the server starts returning items

+

limit

+

Integer

+

Number of records displayed on each page

+

total

+

Integer

+

Total collections

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 ConfigurationParameterList

Parameter

+

Type

+

Description

+

name

+

String

+

Parameter name

+

value

+

String

+

Parameter value

+

need_restart

+

String

+

Whether the instance needs to be restarted

+

read_only

+

String

+

Whether the parameter is read-only

+

value_range

+

String

+

Parameter value range

+

data_type

+

String

+

Parameter type

+

description

+

String

+

Parameter description

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v3/{project_id}/instances/{instance_id}/configurations
+
+

Example Response

Status code: 200

+

OK

+
{
+  "updated" : "2021-11-09 03:26:52",
+  "configuration_parameter" : [ {
+    "name" : "temp_table_size_limit",
+    "value" : "1000000",
+    "need_restart" : "0",
+    "read_only" : "0",
+    "value_range" : "500000-2000000000",
+    "data_type" : "integer",
+    "description" : "Maximum size of the temporary table."
+  } ],
+  "offset" : 0,
+  "limit" : 128,
+  "total" : 22
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0085.html b/docs/ddm/api-ref/ddm_api_01_0085.html new file mode 100644 index 000000000..7d99ab3a9 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0085.html @@ -0,0 +1,480 @@ + + +

Modifying Parameters of a DDM Instance

+

Function

This API is used to modify parameters of a DDM instance.

+
+

Constraints

None

+
+

URI

PUT /v3/{project_id}/instances/{instance_id}/configurations

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Language

+

No

+

String

+

Language.

+

X-Auth-Token

+

Yes

+

String

+

User token

+

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

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

values

+

Yes

+

values object

+

Parameters that need to be modified

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 4 values

Parameter

+

Mandatory

+

Type

+

Description

+

bind_table

+

No

+

String

+

Data association among multiple sharded tables. The optimizer processes JOIN operations at the MySQL layer based on these associations. The format is [{tb.col1,tb2.col2},{tb.col2,tb3.col1},...].

+

character_set_server

+

No

+

String

+

DDM server's character set. To store emoticons, set both this parameter and the character set on RDS to utf8mb4. To modify the character set, you must change the collation of the DDM server correspondingly.

+

Enumerated values:

+
  • gbk
  • utf8
  • utf8mb4
+

collation_server

+

No

+

String

+

Collation on the DDM server. To modify the collation, you must modify the server's character set correspondingly.

+

Enumerated values:

+
  • utf8_unicode_ci
  • utf8_bin
  • gbk_chinese_ci
  • gbk_bin
  • utf8mb4_unicode_ci
  • utf8mb4_bin
+

concurrent_execution_level

+

No

+

String

+

Concurrency level of scanning table shards in a logical table. DATA_NODE: indicates that database shards are scanned in parallel and table shards in each database shard are scanned in serial. RDS_INSTANCE: indicates that RDS instances are scanned in parallel and shards in each DB instance are scanned in serial. PHY_TABLE: indicates that all table shards are scanned in parallel.

+

Enumerated values:

+
  • RDS_INSTANCE
  • DATA_NODE
  • PHY_TABLE
+

connection_idle_timeout

+

No

+

String

+

Number of seconds the server waits for activity on a connection before closing it. The value ranges from 60 to 28800. The default value is 28800, indicating that the server waits for 28800 seconds before closing a connection.

+

enable_table_recycle

+

No

+

String

+

Whether the table recycle bin is enabled.

+

Enumerated values:

+
  • OFF
  • ON
+

insert_to_load_data

+

No

+

String

+

Whether constant values can be inserted by executing the LOAD DATA statement.

+

Enumerated values:

+
  • OFF
  • ON
+

live_transaction_timeout_on_shutdown

+

No

+

String

+

Timeout limit of an in-transit transaction, in seconds. The value ranges from 0 to 100. The default value is 1, indicating that the server waits for 1 second before closing the connection.

+

long_query_time

+

No

+

String

+

Minimum duration of a query to be logged as slow, in seconds. The value ranges from 0.01 to 10. The default value is 1, indicating that the query is considered as a slow query if its execution duration is greater than or equal to 1 second.

+

max_allowed_packet

+

No

+

String

+

Maximum size of a packet or any generated intermediate string. The packet message buffer is initialized to net_buffer_length bytes, but can grow up to max_allowed_packet bytes if required. This value is small by default, to catch large (and possibly incorrect) packets. The value must be a multiple of 1024. The value ranges from 1024 to 1073741824. The default value is 16777216.

+

max_backend_connections

+

No

+

String

+

Maximum of concurrent RDS client connections allowed per DDM instance. When this parameter is set to 0 (default), the maximum concurrent connections from a DDM node to an RDS instance is: (RDS instance's maximum connections - 20)/DDM nodes. The value ranges from 0 to 10000000.

+

max_connections

+

No

+

String

+

Concurrent connections allowed per DDM instance, which depends on the class and quantity of associated RDS instances. The default value is 20000. The value ranges from 10 to 40000, indicating that the maximum of concurrent connections cannot exceed 40,000.

+

min_backend_connections

+

No

+

String

+

Minimum concurrent connections from a DDM node to an RDS instance. The default value is 10. The value ranges from 0 to 10000000.

+

not_from_pushdown

+

No

+

String

+

Whether the SELECT statements that do not contain any FROM clauses are pushed down.

+

Enumerated values:

+
  • OFF
  • ON
+

seconds_behind_master

+

No

+

String

+

Threshold in seconds of the replication lag between a primary RDS instance to its read replica. The value ranges from 0 to 7200. The default value is 30, indicating that the time for data replication between the primary RDS instance and its read replicas cannot exceed 30 seconds. If the time exceeds 30 seconds, the data read requests are no longer forwarded to the read replicas.

+

sql_audit

+

No

+

String

+

Whether SQL audit is enabled.

+

Enumerated values:

+
  • OFF
  • ON
+

sql_execute_timeout

+

No

+

String

+

Number of seconds to wait for a SQL statement to execute before it times out. The value ranges from 100 to 28800. The default value is 28800, indicating that the SQL statement times out if its execution time is greater than or equal to 28,800 seconds.

+

support_ddl_binlog_hint

+

No

+

String

+

Whether a binlog hint is added to each DDL statement.

+

Enumerated values:

+
  • OFF
  • ON
+

transaction_policy

+

No

+

String

+

Transactions supported by DDM. XA transaction, which attempts to ensure atomicity and isolation. FREE transaction, which is a best-effort commit transaction that allows data to be written to multiple shards, without impacting performance. FREE transactions do not ensure atomicity. NO_DTX transaction, which is a single-shard transaction.

+

Enumerated values:

+
  • XA
  • FREE
  • NO_DTX
+

ultimate_optimize

+

No

+

String

+

Whether the SQL execution plan is optimized based on parameter values.

+

Enumerated values:

+
  • OFF
  • ON
+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

nodeList

+

String

+

DDM instance nodes

+

needRestart

+

Boolean

+

Whether the instance needs to be restarted

+

jobId

+

String

+

Task ID

+

configId

+

String

+

Parameter group ID

+

configName

+

String

+

Parameter group name

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

PUT https://{endpoint}/v3/{project_id}/instances/{instance_id}/configurations
+
+{
+  "values" : {
+    "long_query_time" : 2
+  }
+}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "nodeList" : null,
+  "needRestart" : "false",
+  "jobId" : "9fe84a77-6a6b-4b03-9a3e-db910a548657",
+  "configId" : null,
+  "configName" : null
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0089.html b/docs/ddm/api-ref/ddm_api_01_0089.html new file mode 100644 index 000000000..aa3e2241e --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0089.html @@ -0,0 +1,15 @@ + + +

Monitoring

+
+
+ + + +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0090.html b/docs/ddm/api-ref/ddm_api_01_0090.html new file mode 100644 index 000000000..b7590944e --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0090.html @@ -0,0 +1,340 @@ + + +

Monitoring Slow Query Logs

+

Function

This API is used to query the SQL statements that take a long time to execute on the DDM instance within a specified time range.

+
+

Constraints

None

+
+

URI

GET /v2/{project_id}/instances/{instance_id}/slowlog?curPage={curPage}&perPage={perPage}&startDate={startDate}&endDate={endDate}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

curPage

+

Yes

+

String

+

Which page the server starts returning items. The start value cannot be less than 1.

+

perPage

+

Yes

+

String

+

Number of records displayed on each page

+

startDate

+

Yes

+

String

+

Start time. The format is UNIX timestamp, in milliseconds.

+

endDate

+

Yes

+

String

+

End time. The format is UNIX timestamp, in milliseconds.

+

The interval between the start time and the end time must be no more than 7 days.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

totalRecord

+

Integer

+

Number of slow query logs

+

slowLogList

+

Array of SlowLogList objects

+

Information about slow query logs

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 SlowLogList

Parameter

+

Type

+

Description

+

users

+

String

+

Username of the DDM account for executing the slow SQL statement

+

database

+

String

+

Name of the schema where the slow SQL statement is executed

+

querySample

+

String

+

Syntax for executing the slow SQL statement

+

logTime

+

String

+

Time when the slow SQL statement starts to be executed

+

time

+

String

+

Time for a SQL statement to execute, accurate to milliseconds

+

shards

+

String

+

Name of the physical shard

+

rowsExamined

+

String

+

Number of rows affected by the SQL statements that take a long time to execute

+

host

+

String

+

Client IP address. This IP address may involve personal data. Anonymizing the IP address data is recommended.

+

ddmNodeId

+

String

+

ID of the DDM node for executing the slow SQL statement

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v2/{project_id}/instances/{instance_id}/slowlog?curPage={curPage}&perPage={perPage}&startDate={startDate}&endDate={endDate}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "totalRecord" : 2,
+  "slowLogList" : [ {
+    "users" : "testddm",
+    "database" : "test1",
+    "querySample" : "select id, sleep(3) from test",
+    "logTime" : "2021-04-26T02:40:21",
+    "time" : "12002",
+    "shards" : "test1_0000",
+    "rowsExamined" : "4",
+    "host" : "192.168.16.18",
+    "ddmNodeId":"47667f9ed2a54af7ba9ca46d8d37c26f****"
+  } ]
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0100.html b/docs/ddm/api-ref/ddm_api_01_0100.html new file mode 100644 index 000000000..e1f432902 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0100.html @@ -0,0 +1,369 @@ + + +

Querying DB Instances Available for Creating a Schema

+

Function

This API is used to query DB instances that can be used for creating a schema.

+
+

Constraints

None

+
+

URI

GET /v1/{project_id}/instances/{instance_id}/rds?offset={offset}&limit={limit}

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 2 Query parameters

Parameter

+

Mandatory

+

Type

+

Description

+

offset

+

No

+

Integer

+

Index offset.

+

The query starts from the next piece of data indexed by this parameter. The value is 0 by default.

+

The value must be a positive integer.

+

limit

+

No

+

Integer

+

Maximum records to be queried.

+

Value range: 1 to 128.

+

If the parameter value is not specified, 10 is used by default.

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 3 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

X-Auth-Token

+

Yes

+

String

+

User token.

+

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

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

instances

+

Array of QueryAvailableRdsList objects

+

DB instances that can be used for creating a schema

+

offset

+

Integer

+

Which page the server starts returning items

+

limit

+

Integer

+

Number of records displayed on each page

+

total

+

Integer

+

Total collections

+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 5 QueryAvailableRdsList

Parameter

+

Type

+

Description

+

id

+

String

+

DB instance ID

+

projectId

+

String

+

Project ID of the tenant that the DB instance belongs to

+

status

+

String

+

DB instance status

+

name

+

String

+

DB instance name

+

engineName

+

String

+

Engine name of the DB instance

+

engineSoftwareVersion

+

String

+

Engine version of the DB instance

+

privateIp

+

String

+

Private IP address for connecting to the DB instance

+

mode

+

String

+

DB instance type (primary/standby or single-node)

+

port

+

Integer

+

Port for connecting to the DB instance

+

azCode

+

String

+

AZ

+

timeZone

+

String

+

Time zone

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 7 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

GET https://{endpoint}/v1/{project_id}/instances/{instance_id}/rds?offset={offset}&limit={limit}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "instances" : [ {
+    "id" : "c6f68fed9e74478c8679479a07d7d568in01",
+    "projectId" : "055d9f4ee780d4d42f96c01c1bc3c50c",
+    "status" : "normal",
+    "name" : "test-ddm",
+    "engineName" : "mysql",
+    "engineSoftwareVersion" : "5.7",
+    "privateIp" : "192.168.23.97",
+    "mode" : "Ha",
+    "port" : 3306,
+    "azCode" : "az1az1",
+    "timeZone" : "UTC+08: 00"
+  }, {
+    "id" : "337e2598c2a64cb5935079f85996731din01",
+    "projectId" : "055d9f4ee780d4d42f96c01c1bc3c50c",
+    "status" : "normal",
+    "name" : "test-ddm",
+    "engineName" : "mysql",
+    "engineSoftwareVersion" : "5.7",
+    "privateIp" : "192.168.23.221",
+    "mode" : "Ha",
+    "port" : 3306,
+    "azCode" : "az1az1",
+    "timeZone" : "UTC+08: 00"
+  } ],
+  "offset" : 0,
+  "limit" : 6,
+  "total" : 2
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0101.html b/docs/ddm/api-ref/ddm_api_01_0101.html new file mode 100644 index 000000000..781caaf40 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0101.html @@ -0,0 +1,241 @@ + + +

Managing the Administrator Password

+

Function

If it is the first time to call this API, it is used to create an administrator and reset its password for a DDM instance. Then this API can only be used to update the administrator password.

+
+

URI

PUT /v3/{project_id}/instances/{instance_id}/admin-user

+ +
+ + + + + + + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+

instance_id

+

Yes

+

String

+

DDM instance ID

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

x-auth-token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

name

+

Yes

+

String

+

Username of the administrator. The username:

+
  • Can include 1 to 32 characters.
  • Must start with a letter.
  • Can contain only letters, digits, and underscores (_).
+

password

+

Yes

+

String

+

Password of the administrator. The password:

+
  • Can include 8 to 32 characters.
  • Must be a combination of uppercase letters, lowercase letters, digits, and the following special characters: ~!@#%^*-_=+? Must be a strong password to improve security and prevent security risks such as brute force cracking.
+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

instance_id

+

String

+

DDM instance ID

+

job_id

+

String

+

Task ID

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

PUT https://{endpoint}/v3/{project_id}/instances/{instance_id}/admin-user
+
+{
+  "name" : "root",
+  "password" : "****"
+}
+
+

Example Response

Status code: 200

+

OK

+
{ 
+  "instance_id" : "175f5aff-****-****-****-d0858982bbec",
+  "job_id" : "b9e057a0-f0fb-4987-9d21-f3a7550b32e7"
+}
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_01_0102.html b/docs/ddm/api-ref/ddm_api_01_0102.html new file mode 100644 index 000000000..6e5c2f862 --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_01_0102.html @@ -0,0 +1,212 @@ + + +

Validating Password Strength

+

Function

This API is used to check whether an instance password is a weak password.

+
+

URI

POST /v3/{project_id}/weak-password-verification

+ +
+ + + + + + + + + + + +
Table 1 Path parameters

Parameter

+

Mandatory

+

Type

+

Description

+

project_id

+

Yes

+

String

+

Project ID of a tenant in a region

+
+
+
+

Request Parameters

+
+ + + + + + + + + + + +
Table 2 Request header parameters

Parameter

+

Mandatory

+

Type

+

Description

+

x-auth-token

+

Yes

+

String

+

User token.

+

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

+
+
+ +
+ + + + + + + + + + + +
Table 3 Request body parameters

Parameter

+

Mandatory

+

Type

+

Description

+

password

+

Yes

+

String

+

Character string to be validated

+
+
+
+

Response Parameters

Status code: 200

+ +
+ + + + + + + + + +
Table 4 Response body parameters

Parameter

+

Type

+

Description

+

is_weak_password

+

Boolean

+

Whether the password is a weak password. The value can be: true: indicating that the password is a weak password. Such a password is not recommended. false: indicating that the password is not a weak password. Such a password is recommended.

+
+
+

Status code: 400

+ +
+ + + + + + + + + + + + + +
Table 5 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+

Status code: 500

+ +
+ + + + + + + + + + + + + +
Table 6 Response body parameters

Parameter

+

Type

+

Description

+

errCode

+

String

+

Service error code

+

externalMessage

+

String

+

Error message

+
+
+
+

Example Request

POST https://{endpoint}/v3/{project_id}/weak-password-verification
+
+{
+  "password" : "xxx"
+}
+
+

Example Response

Status code: 200

+

OK

+
{
+  "is_weak_password" : true
+}
+
+

Status code: 400

+

bad request

+
{
+  "externalMessage" : "Parameter error.",
+  "errCode" : "DBS.280001"
+}
+

Status code: 500

+

server error

+
{
+  "externalMessage" : "Server failure.",
+  "errCode" : "DBS.200412"
+}
+

Status Codes

+
+ + + + + + + + + + + + + +

Status Code

+

Description

+

200

+

OK

+

400

+

bad request

+

500

+

server error

+
+
+
+

Error Codes

For details, see Error Codes.

+
+
+
+ +
+ diff --git a/docs/ddm/api-ref/ddm_api_02_0000.html b/docs/ddm/api-ref/ddm_api_02_0000.html new file mode 100644 index 000000000..1a62433ae --- /dev/null +++ b/docs/ddm/api-ref/ddm_api_02_0000.html @@ -0,0 +1,21 @@ + + + +

APIs (Recommended)

+ +

+
+ +
+ +
+ diff --git a/docs/ddm/api-ref/en-us_image_0000001685146158.png b/docs/ddm/api-ref/en-us_image_0000001685146158.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a37a976d4576d256107faeb20bd06794b51b43 GIT binary patch literal 51740 zcmdSB2T)Yox-QygMZtuM2z%r{>b+O@Jd0h6-E_~MbIdXR|4U;&lD{lTOT$P*B9UmN zrOqpmNNYk!q}2=?*W;CqThBG%Kbx$j)a*zkx_89?Rs|lT+eacDAW5G;qvZU2xa+F9 zM!);w_z{hFKb2~A4#!B*_`>ds-}}d?79a| zfA#KkE*QAC{lzV-pndDNy=D7K6Em`rR&z7M)$OOFzh+t{$X{sYJ1P?|l_H~ZVjYM6 zi6!p46ZfC7%Vhd-iY$8Edbz#+)Y#2>S9UMIFWon1Kc#BqT5iIrl5UAi9+B)?Mf_T3 zv}V;#;+LJ*oF{-Dj3sRkRS z;^_`Ej^G-ZgeDo*9gL*r1@@Ik~y}ZR$sL zGOi83DkR?dRoq@@L+y=>SAl_n1#K5EUi5t>NWA__m%^tj>>H!cn`oNDA@=8le}M~^n`qFFcVCT?MF-kfvP zqE1TK_mFg7-suCcWA+<;e0~+5x6sVDy>RZ_x$0h9b#?W|U%y_PQ&didD{}<$E@WG1 z96EFe*W)_fYnd2v&!N)T!NEb&)3h?)u_z%ve)6-P-@tpHeXiQ)Mx3*=vqNl>0xu^V zmX3&s2n!8u`1$h{XN^L}H6`BA=3l?8n><$ITAXxirZ1)O*WssCA%83G zJ6ZniHEY$_jG4W?lA@wwwLUL?7@3&(EhMPJSpl)Q^3c$|5kfX+RnxUws;eJ!Y398+ z8~p;WS5-;VZrQ>=Tv_$>$S%Li!&Pe=G`UpUmh6Qs&c^La+wth`#|V+OZ0^xh)8FrB zP>vsS@besq3s&L^p6Uy?8Vogx^tYg}eVUq@GO@K)SXfwKV=A5P3uiM=OG#m;rx|FB zyJX8G`Sj`2!J#3(!{s>#{U2_+({8TP)YK%hI)3Qgqn!mdJ@dG74PxDTRN{xeqNh&HT*%=wp$5hio+%Lri^!4>IPU~@7E>Wq}!_w~V z?xtpDiit`J`I=vHxWmK49r|sIM7r7wE((i?Y!&sInWk7BW7raw`K7K-ZWqnHf_09# z$&(F|`xBKojt0uK)V)tjPfso`*6Ql&Vk@GMQ+0V>-MhE$I45VwLSaDxzpyZev_o5C zON+t#8zMEC^fdSQB_y~h(PL|=V|{)7O7j>I?{=vX^Ek@Kckk|A zjuKCmV!csq7QX30d01GO0#|TTUAQ1lJUc(X{dE++hs0toR~r8=!u@$@XkvKp;Mf>3 zvh(vru@QXta(nzGS^T@l+Awe!DOQVn37TBFW)kWe8oe`ACks9%y5zXHif46PoSepb zdgqFZi#LRAvWPD%q>^j&N`D8Yzsk*3-MMooro5?zMPO`!kw#qVt)YooelfAG*AbX- zy}bs~8hR@1^v!K;xq77-R%MP|S#L*i1{{GhP2wHoRLTABN@GP6zLz6}57%TmjvT>R z-`b$jv{%+?`dFaM!0+Cg0CBC_!%_9&M#th(FBo;IWl$QhTpJp$%E`($2i|GrVrhD{ zKjBK03Ra=_d~>FSM#eSSL?xM?o*swv5tZF8^3n1?eSMvxt}iUkl%{|CcAa+X)?+Mw z;WiFN_Vp1W30V1d%%iKN8e3EPfBcAjT=7yZFQK9K#({00#(OH|OokM%h~WfsjrLnm zT64_WWQ}t;&DuO%c6AaZu+x*Jz+tF0HD+|JWt2wWT&G?A_EBQ+nG)jWX>HB@=epse|aOrxzZxA#(=2mwoH{-i^K&8xozzp*|}1UrC48H<8+j?IJ{$1 zYD$W+xw-7^(_cT;Y9^4e-t5+6k=K^=Q$LBUPj!=?Ev_KKaI-S1hqcrD`MXC4%a zd!3SyNH@)KsT`sAzJSAY=1hDWwPBK6vu2HC7cKFw4U@}_N`UevVwL^5j!&QdMiFWp z$mR`w($3B3!?D{tbirLbiX-rGQcF@tM+g7Olku`_icYess=*f}C3A|3G@a;jQ_mla zj*C0I(hfo_8jO|3ojZ$EDCz1H>YqP7enZg@SWvA|s?h>YQn%339u2M;5sI>)7zS~N z*I{}Kh$XaD_hz!Ov1Jz&sJBI-Q=tHJdyIQyu?9>IAcGd4K-cFM z6jWTa0hi&7O8cJoJ_Qzyt^4WNjvR3q?aVJIi4?MVIr@C`^VmsopZ6~ufhtI(F@fX$ z4r?TN82G=P@1Ri+m3_Z9tmD8Qx(A1)JxXliGjtUM@306%~5aL zQ)yE>@fd3oy_0QNv(Qlv)wnRI-?Cr)lJnmRS~Z#Wi}N?7qk`fvRZvwG5@WYY%*zLJ zX%S;QlwO)%N_BQBPLpIh#WNdq6Soj1x-le==oOke*zPTt{g zrf*M(US@krnpR=_<~>~O+cti%VUoLid2qHrDwq|s=ATvt zw$9Gy^B$#pH#>>qzBN-QX4+0s?e^(S%xk1w7N**Ih3E`&F@R-%nK1Hn{cdbZxYFkS zwZ7NZ)Wqb(Up!27$HMDS3sbpt)q~}LrKzJ6oGn0Y`SK;LwN+(y z!2?(WKkK~SFk9r`mQRYROWx&kQ9wi_xuW92)a2wVdG=Qc36*!>bqt|w2lohJbmNy2 zm69wC)8yHk*VT^jnfll}Ii;=H?3Sym^6B{}?HD%;eZc76}i{iHQle(-Eia z-cQy=T;~j~p{>t&{rZJ2Pu?Lni_*xnv@|V>b??M%f!%*}GGMIa!a@x%FRuXd7m=Ep zn)te$905DIoDK>lCp%kd4~w9nAew`mhEG}+c|SUDQ93c7oX66*e`keX?2XUY96fC@ zoG^c4+s0Qo(xpq6FeQRx-6h6yi=SutckHbk!F~BXJAb>px3=~Pmv)h{%*Cze#G_Ot zB_+GeEb~O&=dzDRJJi^0EyulJ6?nd#Y@xwjI-iLZ{JyeMfS*6Mq@?8B&}Mw?Eibcz z4}Kz4AwE7uL9>?bZWIR7)nOu=+q=6<`!{u+43FqZ&Hd707gQV3Ao_FGlesIQovr+R?u+YKXuE2n_=_u7t{kJM8DST5xL1C??&HVSzyeE4%Or)wSHK93t?p?` z9In&(Sy_s0XFXkA$we04sA)xa2@w|K; zSFPm^U!K*^kr|~tV6Wb8PEPyLqLt&A&imQ*cH!fceVycFE#_&Dzb_~36AyPO)!Kle z`E{VsDDq8FIC`_8kx@%ilU@CWstp%n)GAR{6%yZN1>sF)?%!{34jGln($dlrb{g%x z>a>BjIZbn)&&8Pq0Uo@8_R8JU>_4b*6<+k7tW@~&WH z39r(xttVRuGWVd-EiQUoIOs1%4U}U2A>_-Nn4DZQSzjF0Vwy8L)!`9!$}WDC3Gh2n z$+TYlBqiOEGCeUWu)9#J#?fc=f<>Wg@dne%iva-3{Gy_q6f$TH3K`|sAM=yRW^HK$ zBHgpT9>1SPfe+|@}_{)syZm;e;6We5Bkkx)@frokH+R4UC+@Xt7rVOK_&-T6d zWfoy8?bgX1Q7xSdjC7w?YbU4TR=4SRYJIcL`xY|1TYT(pkC4mnsv|?IJDQuHp&_B? z)h*cQ_*L9sJIyTOXfCN?Rk}bX$PXqaF4JDPIHo>_nnNa=-nelV7vwLcFS)PKgddl3 zX~d&$v?924-XP0LIHL8(5B>66!}s6q(RO|_c>+b<-MwqLXJR({^=o-2+Fn~VLCem+ zyT??qfu8RidE5OUXfUs^tI4gnro8_*|K&u z&3Z3~Grg~ILFt|gLw)@i{nXS{lk3;dprB4#=<1$E?)f&J9{%L%0NvRwbC~KIjf0_i@MHiwW_7rv~#XmV#~1h-Lrp9bc0yZ)?ek^ zEx^Z@rRT`I<56?nkGTbpt~{HV(T?EYVAOucwHi3(uV*s)xAaZhRv1#uDXsZ-{ro3R zT$fq1^U>W2-+MOh~HO`o6w6irnh zO9xfZ>vpg0pCH)Aa$SFLQ;cB?s-iKlT-!<1{*t*OGC3ZXJz?kSS_mK}KKJubpv+a_RAhBJF5Qjv(&$o{8#h?1;Js>0(SygHjFS;HsD*s zh8*G^Hnwh{1_the!11#>@L1mzV3uvZ<{lifY}Lk*tVSJwN-H<@5s z3eYxFqC{#9v*x~fZMC2MZ7`t@oE*AI%&t#XD}S)Lx!HHzKL7eCkX7kOMwW#}rQd$R znO}(skpcDnBJ%ryCynYO1xC-55r3m%>AFJ$6g`ulIM ztFIqZml^7~vbW#zOpGSi&|piluw902;=7bl`hd-`|o(*me>olXg;`r#Y!b$Z&7 zfNkCtVwA0GR}YSiwA6bp+I1D(Y+7ryypCGz{r5ZlMKAa;k1woI9dmjF#l%wO*|QG~kL><1H#eumPA^M=z9Q@}*j!TX3cO6QDowQ( zD$>&sVrq3AD^9qPVXUIU%)s!sff@mGJs(;#N!~kq1`r(615{3=1Ebp)`k^Z=4uhA| zrcH5p-sx^S*8leH9oCVJ&7+(ayrG>L&Q}jXh8ZiNrm-@&Pe7+6l@-4n*kTBEjVqY1 z_a&MRV6cDo)R`h6S98kZHy6}0KtMzP{WJNsN*o3Ayl5s7iaCfdxx?AtDcnb=-u6BGnvtNlLE;{-z z$X204=8nviOD4cn?N-*-^3X3(as(~bu3okCPwe|{hxTE0)2MQDM{bW_Ui(AZ!t3G- z4`)y=J>4fZWVSDy&uUR#$B0y%p zf@QX4edWf#Y~S#|F{}UIge0PF&CGdwK*FYGW{&N6Bo(m2aqZ_OO(w#6gu+2#k%5 zKh$!u+?Qu(l{VZx-d7hsM=4#(yXKrFV^LC>Aw_g(Me*J-ovfUA8l)DDg!hSz#3Jb zfRU8xpm}-h*fCU9P?}FzPnRP_P2L)??l=+63+aN1?ot5yM>|;uD8{N}HXfa8tCFRu zS`eycUw=RD%oMeIN&AZE_+7k$dsXKVE&t(p&p+yLCzhFXz!&!!E$D1DWQ({a6LdUN zef`)`H?qahy*=9UqAaSy5htl*Ez`sWW@MZICL631?B>7iyxh~fi%KZtI7LjJ2aK)6 zZ4=E4TVLzzOLxjQ25T9z0_y&R+YQK>C=YcdP=?ubTZ25Or>8l>>yj{yf@=~}Q{|xB zgvwrQF;#}f!RdIYYHb0mgq{+^fc7fQDj-A{iWXBrQp`%Hr>d`i{ZwM;VzyeI<}w3K6 z4p%)ZZbkVM>Daj3yz#5Ln%Y$-Cnv4Xrb>%pHN9bu9b}8*`QJ6PxeLD@NGP%HIAuL+ z1h!{rX!xwoa0+NqW^S^*cAuan0T2vzO1ryx%0AZD@BjI{u{Gzp=uHI(1CKApP%TB6 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μMKUP;j3tZz2lr=fW<}VJLdca4MNKQ^pP%GM| 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 literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/caution_3.0-en-us.png b/docs/ddm/api-ref/public_sys-resources/caution_3.0-en-us.png new file mode 100644 index 0000000000000000000000000000000000000000..60f60762138fe7d98fa081415cf26a4943897779 GIT binary patch literal 2752 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 literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/icon-arrowdn.gif b/docs/ddm/api-ref/public_sys-resources/icon-arrowdn.gif new file mode 100644 index 0000000000000000000000000000000000000000..379428032932289326e52c2772bd90ba3d88b906 GIT binary patch literal 1887 zcmZ?wbhEHbCgqow z*eU^C3h_d20o>TUVm+{T^pf*)^(zt!^bPe4Kwg3=^!3HBG&dKny0|1L72#g21{a4^ z7NqJ2r55Lx7A2Jm>Ih`8X1|p zSh~8p7&*iAy5uL9=BDPA!1Sgd^t#~G3rY&P1wfl!Qj0RnQd8WD@^clyUbf1_?G{Iz z=0WwQ;C71>PQCg-$LND17Ac}(Lcr7mV#1RxkONQnsd>QEUIa|mjQ{`r{qy_R&mZ5v zef{$J)5j0*-@SeF`qj%9&!0Vg^7zri2lwyYy>t84%^TORUA=Po(!~qs&z(JU`qar2 z$B!L7a`@1}1N-;w-Lrew&K=vgZQZhY)5ZeMTG_VdAT{+S(zE> zX{jm6Nr?&Zaj`McQIQehVWA3>*p!%p5Wn0u7E$th{n6D>ft^YU5&dnB%c=(a~-RV>2EO25SIA CZ-yWM literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/icon-arrowrt.gif b/docs/ddm/api-ref/public_sys-resources/icon-arrowrt.gif new file mode 100644 index 0000000000000000000000000000000000000000..6aaaa11c23e919c4798d7dcd2b1ae98dd35dd316 GIT binary patch literal 1890 zcmZ?wbhEHb7yetOgf{ zR2HP_2c;J0mlh?b0+lO+tSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu08>u$h8JcxGNo zetEGbSiP^Wm1kaYNn&1ds;7&s63_&_%*+%k11Cod14Ab>6ALqQLqk^=3j-5FHzP|& zBUd9gQwvj9m|mCsATTyHM;rzL?XHK6w zdE)r7qel)OI(T6JzP)>P@7lRz`?jrHHgDRvVg0(bYgVsXxnlXUrArnsTDV~Tyt#8` z&zd=7`n0K2CQq6;p}()Ur@O1OqrI)QrMaoGp}wxRrn;)KqP(oMq`0WCAU`iRCp#-M zBRwrOB{?ZEAwDiPCORrIB0MZKBseHAz~9f;$J@)(!`;o*#o5Wx!QRf+#@fo#!raW% z#MsEtKwnQ+M_Wr%LtRZ(MOjHvL0(Q)Mp{ZzLR?H#L|8~rfS-?-hntI&gPo0)g_((w zfkE*n3y@@B&;b#k`jUY|nSq%>!ec`MLnAA%oR7zc2TpB#@>)|YCO&lN;uMU!b7Eqm H1A{dHTIz>f literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/icon-caution.gif b/docs/ddm/api-ref/public_sys-resources/icon-caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..079c79b263f4b48089f3b3256154c73e7699593f GIT binary patch literal 1086 zcmW+#YfRQ<6hA3LZMyP?V}KhnEtF{Q4vGxS52AozEVM85nq$#%tv8gRF!3GhgM?_) zd5Luv3SKrXFTGCpn$y>EMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/icon-danger.gif b/docs/ddm/api-ref/public_sys-resources/icon-danger.gif new file mode 100644 index 0000000000000000000000000000000000000000..079c79b263f4b48089f3b3256154c73e7699593f GIT binary patch literal 1086 zcmW+#YfRQ<6hA3LZMyP?V}KhnEtF{Q4vGxS52AozEVM85nq$#%tv8gRF!3GhgM?_) zd5Luv3SKrXFTGCpn$y>EMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/icon-huawei.gif b/docs/ddm/api-ref/public_sys-resources/icon-huawei.gif new file mode 100644 index 0000000000000000000000000000000000000000..a31d60f895af919d33855217ca02daf4093136d7 GIT binary patch literal 2767 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 GE&l)<3Z_>8 literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/icon-notice.gif b/docs/ddm/api-ref/public_sys-resources/icon-notice.gif new file mode 100644 index 0000000000000000000000000000000000000000..409070650a49518feb1624c624d814c3bfa63d2e GIT binary patch literal 962 zcmb7D&r8&C5S<{wSd_qn6)U)w5LOaRh!N}_*49lD)S!dZp@M<3gPIX|@UR9-fz+X3 zAaT9)OY{xZtO-;RC85Vab;JEUNIMS5f^r$7-e%-XK`j{0+N$CsgpRd6B1wp z8dw-cH^rU^H4`&7qgabf)l^K`l!66{q9$U(CKRO5%W5pfY)s&YQ6n`HBR0ZTum%`N zgC%I8hQ+`JG_WvCAt-W$sIn@BKCDG1qQWW^a=`*c7G+i@s0S(ZDv1&+K_2`7O-#cM z=m!ZX1Z#kSG+3e)Jg^wpfCd(Yb5TZ)U=a!DwsG z)Z`|1ejMK4ap%CHj;%+>T6=D++5I=uBbQ$fZ48cf{hV1}9&Njl-I}i7e0#6Hdug@s zsr-57_=gLr&9Ros$k}}M>tJ77=hEJ}iPaZ%8|P+gUbS|Oj}5I{|5nZZc)C1$e*Rj` d`09hYXJ4M@PhCx)dHK8WZo1*|*q+^V@*ncduk8Q; literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/icon-tip.gif b/docs/ddm/api-ref/public_sys-resources/icon-tip.gif new file mode 100644 index 0000000000000000000000000000000000000000..c47bae05c9fd17c02a851d96cfac67bf194498d8 GIT binary patch literal 879 zcmchWKWmj?48@OdDOZPr)a61!OE4yGD)salg#|^Ix$qIEF#uk)V>D{95e^!2r`i+9t# zTMu5YtUcd+@#gp0tDE;9ug>oLIzL$6dOx4-t#2PKExu1KulwoYeD?Os#mVO%AMWih HO|EMGZQ&sWI^~+e%qWysRPK%BSD+f4-fabAGq;|Cf|4nO{(o zMH%#n$oXf^sdM5SJ4e1UbEeM389O82RCB6M#VI=_KP%=$orn{5LVlIau{svV?3jS$ z$Q-F7am0>L02|Q2!ZN1G^Z2J`V#a3VX;G<~iYc3tSAnLeiI}hnc~O{UH5OwwCTPT} zks65+8-W$70S3`f30dfY7}$UY7M95y@-?2QvMPChphYF3!YbtLLIs*E%B)Oq4^fy^ z5+zoGJ>&tI*hU=i4-s$()c}KNsKh9AfEd_-1{V3`d>b_$i;xcz{y>Y0S(uP3>_P>a zLM((Fku(B;E{r2+xJ8u612VCVIG_oJ;Sj0;2GQ7rEa(6+umMf}M1C4=)Odu8AxQWG zEh;Aearj(=d;4Z^LLYN*6+asU?Nbl3^Q%D|{s@6Xj}(aZHwkoj-~bw*1FnSd;0aX! zUW<-TPD&b;6s;@zw7K~4mF9cDuK&BQ;b_N-Cj%R=CnEjde9%~1kk}vYY^@mTTNm%F z?mbrf*~d#iX;?ITDf(MHQdK;&p(ek&e9qe?*&A0E)mG(1s`J*pn^#ttId4vCXjV$j zj464u)2F9Q$V#0!dHk4(FDB#D&wP^f0*q1)G?4!%Xe>;ROD~Oee-}xfJUd+aa_0AK zFP$vgR2te>+%}b$hVw&Ni`yT>F5LNRM@_utk68Piwi5??BLBpCcb8mx|3c*1x!xZJ zKU!7(#h8s(^x)5*w=Z0K{=a9#qeoHU|0&%MiU0rr literal 0 HcmV?d00001 diff --git a/docs/ddm/api-ref/public_sys-resources/note_3.0-en-us.png b/docs/ddm/api-ref/public_sys-resources/note_3.0-en-us.png new file mode 100644 index 0000000000000000000000000000000000000000..57a0e1f53377b28fd80ceb393b035f8d9b8b392a GIT binary patch literal 1080 zcmV-81jqY{P)pI>PbXFRA}Dqnq7z+RTRg6r`*v5D@IBmL~4s5$SN3-f`YICkrqS^ z3O*?4J{4psT?>Nv;P$DA4|YKmeJd1v=!+{-P(e)MT23E4 zfpM5g?!;YNyXOywggfWv-aG#}pA%7499KRz`7Lmw98Q!I<#3`LPLvbnaH1TQ5UMEG zlVk_b1{y%CK&5Na8Kh~iV1CQyHSIUD=$Ui|Y1(mW{t2nlnW!hpqTT3)%#9tQ2@Hwc z4!jG@4brq%Pm%+`OlEvYXy4{GY5awd{We?gCpulWuT{Z9`oN)jk~9ZtI#ba@Tm#IC$eXI#i?GB7 z@C|Siuxi7{ffK+jzyrW_z5t&id2Xi{7fGOZ7RUNhF z=`q(YYu4B2zr}fA1-My6UW~A&C(H`Z0J{sqLLYb>ST?)$UTJH~j4 z)U5D`kx~@HyTBjADBwh`9UcOHGnaO3gx+o=^sFTdqcDs&7cD!S1Y1R9DJQENmMBXi zUX68u7SqPL=oS0?tDydiCJNY=lMCxo@cxg;Iw&H0tZv&cB5#jSkGc8v45{4-xAi@+ zH#c^6Llb3aTk2cp0#8`%*2*ZSb3DivIwje71|rV*JnwHI2e{V0 z?L}VtT_k|}D>qFKHz^_)cUMxtxkDBWXzz2D1oirfKkqs5Z>m~O`i+$JJR1>-NN>fsG-Q5hHbmeou}1??2@ zp;^{uvz{qy3k557pH|h^|K(Paf~;?wS^K(J)S`9Ki+p;|vZBS3*BostG+QG&8PgN& z=@C2h$ubuxBJTs&=XH#%UFPZrh=oAMNN{DPG_uReuDWcPESRPGOKD;{Otwcu3X@*QY`k0+@}-e yxT4{IZgHXpLI!Q!9RCwC$n{8}UWfaGMW8J;IUE8&LY1fUhGLTVa3!QBW+ZA*L=y*M3rfr5il?z?dJZieJ#47>M$@*mD4$1ecadv1qsU1#wR$;qu4Bmh4yS`Hi)ReG=4*#e zajgEV5YlLPaKTMvrW)|6L6Y@JtlU|tX}9u@d<^;|8a!TJ`kRn8mKIZX-z)%<^+`jn z738I}>P{CwooQ#@mc8ItdHsQ6rsk%O$iLY)*x7Zcj%}lwEK@`-=;otzSyX+&p9{kzQYbgSF@Q=2Qy+?#VW0=Vy|cYT&lQ@%;A2YQ{hH z9%ov+34{hBa~SnWOw39F;7p5`9$z4G?cJ)An*I*rb~&khdI=d8h1SkK)If-j5C2TB z8p4%r<<^31tR|Tw4Xs1QHMjMk20}yD8f4p%dXd_$me9Z-SWPlj8%nUOe;>LpUUAI& z1+$nxI~Q3>q`9q!{1-nPlEMa4o@e_SGSdvCrzn))J%_ut?ipfIn4e4CD=Pq4zT@D? zqk$|@wV{L*qfBG7mtFghv-Lntl$pcnz~kwNI)BUSUuvgmQEXp5=UThz?DmmjlsW$V z@)3#dyh6UbBYa%QD%n4gom-Glu20@0My{Xs3VRpaU9=0QxbJP-J)Pz^`?kOW30Tn z@ufYqb@gL4$<)8N0%S?kG%v#(IqvH7UvcW1v+a@N8!}9Baks0-uUUYP1beE1+)Q)S zUobczB2ql)J>S90pM1~e2X4k70q-59;@Rj(Ixc6Ok_Z$V@dbE+GNTrV;HlFQ=lRMeN%CX^J*|inqrfX$fdWuECU& zYE~#M%8xCgqI||*N`--7Xw)BgEZ#bB0-qYhW>q--LhLmBU*r0E*5+4PP+l2n2}rtV z_qXh+#jl32SrvAyo2R)OD=o_BoyYIMW>x6y_Tety7r)3^eF8`TK$3KP{`eA2F}YpN zxa|~0YP$+*PB&3e-M~W&UFbFHknL5q%yVT?GB=Ox3?p^VEh7*N@$03nevU0%RA*Qe zy8Bd~e78Ejsl=~x+vYF$e)B!#In3BC3Kw>)rNi4F>6}lnndnzTghB(1f9&nZP({}9 z<_Y#X?@5R5*rUdbm zZ9zPQB)-@t_#f`t1VTsxAtZr72uUD>BoIOp2q6gsLP&yt3mvdY+y=oIIs7M?<}pwN SX0_=60000pR4oO5oRCwC$oPSW0cb>;zfj~mSuLKN~5E4Ot2?$cVg1bfW*MgmP zwXW?r{^)GC>z&@*cI;fk*-bA_)*65J|u{1o1b~sY9&bgB!&FtPHC|>aqwkEf8t)sIV8a zy`l<$fv1-750WZjrUfER4&AbBw(qRs>9xxN*j}-pMOzA)VQ&y-TOiWJv9nVR=-IGB zL`2wi-rWtmJCwYrnwtLq8d^@54N{_E#qc2?d98FYUt9|#UM6CV$k!5{lNa$(kHW9K zOnWgQF}`S;)25`yKPRE0?;CL9SWtgolNa zrBRX}cY`9==aUXcrj$ru%8RMoU&9MOUrS=-S8j{+s~_?FOYc$kFAFFdtPOe${ncT1 z{rLzf8V%)-DtvDE-wqmRZ8xCPYAJtA<5`q3{Ob`bjZO9Fv|84D-@EVUj$Eg)=@6=E z@#L*7W|qCq*W!xRyz%}azq+NTrIL{{k5{wx9=$&5QFz+d73A@UdA>TE#nbrfC(X3B z8(6fZ$fI-Rsms(id`VH^EXwBij$f6Q%6pGy`z7a}PPWn1d>+=6lPmX*Un}gz{Ox!v z`WEl|IDGSOT%3|O*G+D{rZj7N?NbLjt(LV5jh=HqnA?U z8mrYxV|c!gMHxe<(a3REu1^wRwhaLAc*#s3m+W-80O+~e%iEuijH}D~<%`(7rkqDg z=TTZb2dmA-!DFZR&9(3NZQo)rQeiLlD~pmzCp{Of?FN2YE1pz;Th3*$^KYlnx3rR& zpyJ_&X0!Fj%Xs-G%lKj0eA3fW0mv9`|G!E9Ya~lJ`Po^X-Lx2KsErPD79Hj+q@gxm z{Mlkoes-3_qjQ5Er(oy{Vq#*j+H8D$A>2z=-J3vbyTSAQk0(04Sglr))oM!O z`@CekFQuSwX(c8)8igX37UN~i63tz8`Qdaso8^aiGyN2A&2A@2H4T81Uv&6wZ?)Oj zTifJC_?WSn~TqB!^hRw*Ad4e7J~3dFR=6G>_8NdnsMLm)G}au^{sd3m-1x^#e`g zF3xz6x-4W*PjVBduE|UGaf6#U1-aQM6tVOT40?@sz!ZhmW+Or>@p4-Zv4VXye+OW7 zc`+d&A#@sz?CP00DZSLHz!o=IttMHmrqgKTxg*zuw$4$Jkz99N$7-|j*1@mnmSvB7 zO=WExR-28GkWk(!3-#*~r7p`oB}P+1qz`Ts(`7QTajn||ZQHTiBYWfRy#Q?8q@~Mb zVxKK9=<$~3C;^C&N<0(TEz8Di8z5P&W>aZ0G0`z}8jaMCZ=XmZMWeykeJP-en=p}N zQr=uQi}bWqx=f~kF79@>Z|%3c-P>cc{E{db1WhEfM8nqKxzqiJbY}y$o33o;>9xz* zUQson-E%k07oQ_VqoK9kz%l!D08Tq~beT*pkf^ z4(PF1`pDEKqI8;gLeoonS}MI}GariryW_5*SlZ-;)XNs|tUjBo*UTssvHYZ9)NlJ) z_By_sKLd-UZ%SNTyvWApvWyA2xbs6QE?m4wVctygq*taq{STT*zcFP3uVFUm(>{fsnY2byQucdN-4PVNGGwlltbpW(qxPn=t@v%0g@(xlo8u|zNX$;Tj zL~B0)v5_*bKys%(iq>`m{r&x%z8c|~$V_b_07FC0fQu6zCMG;gOl!LV)wFmvmglg* zQ8R8V_1h;>NK8;+wORT1?%)IOmvT)cCaCB#nI=Te-qC2U(nDqS8QysRkk_a3)aCm} zq?bP(MW@xWs-)NJe1QW+nJCD~rsrxeyN)(b$ZgNE*Rg8RgYE+A=jS;+kQlUu{`Kmaq-Zo)ZC1bW*X)SP zB&*dleDyW$_FJ1<>AK4LvN>#CQ_ki!<><89`&-$rmo4DrXSKYw{l~;e&UndGvBREY zdBhz%GStSin-=p=&;OneA1vbs!`1gR{w#YP5zt^s>sevrzAfWX_)uEYBrfUeBv}`^qrW~HGWfKsmsDE zOQ*BGS9P4Wl`RF-yksh zy60FsZNNwVNWragKrk^ve!4rg7mMBdVO@#NOI{X#h4i#kMn*=saPcD79Zs)o<((?G z^^%CiJRf_Q&GJKDpRI*9vNO}^G#dG@zTAL%%&<4GWyKs~qN8as7&HHba-?wT_zK+{<0Kls4ZZI zwt3@|Ua`~d_}Me*beT*+rNNJ9iBKqFak*TiXf(`~bowmtSfv`EtT@NZqPks+{a z5!JMKPh8~>&n-znE|bw}==6Ccb0>biz(smmDwnVHu}ZPEji zzW45)-n*6<0^#-C^K4pKLR_4Zk&zJ&pEynB{*O3#>=aGS=dlkuD9FiX!}lillwCC0 z-?hEgU&dQ|syVhNu(h$+M6CR&JD%9FMMGhZ|GG+tIg8TOds)AHF)ylW?m2UG5RP)x z8t}<_w^)soA(EXPo(HDmU3a@1zaW|JX{#K%Oq;}A@|fXl@p%B-Ez8C%ib2W{N|$?g zkBuLwVmzkfoqdk=b-RuZv4S>9rqBJ{sq>hQNv?~2V>^dfL1TD6U)yB#J4cCkVw)_#|7FHwSFj&?I903+@}Q+?E}XNC3Nz=CN(ZZjK1= zEPb1Cd{SB4f1Go_kMMN4^{(v-b4ID$mhCyd8&;L{vU{JFmp>h)qCi-YZ!0DoBh||m zu>a`Eo9X_gaoZQ>jE+kpfEdXop55erJD^6gL|Bn;DJE=@t~lNAw+sx9aIkUClqxYW z=nj}aF^#ZTB`nJSYa&gTT1nApc>bmLzAo-6E0000