スニペットリポジトリのAPI移動

GitLab 13.8 で導入されました

スニペットリポジトリをストレージ間で移動することができます。このAPIはGitaly Clusterへのマイグレーションなどに役立ちます。

スニペットリポジトリの移動が処理されると、異なる状態を遷移します。state

  • initial:レコードは作成されましたが、バックグラウンドジョブはまだスケジュールされていません。
  • scheduled:バックグラウンド・ジョブはスケジュール済みです。
  • started:スニペットリポジトリをコピー先ストレージにコピー中です。
  • replicated:スニペットが移動されました。
  • failed:スニペットリポジトリのコピーに失敗したか、チェックサムが一致しませんでした。
  • finished:スニペットが移動され、移動元のリポジトリが削除されました。
  • cleanup failed:スニペットは移動されましたが、ソースストレージ上のリポジトリは削除できませんでした。

データのインテグレーションを保証するため、スニペットは移動の間、一時的に読み取り専用状態になります。この間、ユーザーが新しいコミットをプッシュしようとすると、The repository is temporarily read-only. Please try again later. メッセージが表示されます。

このAPIを使用するには、管理者としての認証が必要です。

他のリポジトリタイプについては、こちらをご覧ください:

すべてのスニペットリポジトリの移動を取得します。

GET /snippet_repository_storage_moves

デフォルトでは、API の結果はページ分割されているため、GET リクエストは一度に 20 件の結果を返します。

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/snippet_repository_storage_moves"

応答例

[
  {
    "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 /snippets/:snippet_id/repository_storage_moves

デフォルトでは、API の結果はページ分割されているため、GET リクエストは一度に 20 件の結果を返します。

サポートされる属性:

属性種類必須説明
snippet_id整数。yesスニペットのID。

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/snippets/1/repository_storage_moves"

応答例

[
  {
    "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 /snippet_repository_storage_moves/:repository_storage_id

サポートされる属性:

属性種類必須説明
repository_storage_id整数。yesスニペットリポジトリの移動先のID。

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/snippet_repository_storage_moves/1"

応答例

{
  "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 /snippets/:snippet_id/repository_storage_moves/:repository_storage_id

サポートされる属性:

属性種類必須説明
snippet_id整数。yesスニペットのID。
repository_storage_id整数。yesスニペットリポジトリの移動先のID。

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/snippets/1/repository_storage_moves/1"

応答例

{
  "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"
  }
}

スニペットに対してリポジトリストレージの移動をスケジュールします。

GitLab 13.8 で導入されました

POST /snippets/:snippet_id/repository_storage_moves

サポートされる属性:

属性種類必須説明
snippet_id整数。yesスニペットのID。
destination_storage_name文字列です。いいえ保存先ストレージシャードの名前。GitLab 13.5以降では、指定がない場合はストレージの重みに基づいて自動的に選択されます。

リクエストの例

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"

応答例

{
  "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"
  }
}

ストレージシャード上のすべてのスニペットに対してリポジトリストレージの移動をスケジュールします。

GitLab 13.8 で導入されました

ソースストレージシャードに保存されている各スニペットリポジトリのリポジトリ移動をスケジュールします。このエンドポイントは全てのスニペットを一度にマイグレーションします。詳しくはMove all snippets をご覧ください。

POST /snippet_repository_storage_moves

サポートされる属性:

属性種類必須説明
source_storage_name文字列です。yesソースストレージシャードの名前。
destination_storage_name文字列です。いいえ宛先ストレージ・シャードの名前。指定されていない場合は、ストレージの重みに基づいてストレージが自動的に選択されます。

リクエストの例

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"

応答例

{
  "message": "202 Accepted"
}