Optimize shards placement database action requests
Optimize shard placement requests
| Redis Enterprise Software | 
|---|
| Method | Path | Description | 
|---|---|---|
| GET | /v1/bdbs/{uid}/actions/optimize_shards_placement | Get optimized shards placement for a database | 
Get optimized shards placement
GET /v1/bdbs/{int: uid}/actions/optimize_shards_placement
Get optimized shards placement for the given database.
Required permissions
| Permission name | Roles | 
|---|---|
| view_bdb_info | admin cluster_member cluster_viewer db_member db_viewer user_manager | 
Request
Example HTTP request
GET /v1/bdbs/1/actions/optimize_shards_placement
Query parameters
Include query parameters in a GET request to generate an optimized shard placement blueprint for a database, using settings that are different from the database's current configuration.
| Field | Type | Description | 
|---|---|---|
| avoid_nodes | list of integers | Comma-separated list of cluster node IDs to avoid when placing the database’s shards and binding its endpoints (for example, avoid_nodes=1,2) | 
| memory_size | integer (default: 0) | Database memory limit (0 is unlimited), expressed in bytes | 
| shards_count | integer, | Number of database server-side shards | 
| shards_placement | densesparse | Control the density of shards dense: Shards reside on as few nodes as possiblesparse: Shards reside on as many nodes as possible | 
| bigstore_ram_size | integer (default: 0) | Memory size of bigstore RAM part, expressed in bytes | 
| replication | enableddisabled | In-memory database replication mode | 
The following example request includes shards_count and memory_size as query parameters:
GET /v1/bdbs/1/actions/optimize_shards_placement?shards_count=10&memory_size=10000
Response
To rearrange the database shards, you can submit the blueprint returned in this response body as the shards_blueprint field in the PUT /v1/bdbs/{uid} request.
Example JSON body
[
    {
        "nodes": [
            {
                "node_uid": "3",
                "role": "master"
            },
            {
                "node_uid": "1",
                "role": "slave"
            }
        ],
        "slot_range": "5461-10922"
    },
    {
        "nodes": [
            {
                "node_uid": "3",
                "role": "master"
            },
            {
                "node_uid": "1",
                "role": "slave"
            }
        ],
        "slot_range": "10923-16383"
    },
    {
        "nodes": [
            {
                "node_uid": "3",
                "role": "master"
            },
            {
                "node_uid": "1",
                "role": "slave"
            }
        ],
        "slot_range": "0-5460"
    }
]
Headers
| Key | Value | Description | 
|---|---|---|
| Content-Length | 352 | Length of the request body in octets | 
| cluster-state-id | 30 | Cluster state ID | 
Status codes
| Code | Description | 
|---|---|
| 200 OK | No error | 
| 404 Not Found | Database UID does not exist | 
| 406 Not Acceptable | Not enough resources in the cluster to host the database | 
Rearrange database shards
Use the blueprint returned by the GET /v1/bdbs/{uid}/actions/optimize_shards_placement request as the value of the shards_blueprint field to rearrange the database shards.
To ensure that the optimized shard placement is relevant for the current cluster state, pass the cluster-state-id, taken from the response header of the GET request, in the PUT /v1/bdbs/{uid} request headers.
The cluster will reject the update if its state was changed since the optimal shards placement was obtained.
Request
Example HTTP request
PUT /v1/bdbs/1
Headers
| Key | Value | Description | 
|---|---|---|
| Host | cnm.cluster.fqdn | Domain name | 
| Accept | application/json | Accepted media type | 
| cluster-state-id | 30 | Cluster state ID | 
Example JSON body
{
  "shards_blueprint": [
    {
      "nodes": [
        {
          "node_uid": "2",
          "role": "master"
        }
      ],
      "slot_range": "0-8191"
    },
    "..."
  ]
}