プロジェクトリポジトリのAPI移動

GitLab 13.0から導入されました

Wikiやデザインリポジトリを含むプロジェクトリポジトリをストレージ間で移動することができます。このAPIはGitaly Clusterへのマイグレーションなどに役立ちます。

プロジェクトリポジトリの移動が処理されると、異なる状態を遷移します。state

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

データの整合性を確保するため、プロジェクトは移動の間、一時的に読み取り専用状態になります。この間、ユーザーが新しいコミットをプッシュしようとすると、The repository is temporarily read-only. Please try again later. メッセージが表示されます。

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

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

すべてのプロジェクトリポジトリの移動を取得します。

GET /project_repository_storage_moves

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

リクエストの例

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

応答例

[
  {
    "id": 1,
    "created_at": "2020-05-07T04:27:17.234Z",
    "state": "scheduled",
    "source_storage_name": "default",
    "destination_storage_name": "storage2",
    "project": {
      "id": 1,
      "description": null,
      "name": "project1",
      "name_with_namespace": "John Doe2 / project1",
      "path": "project1",
      "path_with_namespace": "namespace1/project1",
      "created_at": "2020-05-07T04:27:17.016Z"
    }
  }
]

プロジェクトのすべてのリポジトリストレージの移動を取得します。

GET /projects/:project_id/repository_storage_moves

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

パラメータを指定します:

属性種類必須説明
project_id整数。yesプロジェクトのID

リクエストの例

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

応答例

[
  {
    "id": 1,
    "created_at": "2020-05-07T04:27:17.234Z",
    "state": "scheduled",
    "source_storage_name": "default",
    "destination_storage_name": "storage2",
    "project": {
      "id": 1,
      "description": null,
      "name": "project1",
      "name_with_namespace": "John Doe2 / project1",
      "path": "project1",
      "path_with_namespace": "namespace1/project1",
      "created_at": "2020-05-07T04:27:17.016Z"
    }
  }
]

単一のプロジェクトリポジトリのストレージの移動を取得します。

GET /project_repository_storage_moves/:repository_storage_id

パラメータを指定します:

属性種類必須説明
repository_storage_id整数。yesプロジェクトリポジトリの移動先のID

リクエストの例

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

応答例

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

プロジェクトの単一のリポジトリストレージの移動を取得します。

GET /projects/:project_id/repository_storage_moves/:repository_storage_id

パラメータを指定します:

属性種類必須説明
project_id整数。yesプロジェクトのID
repository_storage_id整数。yesプロジェクトリポジトリの移動先のID

リクエストの例

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/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",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

プロジェクトのリポジトリストレージの移動をスケジュールします。

  • GitLab 13.1で導入されました。
  • GitLab 13.3で導入され、移動とインテグリティチェックが成功した後、元のリポジトリは自動的に削除されます。
caution
GitLab 13.3以前では、リポジトリの移動はリポジトリのコピーに近く、元のリポジトリは元のストレージディスクの場所から削除されず、手動でクリーンアップする必要がありました。
POST /projects/:project_id/repository_storage_moves

パラメータを指定します:

属性種類必須説明
project_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/projects/1/repository_storage_moves"

応答例

{
  "id": 1,
  "created_at": "2020-05-07T04:27:17.234Z",
  "state": "scheduled",
  "source_storage_name": "default",
  "destination_storage_name": "storage2",
  "project": {
    "id": 1,
    "description": null,
    "name": "project1",
    "name_with_namespace": "John Doe2 / project1",
    "path": "project1",
    "path_with_namespace": "namespace1/project1",
    "created_at": "2020-05-07T04:27:17.016Z"
  }
}

ストレージシャード上のすべてのプロジェクトのリポジトリストレージの移動をスケジュールします。

GitLab 13.7 で導入されました

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

POST /project_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/project_repository_storage_moves"

応答例

{
  "message": "202 Accepted"
}