Restore of gitlab ends in Backup::Error: gitaly-backup exit status 1
Summary
Testing backup and restore on fresh Gitlab install.
I created some repo, triggered backup, deleted repo and triggered restore.
Steps to reproduce
create backup, delete repo, restore
Configuration used
(Please provide a sanitized version of the configuration used wrapped in a code block (```yaml))
global:
serviceAccount:
enabled: true
create: false
name: aws-access
platform:
eksRoleArn: _sanitized_
shell:
authToken:
secret: shell-secret
key: password
## https://docs.gitlab.com/charts/installation/deployment#deploy-the-community-edition
edition: ee
# gitlab:
## Enterprise license for this GitLab installation
## Secret created according to https://docs.gitlab.com/charts/installation/secrets#initial-enterprise-license
## If allowing shared-secrets generation, this is OPTIONAL.
# license:
# secret: gitlab-license
# key: license
registry:
bucket: eu-central-1-gitlab-registry
tls:
enabled: false
hosts:
domain: _sanitized_
https: true
externalIP:
gitlab:
name: _sanitized_
https: true
registry:
name: _sanitized_
https: true
# pages:
# name: pages.{gitlab_dns_name}
# https: true
ssh: ~
ingress:
enabled: false
tls:
enabled: false
configureCertmanager: false
psql:
password:
useSecret: true
secret: gitlab-postgres
key: psql-password
host: _sanitized_
port: 5432
username: _sanitized_
database: gitlab_production
redis:
password:
enabled: false
host: _sanitized_
minio:
enabled: false
pages:
enabled: false
accessControl: false
port: 443
# objectStore:
# enabled: true
# bucket: {s3_pages}
# connection:
# secret: s3-storage-credentials
# key: connection
appConfig:
enableUsagePing: true
backups:
bucket: eu-central-1-gitlab-backups
#tmpBucket: eu-central-1-gitlab-backups-tmp
lfs:
enabled: true
bucket: eu-central-1-git-lfs
connection:
secret: s3-storage-credentials
key: connection
artifacts:
enabled: true
bucket: eu-central-1-gitlab-artifacts
connection:
secret: s3-storage-credentials
key: connection
uploads:
enabled: true
bucket: eu-central-1-gitlab-uploads
connection:
secret: s3-storage-credentials
key: connection
packages:
enabled: true
bucket: eu-central-1-gitlab-packages
connection:
secret: s3-storage-credentials
key: connection
terraformState:
enabled: true
bucket: eu-central-1-gitlab-terraformstate
connection:
secret: s3-storage-credentials
key: connection
omniauth:
enabled: true
autoLinkSamlUser: true
autoLinkLdapUser: true
blockAutoCreatedUsers: false
auto_sign_in_with_provider: 'saml'
syncProfileFromProvider: ['saml']
syncProfileAttributes: [email]
allowSingleSignOn:
- saml
providers:
- secret: saml-credentials
key: provider
cron_jobs:
personal_access_tokens_expiring_worker: # (prod only) Send emails for personal tokens which are about to expire
cron: "0 0 * * *,1,4"
admin_email_worker: # Send admin emails once a week
cron: "0 0 * * 0"
# Periodically update ci_runner_versions table with up-to-date versions and status
ci_runner_versions_reconciliation_worker:
cron: "@daily"
# Flag stuck CI builds as failed
stuck_ci_jobs_worker:
cron: "0 * * * *"
pipeline_schedule_worker:
cron: "19 * * * *"
expire_build_artifacts_worker:
cron: "50 * * * *"
repository_check_worker:
cron: "20 * * * *"
smtp:
enabled: true
address: _sanitized_
domain: _sanitized_
port: 587
user_name: _sanitized_
password:
secret: gitlab-smtp-password
key: password
authentication: "login"
starttls_auto: true
openssl_verify_mode: "peer"
pool: false
email:
from: _sanitized_
display_name: "GitLab"
nginx-ingress:
enabled: false
certmanager:
install: false
installCRDs: false
rbac:
create: false
prometheus:
install: false
redis:
install: false
upgradeCheck:
enabled: false
gitlab:
gitaly:
persistence:
enabled: true
storageClass: efs-sc
size: 50Gi
accessMode: ReadWriteOnce
toolbox:
backups:
cron:
enabled: true
schedule: "0 1 * * *"
extraArgs: "--maximum-backups 28"
objectStorage:
backend: s3
config:
secret: s3-storage-credentials
key: connection
persistence:
enabled: true
storageClass: efs-sc
accessMode: ReadWriteOnce
size: '10Gi'
annotations:
_sanitized_
webservice:
annotations:
_sanitized_
sidekiq:
annotations:
_sanitized_
migrations:
psql:
password:
secret: gitlab-postgres
key: psql-password
host: _sanitized_
port: 5432
postgresql:
install: false
gitlab-runner:
install: true
rbac:
create: true
runners:
locked: false
registry:
enabled: true
annotations:
_sanitized_
storage:
secret: s3-registry-storage-credentials
key: config
Current behavior
Failure with exit code 1.
{"level":"fatal","msg":"restore: pipeline: 1 failures encountered:\n - @hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git (root/audiobookshelf): manager: remove repository: rpc error: code = Internal desc = staging repository for removal: rename /home/git/repositories/@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git /home/git/repositories/+gitaly/tmp/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git+removed: file exists\n","pid":64,"time":"2022-11-01T11:55:01.654Z"}
rake aborted!
Backup::Error: gitaly-backup exit status 1
But it looks like the restore is ok, I can't explain why its doing this.
Expected behavior
Finish without error
Versions
- Chart: (tagged version | branch | hash
git rev-parse HEAD) - Platform:
- Cloud: EKS
- Kubernetes: (
kubectl version)- Client:
- Server:
- Helm: (
helm version)- Client: version.Info{Major:"1", Minor:"23+", GitVersion:"v1.23.7-eks-4721010", GitCommit:"b77d9473a02fbfa834afa67d677fd12d690b195f", GitTreeState:"clean", BuildDate:"2022-06-27T22:22:16Z", GoVersion:"go1.17.10", Compiler:"gc", Platform:"linux/amd64"}
- Server: version.Info{Major:"1", Minor:"23+", GitVersion:"v1.23.10-eks-15b7512", GitCommit:"cd6399691d9b1fed9ec20c9c5e82f5993c3f42cb", GitTreeState:"clean", BuildDate:"2022-08-31T19:17:01Z", GoVersion:"go1.17.13", Compiler:"gc", Platform:"linux/amd64"}
Relevant logs
.
.
.
{"command":"restore","gl_project_path":"test-group/test-pro1","level":"info","msg":"started restore","relative_path":"@hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451.design.git","storage_name":"default","time":"2022-11-01T11:55:00.864Z"}
{"command":"restore","gl_project_path":"test-group/test-pro1","level":"info","msg":"completed restore","relative_path":"@hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451.git","storage_name":"default","time":"2022-11-01T11:55:01.170Z"}
{"command":"restore","gl_project_path":"root/audiobookshelf","level":"info","msg":"started restore","relative_path":"@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git","storage_name":"default","time":"2022-11-01T11:55:01.170Z"}
{"command":"restore","error":"manager: remove repository: rpc error: code = Internal desc = staging repository for removal: rename /home/git/repositories/@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git /home/git/repositories/+gitaly/tmp/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git+removed: file exists","gl_project_path":"root/audiobookshelf","level":"error","msg":"restore failed","relative_path":"@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git","storage_name":"default","time":"2022-11-01T11:55:01.231Z"}
{"command":"restore","gl_project_path":"root/audiobookshelf.wiki","level":"info","msg":"started restore","relative_path":"@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.wiki.git","storage_name":"default","time":"2022-11-01T11:55:01.231Z"}
{"command":"restore","error":"manager: repository skipped: restore bundle: filesystem sink: get reader for \"@hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451.design.bundle\": doesn't exist","gl_project_path":"test-group/test-pro1","level":"warning","msg":"skipped restore","relative_path":"@hashed/79/02/7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451.design.git","storage_name":"default","time":"2022-11-01T11:55:01.255Z"}
{"command":"restore","gl_project_path":"root/audiobookshelf","level":"info","msg":"started restore","relative_path":"@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.design.git","storage_name":"default","time":"2022-11-01T11:55:01.255Z"}
{"command":"restore","error":"manager: repository skipped: restore bundle: filesystem sink: get reader for \"@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.wiki.bundle\": doesn't exist","gl_project_path":"root/audiobookshelf.wiki","level":"warning","msg":"skipped restore","relative_path":"@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.wiki.git","storage_name":"default","time":"2022-11-01T11:55:01.633Z"}
{"command":"restore","error":"manager: repository skipped: restore bundle: filesystem sink: get reader for \"@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.design.bundle\": doesn't exist","gl_project_path":"root/audiobookshelf","level":"warning","msg":"skipped restore","relative_path":"@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.design.git","storage_name":"default","time":"2022-11-01T11:55:01.653Z"}
{"level":"fatal","msg":"restore: pipeline: 1 failures encountered:\n - @hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git (root/audiobookshelf): manager: remove repository: rpc error: code = Internal desc = staging repository for removal: rename /home/git/repositories/@hashed/2c/62/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git /home/git/repositories/+gitaly/tmp/2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3.git+removed: file exists\n","pid":64,"time":"2022-11-01T11:55:01.654Z"}
rake aborted!
Backup::Error: gitaly-backup exit status 1
/srv/gitlab/lib/backup/gitaly_backup.rb:59:in `finish!'
/srv/gitlab/lib/backup/repositories.rb:37:in `restore'
/srv/gitlab/lib/backup/manager.rb:101:in `run_restore_task'
/srv/gitlab/lib/tasks/gitlab/backup.rake:29:in `block (4 levels) in <main>'
/srv/gitlab/vendor/bundle/ruby/2.7.0/gems/sentry-ruby-core-5.1.1/lib/sentry/rake.rb:26:in `execute'
/srv/gitlab/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/srv/gitlab/bin/bundle:5:in `load'
/srv/gitlab/bin/bundle:5:in `<main>'
Tasks: TOP => gitlab:backup:repo:restore
(See full trace by running task with --trace)