| |
| # HTTP APIs |
| ## Namespace APIs |
| ### Create Namespace |
| |
| ```shell |
| POST /api/v1/namespaces |
| ``` |
| |
| #### Request Body |
| |
| ```json |
| { |
| "namespace": "test-ns" |
| } |
| ``` |
| |
| #### Response JSON Body |
| |
| * 201 |
| ```json |
| { |
| "data": "created" |
| } |
| ``` |
| |
| * 409 |
| ```json |
| { |
| "error": { |
| "message": "the entry already existed" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### List Namespace |
| ```shell |
| GET /api/v1/namespaces |
| ``` |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": { |
| "namespaces": ["test-ns"] |
| } |
| } |
| ``` |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### Delete Namespace |
| |
| ```shell |
| GET /api/v1/namespaces/{namespace} |
| ``` |
| |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": "ok" |
| } |
| ``` |
| |
| * 404 |
| ```json |
| { |
| "error": { |
| "message": "the entry does not exist" |
| } |
| } |
| |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| ## Cluster APIs |
| ### Create Cluster |
| |
| ``` |
| POST /api/v1/namespaces/{namespace}/clusters |
| ``` |
| |
| #### Request Body |
| |
| ```json |
| { |
| "name":"test-cluster", |
| "nodes":["127.0.0.1:6666"], |
| "replicas":1, |
| "password":"" |
| } |
| ``` |
| |
| #### Response JSON Body |
| |
| * 201 |
| ```json |
| { |
| "data": "created" |
| } |
| ``` |
| |
| * 409 |
| ```json |
| { |
| "error": { |
| "message": "the entry already existed" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### List Cluster |
| |
| ```shell |
| GET /api/v1/namespaces/{namespace}/clusters |
| ``` |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": { |
| "clusters": ["test-cluster"] |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### Import Cluster |
| |
| This API is used to import the cluster from the existing Kvrocks cluster's nodes. |
| |
| ```shell |
| POST /api/v1/namespaces/{namespace}/clusters/{cluster}/import |
| ``` |
| |
| #### Request Body |
| |
| ```json |
| { |
| "nodes":["127.0.0.1:6666"], |
| "password":"" |
| } |
| ``` |
| |
| #### Response JSON Body |
| |
| * 201 |
| ```json |
| { |
| "data": "created" |
| } |
| ``` |
| |
| * 409 |
| ```json |
| { |
| "error": { |
| "message": "the entry already existed" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### Get Cluster |
| |
| ```shell |
| GET /api/v1/namespaces/{namespace}/clusters/{cluster} |
| ``` |
| |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": |
| { |
| "cluster": { |
| "name":"test-cluster", |
| "version":0, |
| "shards":[ |
| {"nodes":[ |
| { |
| "id":"YotDSqzTeHK6CnIX2gZu27IlcYRTW4dkkFQvV382", |
| "addr":"127.0.0.1:6666", |
| "role":"master", |
| "password":"", |
| "master_auth":"", |
| "created_at":16834433980 |
| }], |
| "slot_ranges":["0-16383"], |
| "import_slot":-1, |
| "migrating_slot":-1 |
| } |
| ] |
| } |
| } |
| } |
| ``` |
| |
| * 404 |
| ```json |
| { |
| "error": { |
| "message": "the entry does not exist" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### Delete Cluster |
| |
| ```shell |
| DELETE /api/v1/namespaces/{namespace}/clusters/{cluster} |
| ``` |
| |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": "ok" |
| } |
| ``` |
| |
| * 404 |
| ```json |
| { |
| "error": { |
| "message": "the entry does not exist" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| ## Shard APIs |
| ### Create Shard |
| |
| ``` |
| POST /api/v1/namespaces/{namespace}/clusters/{cluster}/shards |
| ``` |
| |
| #### Request Body |
| |
| ```json |
| { |
| "nodes":["127.0.0.1:6666"], |
| "password":"" |
| } |
| ``` |
| |
| #### Response JSON Body |
| |
| * 201 |
| ```json |
| { |
| "data": "created" |
| } |
| ``` |
| |
| * 409 |
| ```json |
| { |
| "error": { |
| "message": "the entry already existed" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| |
| ### Get Shard |
| |
| ```shell |
| GET /api/v1/namespaces/{namespace}/clusters/{cluster}/shards/{shard} |
| ``` |
| |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": { |
| "shard": { |
| "nodes": [ |
| { |
| "id": "3SStZULMqclwvYNT8gN05IdybROe0vEnn97iNB5Z", |
| "addr": "127.0.0.1:6666", |
| "role": "master", |
| "password": "", |
| "master_auth": "", |
| "created_at": 16834433980 |
| } |
| ], |
| "slot_ranges": [ |
| "0-16383" |
| ], |
| "import_slot": -1, |
| "migrating_slot": -1 |
| } |
| } |
| } |
| |
| ``` |
| |
| * 404 |
| ```json |
| { |
| "error": { |
| "message": "the entry does not exist" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### List Shard |
| |
| ```shell |
| GET /api/v1/namespaces/{namespace}/clusters/{cluster}/shards |
| ``` |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": { |
| "shards": [ |
| { |
| "nodes": [ |
| { |
| "id": "3SStZULMqclwvYNT8gN05IdybROe0vEnn97iNB5Z", |
| "addr": "127.0.0.1:6666", |
| "role": "master", |
| "password": "", |
| "master_auth": "", |
| "created_at": 16834433980 |
| } |
| ], |
| "slot_ranges": [ |
| "0-16383" |
| ], |
| "import_slot": -1, |
| "migrating_slot": -1 |
| }, |
| { |
| "nodes": [ |
| { |
| "id": "y5PftTd0Lc3hH34yEyavIji86cRM5i3oxytt42vo", |
| "addr": "127.0.0.1:6667", |
| "role": "master", |
| "password": "", |
| "master_auth": "", |
| "created_at": 16834433980 |
| } |
| ], |
| "slot_ranges": null, |
| "import_slot": -1, |
| "migrating_slot": -1 |
| } |
| ] |
| } |
| } |
| |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### Delete Shard |
| |
| ```shell |
| DELETE /api/v1/namespaces/{namespace}/clusters/{cluster}/shards/{shard} |
| ``` |
| |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": "ok" |
| } |
| ``` |
| |
| * 404 |
| ```json |
| { |
| "error": { |
| "message": "the entry does not exist" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### Failover master node in a shard |
| |
| ``` |
| POST /api/v1/namespaces/{namespace}/clusters/{cluster}/shards/{shard}/failover |
| ``` |
| |
| #### Request Body |
| |
| ```json |
| { |
| "preferred_node_id": "{YOUR PREFERRED NODE ID}" |
| } |
| ``` |
| |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": { |
| "new_master_id": "{NEW MASTER ID}" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ## Node APIs |
| |
| ### Create Node |
| |
| ``` |
| POST /api/v1/namespaces/{namespace}/clusters/{cluster}/shards/{shard}/nodes |
| ``` |
| |
| #### Request Body |
| |
| ```json |
| { |
| "addr": "127.0.0.1:6666", |
| "role": "slave", |
| "password":"" |
| } |
| ``` |
| |
| #### Response JSON Body |
| |
| * 201 |
| ```json |
| { |
| "data": "created" |
| } |
| ``` |
| |
| * 409 |
| ```json |
| { |
| "error": { |
| "message": "the entry already existed" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### List Node |
| |
| ```shell |
| GET /api/v1/namespaces/{namespace}/clusters/{cluster}/shards/{shard}/nodes |
| ``` |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": { |
| "nodes": [ |
| { |
| "id": "pxpE1JSBJcqicuwc95zqTPTj5rB7YtfvpociyH8C", |
| "addr": "127.0.0.1:6666", |
| "role": "master", |
| "password": "", |
| "created_at": 1686101693 |
| }, |
| { |
| "id": "O0JKq1Hp9FtI3dJTU3MigWjjZJzPtduoDODX0OAY", |
| "addr": "127.0.0.1:6667", |
| "role": "slave", |
| "password": "", |
| "created_at": 1686102057 |
| } |
| ] |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ### Delete Node |
| |
| ```shell |
| DELETE /api/v1/namespaces/{namespace}/clusters/{cluster}/shards/{shard}/nodes/{nodeID} |
| ``` |
| |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": "ok" |
| } |
| ``` |
| |
| * 404 |
| ```json |
| { |
| "error": { |
| "message": "the entry does not exist" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |
| |
| ## Migration APIs |
| |
| ### Migrate Slot |
| ```shell |
| POST /api/v1/namespaces/{namespace}/clusters/{cluster}/migrate |
| ``` |
| |
| #### Request Body |
| |
| ```json |
| { |
| "target": 1, |
| "slot": 123, |
| "slot_only": "false" |
| } |
| ``` |
| |
| #### Response JSON Body |
| |
| * 200 |
| ```json |
| { |
| "data": "ok" |
| } |
| ``` |
| |
| * 404 |
| ```json |
| { |
| "error": { |
| "message": "the entry does not exist" |
| } |
| } |
| ``` |
| |
| * 5XX |
| ```json |
| { |
| "error": { |
| "message": "DETAIL ERROR STRING" |
| } |
| } |
| ``` |