Snippet repository storage moves API (CORE ONLY)
Introduced in GitLab 13.8.
Snippet repositories can be moved between storages. This can be useful when migrating to Gitaly Cluster, for example.
As snippet repository storage moves are processed, they transition through different states. Values
of state
are:
initial
scheduled
started
finished
failed
replicated
cleanup failed
To ensure data integrity, snippets are put in a temporary read-only state for the
duration of the move. During this time, users receive a The repository is temporarily read-only. Please try again later.
message if they try to push new commits.
This API requires you to authenticate yourself as an administrator.
Project repositories can be moved using the Project repository storage moves API.
Limitations
- Group-level wikis can't be moved with the API.
Retrieve all snippet repository storage moves
GET /snippet_repository_storage_moves
By default, GET
requests return 20 results at a time because the API results
are paginated.
Example request:
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/snippet_repository_storage_moves"
Example response:
[
{
"id": 1,
"created_at": "2020-05-07T04:27:17.234Z",
"state": "scheduled",
"source_storage_name": "default",
"destination_storage_name": "storage2",
"snippet": {
"id": 65,
"title": "Test Snippet",
"description": null,
"visibility": "internal",
"updated_at": "2020-12-01T11:15:50.385Z",
"created_at": "2020-12-01T11:15:50.385Z",
"project_id": null,
"web_url": "https://gitlab.example.com/-/snippets/65",
"raw_url": "https://gitlab.example.com/-/snippets/65/raw",
"ssh_url_to_repo": "ssh://user@gitlab.example.com/snippets/65.git",
"http_url_to_repo": "https://gitlab.example.com/snippets/65.git"
}
}
]
Retrieve all repository storage moves for a snippet
GET /snippets/:snippet_id/repository_storage_moves
By default, GET
requests return 20 results at a time because the API results
are paginated.
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
snippet_id |
integer | yes | ID of the snippet. |
Example request:
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/snippets/1/repository_storage_moves"
Example response:
[
{
"id": 1,
"created_at": "2020-05-07T04:27:17.234Z",
"state": "scheduled",
"source_storage_name": "default",
"destination_storage_name": "storage2",
"snippet": {
"id": 65,
"title": "Test Snippet",
"description": null,
"visibility": "internal",
"updated_at": "2020-12-01T11:15:50.385Z",
"created_at": "2020-12-01T11:15:50.385Z",
"project_id": null,
"web_url": "https://gitlab.example.com/-/snippets/65",
"raw_url": "https://gitlab.example.com/-/snippets/65/raw",
"ssh_url_to_repo": "ssh://user@gitlab.example.com/snippets/65.git",
"http_url_to_repo": "https://gitlab.example.com/snippets/65.git"
}
}
]
Get a single snippet repository storage move
GET /snippet_repository_storage_moves/:repository_storage_id
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
repository_storage_id |
integer | yes | ID of the snippet repository storage move. |
Example request:
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/snippet_repository_storage_moves/1"
Example response:
{
"id": 1,
"created_at": "2020-05-07T04:27:17.234Z",
"state": "scheduled",
"source_storage_name": "default",
"destination_storage_name": "storage2",
"snippet": {
"id": 65,
"title": "Test Snippet",
"description": null,
"visibility": "internal",
"updated_at": "2020-12-01T11:15:50.385Z",
"created_at": "2020-12-01T11:15:50.385Z",
"project_id": null,
"web_url": "https://gitlab.example.com/-/snippets/65",
"raw_url": "https://gitlab.example.com/-/snippets/65/raw",
"ssh_url_to_repo": "ssh://user@gitlab.example.com/snippets/65.git",
"http_url_to_repo": "https://gitlab.example.com/snippets/65.git"
}
}
Get a single repository storage move for a snippet
GET /snippets/:snippet_id/repository_storage_moves/:repository_storage_id
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
snippet_id |
integer | yes | ID of the snippet. |
repository_storage_id |
integer | yes | ID of the snippet repository storage move. |
Example request:
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/snippets/1/repository_storage_moves/1"
Example response:
{
"id": 1,
"created_at": "2020-05-07T04:27:17.234Z",
"state": "scheduled",
"source_storage_name": "default",
"destination_storage_name": "storage2",
"snippet": {
"id": 65,
"title": "Test Snippet",
"description": null,
"visibility": "internal",
"updated_at": "2020-12-01T11:15:50.385Z",
"created_at": "2020-12-01T11:15:50.385Z",
"project_id": null,
"web_url": "https://gitlab.example.com/-/snippets/65",
"raw_url": "https://gitlab.example.com/-/snippets/65/raw",
"ssh_url_to_repo": "ssh://user@gitlab.example.com/snippets/65.git",
"http_url_to_repo": "https://gitlab.example.com/snippets/65.git"
}
}
Schedule a repository storage move for a snippet
Introduced in GitLab 13.8.
POST /snippets/:snippet_id/repository_storage_moves
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
snippet_id |
integer | yes | ID of the snippet. |
destination_storage_name |
string | no | Name of the destination storage shard. In GitLab 13.5 and later, the storage is selected automatically if not provided. |
Example request:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \
--data '{"destination_storage_name":"storage2"}' "https://gitlab.example.com/api/v4/snippets/1/repository_storage_moves"
Example response:
{
"id": 1,
"created_at": "2020-05-07T04:27:17.234Z",
"state": "scheduled",
"source_storage_name": "default",
"destination_storage_name": "storage2",
"snippet": {
"id": 65,
"title": "Test Snippet",
"description": null,
"visibility": "internal",
"updated_at": "2020-12-01T11:15:50.385Z",
"created_at": "2020-12-01T11:15:50.385Z",
"project_id": null,
"web_url": "https://gitlab.example.com/-/snippets/65",
"raw_url": "https://gitlab.example.com/-/snippets/65/raw",
"ssh_url_to_repo": "ssh://user@gitlab.example.com/snippets/65.git",
"http_url_to_repo": "https://gitlab.example.com/snippets/65.git"
}
}
Schedule repository storage moves for all snippets on a storage shard
Introduced in GitLab 13.8.
Schedules repository storage moves for each snippet repository stored on the source storage shard.
POST /snippet_repository_storage_moves
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
source_storage_name |
string | yes | Name of the source storage shard. |
destination_storage_name |
string | no | Name of the destination storage shard. The storage is selected automatically if not provided. |
Example request:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" \
--data '{"source_storage_name":"default"}' "https://gitlab.example.com/api/v4/snippet_repository_storage_moves"
Example response:
{
"message": "202 Accepted"
}