ダイレクト移行のトラブルシューティング
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
Railsコンソールセッションで、グループインポートの試行に関する失敗またはエラーメッセージを検索できます:
# Get relevant import records
import = BulkImports::Entity.where(namespace_id: Group.id).map(&:bulk_import).last
# Alternative lookup by user
import = BulkImport.where(user_id: User.find(...)).last
# Get list of import entities. Each entity represents either a group or a project
entities = import.entities
# Get a list of entity failures
entities.map(&:failures).flatten
# Alternative failure lookup by status
entities.where(status: [-1]).pluck(:destination_name, :destination_namespace, :status)また、APIエンドポイントを使用して、移行されたすべてのエンティティとそれらに関連する失敗を確認できます。
Staleインポート
移行は、ソースまたは宛先インスタンスの問題により、timeoutステータスでタイムアウトまたは終了する可能性があります。これらの問題を解決するには、ソースと宛先の両方のインスタンスからログを調べます。
ソースインスタンス
ソースインスタンスでは、古いインポートは、過度のメモリ使用量が原因であることが多く、これによりSidekiqプロセスが再起動され、エクスポートジョブが中断される可能性があります。宛先インスタンスは、移行が最終的にタイムアウトするまで、エクスポートファイルを待機する場合があります。
グループまたはプロジェクトリレーションが正常にエクスポートされたかどうかを確認するには、次のコマンドを実行します:
curl --request GET --location "https://example.gitlab.com/api/v4/projects/:ID/export_relations/status" \
--header "PRIVATE-TOKEN: <your_access_token>"リレーションのステータスが1以外の場合、リレーションは正常にエクスポートされず、問題はソースインスタンスにあります。
次のコマンドを実行して、中断されたエクスポートジョブを検索することもできます。Sidekiqのログは再起動後にローテーションされる可能性があるため、ローテーションされたログも必ず確認してください。
grep `BulkImports::RelationBatchExportWorker` sidekiq.log | grep "interrupted_count"Sidekiqの再起動が問題の原因である場合:
エクスポートジョブ用に個別のSidekiqプロセスを設定します。詳細については、Sidekiqの設定を参照してください。問題が解決しない場合は、Sidekiqの並行処理を減らして、同時に処理されるジョブの数を制限します。
Sidekiqのメモリ使用量制限を増やします: インスタンスで使用可能なメモリ使用量がある場合は、Sidekiqプロセスの最大RSS制限を増やします。たとえば、頻繁な再起動を防ぐために、制限を2 GBから3 GBに増やすことができます。
最大中断回数を増やします: ジョブが失敗する前により多くの中断を許可するには、
BulkImports::RelationBatchExportWorkerの最大中断回数を増やすことができます:制限を
20に増やすには、次の設定を追加します(デフォルト値は3です):sidekiq_options max_retries_after_interruption: 20変更を有効にするには、Sidekiqを再起動します。
新しい移行をトリガーするか、リレーションエクスポートAPIを使用して、エクスポートを手動でトリガーできます。リレーションが正常にエクスポートされているかどうかを確認するには、エクスポートステータスを確認してください。
たとえば、特定のプロジェクトのエクスポートをトリガーするには、次のコマンドを実行します:
curl --request POST --location "https://example.gitlab.com/api/v4/projects/:ID/export_relations" \
--header "PRIVATE-TOKEN: <your_access_token>" \
--form 'batched="true"'宛先インスタンス
まれに、宛先インスタンスがグループまたはプロジェクトの移行に失敗する可能性があります。詳細については、issue 498720を参照してください。
この問題を解決するには、インポートAPIを使用して、失敗したグループまたはプロジェクトを移行します。このAPIを使用すると、特定のグループとプロジェクトを個別に移行できます。
エラー: 404 Group Not Found
(たとえば、5000)数値のみで構成されるパスを持つグループをインポートしようとすると、GitLabはパスの代わりにIDでグループを検索しようとします。これにより、GitLab 15.4以前に404 Group Not Foundエラーが発生します。
これを解決するには、次のいずれかを使用して、数値以外の文字を含めるようにソースグループパスを変更する必要があります:
GitLab UIを使用します:
- 左側のサイドバーで、検索または移動先を選択して、グループを見つけます。
- 設定 > 一般を選択します。
- 高度な設定を展開します。
- グループのURLの変更で、数値以外の文字を含めるようにグループのURLを変更します。
その他の404エラー
グループをインポートするときに、他の404エラーが発生する可能性があります。例:
"exception_message": "Unsuccessful response 404 from [FILTERED] Bo...",
"exception_class": "BulkImports::NetworkError",このエラーは、ソースインスタンスからの転送の問題を示しています。これを解決するには、ソースインスタンスの前提条件を満たしていることを確認してください。
グループまたはプロジェクトのパス名が一致しません
ソースグループまたはプロジェクトのパスが命名規則に準拠していない場合、パスは正規化され、有効であることが保証されます。たとえば、Destination-Project-Pathはdestination-project-pathに正規化されます。
エラー: command exited with error code 15 and Unable to save [FILTERED] into [FILTERED]
ダイレクトトランスファーを使用してプロジェクトを移行すると、ログにエラーcommand exited with error code 15 and Unable to save [FILTERED] into [FILTERED]が表示される場合があります。このエラーが表示された場合は、無視しても問題ありません。GitLabは、終了したコマンドを再試行します。
エラー: Batch export [batch_number] from source instance failed
宛先インスタンスで、次のエラーが発生する可能性があります:
Batch export [batch_number] from source instance failed: [source instance error]このエラーは、ソースインスタンスが一部のレコードのエクスポートに失敗した場合に発生します。最も一般的な理由は次のとおりです:
- ディスク容量の不足
- メモリ使用量の不足によるSidekiqジョブの複数の中断
- データベースステートメントのタイムアウト
この問題を解決するには、以下を実行します:
- ソースインスタンスの問題を特定して修正します。
- インポートが部分的に実行されたプロジェクトまたはグループを宛先インスタンスから削除し、新しいインポートを開始します。
エクスポートに失敗したリレーションとバッチの詳細については、ソースインスタンスのプロジェクトおよびグループのエクスポートステータスAPIエンドポイントを使用してください。
エラー: duplicate key value violates unique constraint
レコードをインポートすると、次のエラーが発生する場合があります:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraintこのエラーは、インポート中にメモリ使用量またはCPU使用率が高いために、インポートを処理するSidekiqワーカーが再起動すると発生する可能性があります。
インポート中のSidekiqメモリ使用量またはCPUの問題を軽減するには:
- インポート用にSidekiqの設定を最適化します。
bulk_import_concurrent_pipeline_batch_limitアプリケーション設定で、同時実行ジョブの数を制限します。
エラー: BulkImports::FileDownloadService::ServiceError Invalid content type
GitLabインスタンス間でダイレクト転送を使用する場合、次のエラーが発生する可能性があります:
BulkImports::FileDownloadService::ServiceError Invalid content typeこのエラーは、インスタンス間でネットワークトラフィックがどのようにルーティングされるかに関連しています。application/gzip以外のコンテンツタイプが返された場合、ネットワークリクエストがGitLab Workhorseを回避する可能性があります。
この問題を解決するには、以下を実行します:
- Ingressが、Pumaに直接ではなく、ポート
8181のGitLab Workhorseを介してトラフィックをルーティングするように設定されていることを確認してください。 - オブジェクトストレージのプロキシダウンロードを有効にすることを検討してください。