Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Clusters, databases, nodes, and shards collect various statistics at regular tim
- [Cluster stats]({{< relref "/operate/rs/references/rest-api/requests/cluster/stats" >}})
- [Database stats]({{< relref "/operate/rs/references/rest-api/requests/bdbs/stats" >}})
- [Node stats]({{< relref "/operate/rs/references/rest-api/requests/nodes/stats" >}})
- [Shard stats]({{< relref "/operate/rs/references/rest-api/requests/shards-stats" >}})
- [Shard stats]({{< relref "/operate/rs/references/rest-api/requests/shards/stats" >}})

### Response object

Expand Down
140 changes: 140 additions & 0 deletions content/operate/rs/references/rest-api/requests/shards/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
---
Title: Shard requests
alwaysopen: false
categories:
- docs
- operate
- rs
description: REST API requests for database shards
headerRange: '[1-2]'
hideListLinks: true
linkTitle: shards
weight: $weight
---

| Method | Path | Description |
|--------|------|-------------|
| [GET](#get-all-shards) | `/v1/shards` | Get all shards |
| [GET](#get-shard) | `/v1/shards/{uid}` | Get a specific shard |

## Get all shards {#get-all-shards}

GET /v1/shards

Get information about all shards in the cluster.

### Request {#get-all-request}

#### Example HTTP request

GET /shards?extra_info_keys=used_memory_rss&extra_info_keys=connected_clients

#### Request headers

| Key | Value | Description |
|-----|-------|-------------|
| Host | cnm.cluster.fqdn | Domain name |
| Accept | application/json | Accepted media type |

#### Query parameters

| Field | Type | Description |
|-------|------|-------------|
| extra_info_keys | list of strings | A list of extra keys to be fetched (optional) |

### Response {#get-all-response}

Returns a JSON array of [shard objects]({{<relref "/operate/rs/references/rest-api/objects/shard">}}).

#### Example JSON body

```json
[
{
"uid": "1",
"role": "master",
"assigned_slots": "0-16383",
"bdb_uid": 1,
"detailed_status": "ok",
"loading": {
"status": "idle"
},
"node_uid": "1",
"redis_info": {},
"report_timestamp": "2024-06-28T18:44:01Z",
"status": "active"
},
{
"uid": 2,
"role": "slave",
// additional fields...
}
]
```

### Status codes {#get-all-status-codes}

| Code | Description |
|------|-------------|
| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error. |

## Get shard {#get-shard}

GET /v1/shards/{int: uid}

Gets information about a single shard.

### Request {#get-request}

#### Example HTTP request

GET /shards/1?extra_info_keys=used_memory_rss&extra_info_keys=connected_clients

#### Request headers

| Key | Value | Description |
|-----|-------|-------------|
| Host | cnm.cluster.fqdn | Domain name |
| Accept | application/json | Accepted media type |

#### URL parameters

| Field | Type | Description |
|-------|------|-------------|
| uid | integer | The unique ID of the requested shard. |

#### Query parameters

| Field | Type | Description |
|-------|------|-------------|
| extra_info_keys | list of strings | A list of extra keys to be fetched (optional) |

### Response {#get-response}

Returns a [shard object]({{<relref "/operate/rs/references/rest-api/objects/shard">}}).

#### Example JSON body

```json
{
"assigned_slots": "0-16383",
"bdb_uid": 1,
"detailed_status": "ok",
"loading": {
"status": "idle"
},
"node_uid": "1",
"redis_info": {},
"role": "master",
"report_timestamp": "2024-06-28T18:44:01Z",
"status": "active",
"uid": "1"
}
```

### Status codes {#get-status-codes}

| Code | Description |
|------|-------------|
| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error. |
| [404 Not Found](https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found) | Shard UID does not exist. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
Title: Shard actions requests
alwaysopen: false
categories:
- docs
- operate
- rs
description: REST API requests to perform shard actions
headerRange: '[1-2]'
hideListLinks: true
linkTitle: actions
weight: $weight
---

## Migrate

| Method | Path | Description |
|--------|------|-------------|
| [POST]({{<relref "/operate/rs/references/rest-api/requests/shards/actions/migrate#post-multi-shards">}}) | `/v1/shards/actions/migrate` | Migrate multiple shards |
| [POST]({{<relref "/operate/rs/references/rest-api/requests/shards/actions/migrate#post-shard">}}) | `/v1/shards/{uid}/actions/migrate` | Migrate a specific shard |
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
---
Title: Migrate shards requests
alwaysopen: false
categories:
- docs
- operate
- rs
description: REST API requests to migrate database shards
headerRange: '[1-2]'
linkTitle: migrate
weight: $weight
---

| Method | Path | Description |
|--------|------|-------------|
| [POST](#post-multi-shards) | `/v1/shards/actions/migrate` | Migrate multiple shards |
| [POST](#post-shard) | `/v1/shards/{uid}/actions/migrate` | Migrate a specific shard |

## Migrate multiple shards {#post-multi-shards}

POST /v1/shards/actions/migrate

Migrates the list of given shard UIDs to the node specified by `target_node_uid`. The shards can be from multiple databases. This request is asynchronous.

#### Required permissions

| Permission name | Roles |
|-----------------|-------|
| [migrate_shard]({{< relref "/operate/rs/references/rest-api/permissions#migrate_shard" >}}) | admin<br />cluster_member<br />db_member |

### Request {#post-multi-request}

#### Example HTTP request

POST /shards/actions/migrate

#### Example JSON body

```json
{
"shard_uids": ["2","4","6"],
"target_node_uid": 9,
"override_rack_policy": false,
"preserve_roles": false,
"max_concurrent_bdb_migrations": 3
}
```

#### Request headers

| Key | Value | Description |
|-----|-------|-------------|
| Host | cnm.cluster.fqdn | Domain name |
| Accept | application/json | Accepted media type |

#### Request body

The request body is a JSON object that can contain the following fields:

| Field | Type | Description |
|-------|------|-------------|
| shard_uids | array of strings | List of shard UIDs to migrate. |
| target_node_uid | integer | UID of the node to where the shards should migrate. |
| override_rack_policy | boolean | If true, overrides and ignores rack-aware policy violations. |
| dry_run | boolean | Determines whether the migration is actually done. If true, will just do a dry-run. |
| preserve_roles | boolean | If true, preserves the migrated shards' roles after migration. |
| max_concurrent_bdb_migrations | integer | The number of concurrent databases that can migrate shards. |

### Response {#post-multi-response}

Returns a JSON object with an `action_uid`. You can track the action's progress with a [`GET /v1/actions/<action_uid>`]({{<relref "/operate/rs/references/rest-api/requests/actions#get-action">}}) request.

#### Example JSON body

```json
{
"action_uid": "e5e24ddf-a456-4a7e-ad53-4463cd44880e",
"description": "Migrate was triggered"
}
```

### Status codes {#post-multi-status-codes}

| Code | Description |
|------|-------------|
| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error. |
| [400 Bad Request](https://www.rfc-editor.org/rfc/rfc9110.html#name-400-bad-request) | Conflicting parameters. |
| [404 Not Found](https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found) | A list of shard uids is required and not given, a specified shard does not exist, or a node UID is required and not given. |
| [500 Internal Server Error](https://www.rfc-editor.org/rfc/rfc9110.html#name-500-internal-server-error) | Migration failed. |


## Migrate shard {#post-shard}

POST /v1/shards/{int: uid}/actions/migrate

Migrates the shard with the given `shard_uid` to the node specified by `target_node_uid`. If the shard is already on the target node, nothing happens. This request is asynchronous.

#### Required permissions

| Permission name | Roles |
|-----------------|-------|
| [migrate_shard]({{< relref "/operate/rs/references/rest-api/permissions#migrate_shard" >}}) | admin<br />cluster_member<br />db_member |

### Request {#post-request}

#### Example HTTP request

POST /shards/1/actions/migrate

#### Example JSON body

```json
{
"target_node_uid": 9,
"override_rack_policy": false,
"preserve_roles": false
}
```

#### Request headers

| Key | Value | Description |
|-----|-------|-------------|
| Host | cnm.cluster.fqdn | Domain name |
| Accept | application/json | Accepted media type |


#### URL parameters

| Field | Type | Description |
|-------|------|-------------|
| uid | integer | The unique ID of the shard to migrate. |


#### Request body

The request body is a JSON object that can contain the following fields:

| Field | Type | Description |
|-------|------|-------------|
| target_node_uid | integer | UID of the node to where the shard should migrate. |
| override_rack_policy | boolean | If true, overrides and ignores rack-aware policy violations. |
| dry_run | boolean | Determines whether the migration is actually done. If true, will just do a dry-run. |
| preserve_roles | boolean | If true, preserves the migrated shards' roles after migration. |

### Response {#post-response}

Returns a JSON object with an `action_uid`. You can track the action's progress with a [`GET /v1/actions/<action_uid>`]({{<relref "/operate/rs/references/rest-api/requests/actions#get-action">}}) request.

#### Example JSON body

```json
{
"action_uid": "e5e24ddf-a456-4a7e-ad53-4463cd44880e",
"description": "Migrate was triggered"
}
```

### Status codes {#post-status-codes}

| Code | Description |
|------|-------------|
| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error. |
| [404 Not Found](https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found) | Shard does not exist, or node UID is required and not given. |
| [409 Conflict](https://www.rfc-editor.org/rfc/rfc9110.html#name-409-conflict) | Database is currently busy. |
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ categories:
description: Shard statistics requests
headerRange: '[1-2]'
hideListLinks: true
linkTitle: shards/stats
linkTitle: stats
weight: $weight
aliases: /operate/rs/references/rest-api/requests/shards-stats/
---

| Method | Path | Description |
Expand Down Expand Up @@ -132,8 +133,8 @@ Returns a JSON array of [statistics]({{< relref "/operate/rs/references/rest-api

| Code | Description |
|------|-------------|
| [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | No error |
| [404 Not Found](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5) | No shards exist |
| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error |
| [404 Not Found](https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found) | No shards exist |

## Get shard stats {#get-shard-stats}

Expand Down Expand Up @@ -231,12 +232,10 @@ Returns [statistics]({{< relref "/operate/rs/references/rest-api/objects/statist
}
```



### Status codes {#get-status-codes}

| Code | Description |
|------|-------------|
| [200 OK](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1) | No error |
| [404 Not Found](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5) | Shard does not exist |
| [406 Not Acceptable](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7) | Shard isn't currently active |
| [200 OK](https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok) | No error |
| [404 Not Found](https://www.rfc-editor.org/rfc/rfc9110.html#name-404-not-found) | Shard does not exist |
| [406 Not Acceptable](https://www.rfc-editor.org/rfc/rfc9110.html#name-406-not-acceptable) | Shard isn't currently active |
Loading