Database requests
Database requests
Method | Path | Description |
---|---|---|
GET | /v1/bdbs |
Get all databases |
GET | /v1/bdbs/{uid} |
Get a single database |
PUT | /v1/bdbs/{uid} |
Update database configuration |
PUT | /v1/bdbs/{uid}/{action} |
Update database configuration and perform additional action |
POST | /v1/bdbs |
Create a new database |
POST | /v2/bdbs |
Create a new database |
DELETE | /v1/bdbs/{uid} |
Delete a database |
Get all databases
GET /v1/bdbs
Get all databases in the cluster.
Permissions
Permission name | Roles |
---|---|
view_all_bdbs_info | admin cluster_member cluster_viewer db_member db_viewer user_manager |
Request
Example HTTP request
GET /v1/bdbs?fields=uid,name
Headers
Key | Value |
---|---|
Host | The domain name or IP of the cluster |
Accept | application/json |
Query parameters
Field | Type | Description |
---|---|---|
fields | string | Comma-separated list of field names to return (by default all fields are returned). (optional) |
Response
The response body contains a JSON array with all databases, represented as BDB objects.
Body
[
{
"uid": 1,
"name": "name of database #1",
"// additional fields..."
},
{
"uid": 2,
"name": "name of database #2",
"// additional fields..."
}
]
Status codes
Code | Description |
---|---|
200 OK | No error |
Example requests
cURL
$ curl -k -X GET -u "[username]:[password]" \
-H "accept: application/json" \
https://[host][:port]/v1/bdbs?fields=uid,name
Python
import requests
import json
url = "https://[host][:port]/v1/bdbs?fields=uid,name"
auth = ("[username]", "[password]")
headers = {
'Content-Type': 'application/json'
}
response = requests.request("GET", url, auth=auth, headers=headers)
print(response.text)
Get a database
GET /v1/bdbs/{int: uid}
Get a single database.
Permissions
Permission name | Roles |
---|---|
view_bdb_info | admin cluster_member cluster_viewer db_member db_viewer user_manager |
Request
Example HTTP request
GET /bdbs/1
Headers
Key | Value |
---|---|
Host | The domain name or IP of the cluster |
Accept | application/json |
URL parameters
Field | Type | Description |
---|---|---|
uid | integer | The unique ID of the database requested. |
Query parameters
Field | Type | Description |
---|---|---|
fields | string | Comma-separated list of field names to return (by default all fields are returned). (optional) |
Response
Returns a BDB object.
Example JSON body
{
"uid": 1,
"name": "name of database #1",
"// additional fields..."
}
Status codes
Code | Description |
---|---|
200 OK | No error |
404 Not Found | Database UID does not exist |
Update database configuration
PUT /v1/bdbs/{int: uid}
Update the configuration of an active database.
If called with the dry_run
URL query string, the function will validate the BDB object against the existing database, but will not invoke the state machine that will update it.
This is the basic version of the update request. See Update database and perform action to send an update request with an additional action.
To track this request's progress, poll the /actions/<action_uid>
endpoint with the action_uid returned in the response body.
Permissions
Permission name | Roles |
---|---|
update_bdb | admin cluster_member db_member |
Request
Example HTTP request
PUT /bdbs/1
Headers
Key | Value |
---|---|
Host | The domain name or IP of the cluster |
Accept | application/json |
Content-type | application/json |
Query parameters
Field | Type | Description |
---|---|---|
dry_run | Validate the new BDB object but don't apply the update. |
URL parameters
Field | Type | Description |
---|---|---|
uid | integer | The unique ID of the database for which update is requested. |
Body
Include a BDB object with updated fields in the request body.
Example JSON body
{
"replication": true,
"data_persistence": "aof"
}
The above request attempts to modify a database configuration to enable in-memory data replication and append-only file data persistence.
Response
Returns the updated BDB object.
Example JSON body
{
"uid": 1,
"replication": true,
"data_persistence": "aof",
"// additional fields..."
}
Status codes
Code | Description |
---|---|
200 OK | The request is accepted and is being processed. The database state will be 'active-change-pending' until the request has been fully processed. |
404 Not Found | Attempting to change a nonexistent database. |
406 Not Acceptable | The requested configuration is invalid. |
409 Conflict | Attempting to change a database while it is busy with another configuration change. In this context, this is a temporary condition, and the request should be reattempted later. |
Error codes
When errors are reported, the server may return a JSON object with error_code
and message
field that provide additional information. The following are possible error_code
values:
Code | Description |
---|---|
rack_awareness_violation | • Non rack-aware cluster. • Not enough nodes in unique racks. |
invalid_certificate | SSL client certificate is missing or malformed. |
certificate_expired | SSL client certificate has expired. |
duplicated_certs | An SSL client certificate appears more than once. |
insufficient_resources | Shards count exceeds shards limit per bdb. |
not_supported_action_on_crdt | reset_admin_pass action is not allowed on CRDT enabled BDB. |
name_violation | CRDT database name cannot be changed. |
bad_shards_blueprint | The sharding blueprint is broken or doesn’t fit the BDB. |
replication_violation | CRDT database must use replication. |
eviction_policy_violation | LFU eviction policy is not supported on bdb version<4 |
replication_node_violation | Not enough nodes for replication. |
replication_size_violation | Database limit too small for replication. |
invalid_oss_cluster_configuration | BDB configuration does not meet the requirements for OSS cluster mode |
missing_backup_interval | BDB backup is enabled but backup interval is missing. |
crdt_sharding_violation | CRDB created without sharding cannot be changed to use sharding |
invalid_proxy_policy | Invalid proxy_policy value. |
invalid_bdb_tags | Tag objects with the same key parameter were passed. |
unsupported_module_capabilities | Not all modules configured for the database support the capabilities needed for the database configuration. |
redis_acl_unsupported | Redis ACL is not supported for this database. |
Update database and perform action
PUT /v1/bdbs/{int: uid}/{action}
Update the configuration of an active database and perform an additional action.
If called with the dry_run
URL query string, the function will validate the BDB object against the existing database, but will not invoke the state machine that will update it.
Permissions
Permission name | Roles |
---|---|
update_bdb_with_action | admin cluster_member db_member |
Request
Example HTTP request
PUT /bdbs/1/reset_admin_pass
The above request resets the admin password after updating the database.
Headers
Key | Value |
---|---|
Host | The domain name or IP of the cluster |
Accept | application/json |
Content-type | application/json |
URL parameters
Field | Type | Description |
---|---|---|
uid | integer | The unique ID of the database to update. |
action | string | Additional action to perform. Currently supported actions are: flush , reset_admin_pass . |
Query parameters
Field | Type | Description |
---|---|---|
dry_run | Validate the new BDB object but don't apply the update. |
Body
Include a BDB object with updated fields in the request body.
Example JSON body
{
"replication": true,
"data_persistence": "aof"
}
The above request attempts to modify a database configuration to enable in-memory data replication and append-only file data persistence.
Response
If the request succeeds, the response body returns the updated BDB object. If an error occurs, the response body may include an error code and message with more details.
Status codes
Code | Description |
---|---|
200 OK | The request is accepted and is being processed. The database state will be 'active-change-pending' until the request has been fully processed. |
403 Forbidden | redislabs license expired. |
404 Not Found | Attempting to change a nonexistent database. |
406 Not Acceptable | The requested configuration is invalid. |
409 Conflict | Attempting to change a database while it is busy with another configuration change. In this context, this is a temporary condition, and the request should be reattempted later. |
Error codes
When errors are reported, the server may return a JSON object with error_code
and message
field that provide additional information. The following are possible error_code
values:
Code | Description |
---|---|
rack_awareness_violation | • Non rack-aware cluster. • Not enough nodes in unique racks. |
invalid_certificate | SSL client certificate is missing or malformed. |
certificate_expired | SSL client certificate has expired. |
duplicated_certs | An SSL client certificate appears more than once. |
insufficient_resources | Shards count exceeds shards limit per bdb. |
not_supported_action_on_crdt | reset_admin_pass action is not allowed on CRDT enabled BDB. |
name_violation | CRDT database name cannot be changed. |
bad_shards_blueprint | The sharding blueprint is broken or doesn’t fit the BDB. |
replication_violation | CRDT database must use replication. |
eviction_policy_violation | LFU eviction policy is not supported on bdb version<4 |
replication_node_violation | Not enough nodes for replication. |
replication_size_violation | Database limit too small for replication. |
invalid_oss_cluster_configuration | BDB configuration does not meet the requirements for OSS cluster mode |
missing_backup_interval | BDB backup is enabled but backup interval is missing. |
crdt_sharding_violation | CRDB created without sharding cannot be changed to use sharding |
invalid_proxy_policy | Invalid proxy_policy value. |
invalid_bdb_tags | Tag objects with the same key parameter were passed. |
unsupported_module_capabilities | Not all modules configured for the database support the capabilities needed for the database configuration. |
redis_acl_unsupported | Redis ACL is not supported for this database. |
Create database v1
POST /v1/bdbs
Create a new database in the cluster.
The request must contain a single JSON BDB object with the configuration parameters for the new database.
The following parameters are required to create the database:
Parameter | Type/Value | Description |
---|---|---|
name | string | Name of the new database |
memory_size | integer | Size of the database, in bytes |
If passed with the dry_run
URL query string, the function will validate the BDB object, but will not invoke the state machine that will create it.
To track this request's progress, poll the /actions/<action_uid>
endpoint with the action_uid
returned in the response body.
The cluster will use default configuration for any missing database field. The cluster creates a database UID if it is missing.
Permissions
Permission name | Roles |
---|---|
create_bdb | admin cluster_member db_member |
Request
Example HTTP request
POST /bdbs
Headers
Key | Value |
---|---|
Host | The domain name or IP of the cluster |
Accept | application/json |
Content-type | application/json |
Query parameters
Field | Type | Description |
---|---|---|
dry_run | Validate the new BDB object but don't create the database. |
Body
Include a BDB object in the request body.
The following parameters are required to create the database:
Paramter | Type/Value | Description |
---|---|---|
name | string | Name of the new database |
memory_size | integer | Size of the database, in bytes |
The uid
of the database is auto-assigned by the cluster because it was not explicitly listed in this request. If you specify the database ID (uid
), then you must specify the database ID for every subsequent database and make sure that the database ID does not conflict with an existing database. If you do not specify the database ID, then the it is automatically assigned in sequential order.
Defaults are used for all other configuration parameters.
Example JSON body
{
"name": "test-database",
"type": "redis",
"memory_size": 1073741824
}
The above request is an attempt to create a Redis database with a user-specified name and a memory limit of 1GB.
Response
The response includes the newly created BDB object.
Example JSON body
{
"uid": 1,
"name": "test-database",
"type": "redis",
"memory_size": 1073741824,
"// additional fields..."
}
Error codes
When errors are reported, the server may return a JSON object with error_code
and message
field that provide additional information. The following are possible error_code
values:
Code | Description |
---|---|
uid_exists | The specified database UID is already in use. |
missing_db_name | DB name is a required property. |
missing_memory_size | Memory Size is a required property. |
missing_module | Modules missing from the cluster. |
port_unavailable | The specified database port is reserved or already in use. |
invalid_sharding | Invalid sharding configuration was specified. |
bad_shards_blueprint | The sharding blueprint is broken. |
not_rack_aware | Cluster is not rack-aware and a rack-aware database was requested. |
invalid_version | An invalid database version was requested. |
busy | The request failed because another request is being processed at the same time on the same database. |
invalid_data_persistence | Invalid data persistence configuration. |
invalid_proxy_policy | Invalid proxy_policy value. |
invalid_sasl_credentials | SASL credentials are missing or invalid. |
invalid_replication | Not enough nodes to perform replication. |
insufficient_resources | Not enough resources in cluster to host the database. |
rack_awareness_violation | • Rack awareness violation. • Not enough nodes in unique racks. |
invalid_certificate | SSL client certificate is missing or malformed. |
certificate_expired | SSL client certificate has expired. |
duplicated_certs | An SSL client certificate appears more than once. |
replication_violation | CRDT database must use replication. |
eviction_policy_violation | LFU eviction policy is not supported on bdb version<4 |
invalid_oss_cluster_configuration | BDB configuration does not meet the requirements for OSS cluster mode |
memcached_cannot_use_modules | Cannot create a memcached database with modules. |
missing_backup_interval | BDB backup is enabled but backup interval is missing. |
wrong_cluster_state_id | The given CLUSTER-STATE-ID does not match the current one |
invalid_bdb_tags | Tag objects with the same key parameter were passed. |
unsupported_module_capabilities | Not all modules configured for the database support the capabilities needed for the database configuration. |
redis_acl_unsupported | Redis ACL is not supported for this database. |
Status codes
Code | Description |
---|---|
403 Forbidden | redislabs license expired. |
409 Conflict | Database with the same UID already exists. |
406 Not Acceptable | Invalid configuration parameters provided. |
200 OK | Success, database is being created. |
Create database v2
POST /v2/bdbs
Create a new database in the cluster. See POST /v1/bdbs
for more information.
The database's configuration should be under the "bdb" field.
This endpoint allows you to specify a recovery_plan to recover a database. If you include a recovery_plan within the request body, the database will be loaded from the persistence files according to the recovery plan. The recovery plan must match the number of shards requested for the database.
The persistence files must exist in the locations specified by the recovery plan. The persistence files must belong to a database with the same shard settings as the one being created (slot range distribution and shard_key_regex); otherwise, the operation will fail or yield unpredictable results.
If you create a database with a shards_blueprint and a recovery plan, the shard placement may not fully follow the shards_blueprint.
Request
Example HTTP request
POST /v2/bdbs
Headers
Key | Value |
---|---|
Host | The domain name or IP of the cluster |
Accept | application/json |
Content-type | application/json |
Query parameters
Field | Type | Description |
---|---|---|
dry_run | Validate the new BDB object but don't create the database. |
Body
Include a JSON object that contains a BDB object and an optional recovery_plan
object in the request body.
Example JSON body
{
"bdb": {
"name": "test-database",
"type": "redis",
"memory_size": 1073741824,
"shards_count": 1
},
"recovery_plan": {
"data_files": [
{
"shard_slots": "0-16383",
"node_uid": "1",
"filename": "redis-4.rdb"
}
]
}
}
Response
The response includes the newly created BDB object.
Example JSON body
{
"uid": 1,
"name": "test-database",
"type": "redis",
"memory_size": 1073741824,
"shards_count": 1,
"// additional fields..."
}
Delete database
DELETE /v1/bdbs/{int: uid}
Delete an active database.
Permissions
Permission name | Roles |
---|---|
delete_bdb | admin cluster_member db_member |
Request
Example HTTP request
DELETE /bdbs/1
Headers
Key | Value |
---|---|
Host | The domain name or IP of the cluster |
Accept | application/json |
URL parameters
Field | Type | Description |
---|---|---|
uid | integer | The unique ID of the database to delete. |
Response
Returns a status code that indicates the database deletion success or failure.
Status codes
Code | Description |
---|---|
200 OK | The request is accepted and is being processed. The database state will be 'delete-pending' until the request has been fully processed. |
403 Forbidden | Attempting to delete an internal database. |
404 Not Found | Attempting to delete a nonexistent database. |
409 Conflict | Either the database is not in 'active' state and cannot be deleted, or it is busy with another configuration change. In the second case, this is a temporary condition, and the request should be re-attempted later. |