GitLabのプロジェクトの import に苦労した話
前回 の続きなような続いてないような.
前回はexportに苦労した話でしたが,今回はimportに苦労した話です.(まだ微妙に解決していませんが)
なお,前回エクスポートしたプロジェクトとは別なものです.
インポートできない
エクスポートは 前回 の経験を活かし,無事問題なく乗り切った.
しかし,インポートしてみると…
Error importing repository into smilezemi/{project_name} - tar (child): [REPO EXPORT PATH]/uploads/db1eb959a204dc2b92*****a3994f56a: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now , Unable to decompress [REPO EXPORT PATH]/uploads/db1eb959a204dc2b92*****a3994f56a into [REPO EXPORT PATH]/smilezemi/{project_name}/ac233d2ddf59d96d51646c*****a79b1
インポート処理中に突然の No such file or directory.
この時点では完全に推測ですが,インポート処理中にクリーンアップのバックグラウンドプロセスがインポート対象のファイルを削除してしまってエラーになっているのかなーと推測していました.
環境
- Export,Importサーバ共通
- 8core 31GB RAM Amazon Linux
- GitLab 10.7.3-ee 584a495
- Project
- 2.2GB repository size
関連Issue
Cannot import project into fresh omnibus gitlab instance
コメント を見ると 「Sidekiq の concurrency を1にセットすると回避できた」とありました.
このあたりで,上の推測が現実味を帯びてきます.
ただ,試してみたものの,インポート用のプロジェクトファイルをアップロード中に,あっという間にSidekiqのジョブが数百積まれたので諦めて元に戻しました.
調査
Sidekiq.log
関連Issueでは言及されていませんでしたが,弊社のSidekiq.logを確認したところ,少し(かなり?)怪しい箇所が有りました.
X時21分 RepositoryImportWorkerが稼働
TID-os9vtfgwg RepositoryImportWorker JID-0eb9b2667c84c7245df9037b INFO: start
X時25分 突然の Sidekiq shutdown
TID-os9sk28c4 WARN: sending Sidekiq worker PID-20707 SIGTSTP (stop fetching new jobs)
TID-os9sk28c4 WARN: waiting 30 seconds before sending Sidekiq worker PID-20707 SIGTERM (gracefully shut down)
TID-os9yd9q6g INFO: Received TSTP, no longer accepting new work
TID-os9wrwrm4 INFO: Scheduler exiting...
TID-os9yd9q6g INFO: Terminating quiet workers
TID-os9vihntg INFO: Scheduler exiting...
TID-os9sk28c4 WARN: sending Sidekiq worker PID-20707 SIGTERM (gracefully shut down)
TID-os9sk28c4 WARN: waiting 6 seconds before sending Sidekiq worker PID-20707 SIGKILL (die)
TID-os9yd9q6g INFO: Shutting down
TID-os9yd9q6g INFO: Pausing to allow workers to finish...
TID-os9yd9q6g WARN: Terminating 1 busy worker threads
TID-os9yd9q6g WARN: Work still in progress [#<struct Sidekiq::BasicFetch::UnitOfWork queue="queue:repository_import", job="{\"retry\":false,\"args\":[453],\"class\":\"RepositoryImportWorker\",\"queue\":\"repository_import\",\"backtrace\":5,\"status_expiration\":54000,\"jid\":\"0eb9b2667c84c7245df9037b\",\"created_at\":1526538090.6663377,\"enqueued_at\":1526538090.7046638}">]
TID-os9yd9q6g INFO: Pushed 1 jobs back to Redis
TID-os9yd9q6g INFO: Bye!
TID-os9vtfgwg RepositoryImportWorker JID-0eb9b2667c84c7245df9037b INFO: fail: 278.995 sec
TID-otfa2anx4 INFO: Booting Sidekiq 5.0.5 with redis options {:path=>"/var/opt/gitlab/redis/redis.socket", :namespace=>"resque:gitlab", :id=>"Sidekiq-server-PID-10012", :url=>nil}
X時26分 Sidekiq 再起動
TID-otf79d620 RepositoryImportWorker JID-0eb9b2667c84c7245df9037b INFO: start
そしてSidekiqが再起動した直後
TID-otfa2anx4 INFO: Cron Jobs - add job with name: import_export_project_cleanup_worker
ADD JOB import_export_project_cleanup_worker!!!
X時30分 エラーで処理中止
TID-otf79d620 RepositoryImportWorker JID-0eb9b2667c84c7245df9037b INFO: fail: 255.313 sec
TID-otf79d620 WARN: {"context":"Job raised exception","job":{"retry":false,"args":[453],"class":"RepositoryImportWorker","queue":"repository_import","backtrace":5,"status_expiration":54000,"jid":"0eb9b2667c84c7245df9037b","created_at":1526538090.6663377,"enqueued_at":1526538090.7046638},"jobstr":"{\"retry\":false,\"args\":[453],\"class\":\"RepositoryImportWorker\",\"queue\":\"repository_import\",\"backtrace\":5,\"status_expiration\":54000,\"jid\":\"0eb9b2667c84c7245df9037b\",\"created_at\":1526538090.6663377,\"enqueued_at\":1526538090.7046638}"}
TID-otf79d620 WARN: RuntimeError: Error importing repository into smilezemi/{project_name} - tar (child): /var/opt/gitlab/gitlab-rails/shared/tmp/project_exports/uploads/db1eb959a204dc2b926e619a3994f56a: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
, Unable to decompress /var/opt/gitlab/gitlab-rails/shared/tmp/project_exports/uploads/db1eb959a204dc2b926e619a3994f56a into /var/opt/gitlab/gitlab-rails/shared/tmp/project_exports/smilezemi/{project_name}/ac233d2ddf59d96d51646c68209a79b1
このように,インポート処理中にSidekiqが再起動しています.
GitLabサポートを依頼
この辺で諦めて,一旦GitLabサポートに依頼するようにしました.
GitLab社:「Sidekiqのメモリ割り当てを増やして」
メモリに余裕はあったものの,Sidekiqのメモリ割り当てが少なく再起動してそうなので,割当を増やしてみてとのこと.
具体的には以下を gitlab.rb
に追記するように指示されました.
gitlab_rails['env'] = {
'SIDEKIQ_MEMORY_KILLER_MAX_RSS' => "0",
'SIDEKIQ_MEMORY_KILLER_GRACE_TIME' => "1200",
}
再度インポートを試す
Sidekiqへのメモリ割り当てを増やしたので,再試行してみました.
エラーが変わる
Sidekiqの再起動がなくなり,インポートジョブが進んだように見えるものの,別のエラーが発生しました.
Error importing repository into smilezemi/{project_name} - Validation failed: Title already exists at group level for smilezemi. Please choose another one.
タイトルがグループレベルにすでに存在する?
プロジェクトのインポートだから,同じ名前のプロジェクトがすでに存在するという意味でしょうか?(いやそんなはずはない)
実際,プロジェクト名を変えて試しても同じエラーでうまく行きません.
サポートへ状況の変化を通知
GitLab社「ラベルが問題のようなので以下試して」
GitLab社から提示された問題とその解決は2つ.どちらも未解決のIssueです.
- Resolve common GitLab.com import/export issues
- Project import does not reconcile group labels with project labels
上のIssueは,「Labelの最後にスペースが含まれているとImportに失敗する」というもの.
プロジェクトを確認しましたが,Labelのおしりにスペースが含まれているものはありませんでした.
「下のIssueはプロジェクトのラベルと同じラベルが,グループラベルに存在するとImportに失敗する」というもの(なんでやねん)
プロジェクトを確認すると,IssueBoardで自動的に作られる(と思われる)「To Do」や「Doing」といったラベルが有りました.
グループレベルのLabelはほとんど使用されていなかったため, group-Doing
とか適当な名前でリネームしました.
Import成功
再度試したところ,無事インポートが完了しました.
ただ,すでにプロジェクトは進んでいるので,再度Export/Importを行って無事成功したらGitLab社に報告する予定です.
まとめ
今回ブチあたった問題点は2つ
- Sidekiqの割当メモリが足りない
- Exportに続き,相変わらずメモリは食うようです.多めに用意しましょう.
- Label周りのバグ
- 改修を進めているようですが,しばらくはGroupラベルとProjectラベルを意識しておく必要がありそうです.同じ名前のラベルがあるとImportに失敗します.
余談1
GitHubがMicrosoftに買収されるという話で GitLabは #movingtogitlab と煽りに煽っています.( GitHubからのImportがいつもの10倍だぜ! とか)
GitHubからのインポートもいいですが,GitLabからのインポートもできるようにしてくれませんかね…
余談2
それでも私は GitLab が好き