Geo: Non-existent repositories get in a stuck state of never being synched
I took project ID 4498064, which has a non-existent repository on GitLab.com. Then I ran:
irb(main):007:0> serv = Geo::RepositorySyncService.new(proj)
Immediately, I got back:
Gitlab::Git::Repository::NoRepository: 5:GetRepoPath: not a git repository '/var/opt/gitlab/git-data-file12/repositories/namespace/projectgit'
from /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/git/repository.rb:1340:in `rescue in gitaly_migrate'
from /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/git/repository.rb:1337:in `gitaly_migrate'
from /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/git/repository.rb:202:in `local_branches'
from /opt/gitlab/embedded/service/gitlab-rails/app/models/repository.rb:750:in `local_branches'
from /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/metrics/instrumentation.rb:161:in `branches'
from /opt/gitlab/embedded/service/gitlab-rails/app/models/repository.rb:349:in `expire_branch_cache'
from /opt/gitlab/embedded/service/gitlab-rails/lib/gitlab/metrics/instrumentation.rb:161:in `expire_branch_cache'
from /opt/gitlab/embedded/service/gitlab-rails/ee/app/models/ee/repository.rb:21:in `after_sync'
from /opt/gitlab/embedded/service/gitlab-rails/ee/app/services/geo/repository_sync_service.rb:44:in `expire_repository_caches'
from /opt/gitlab/embedded/service/gitlab-rails/ee/app/services/geo/repository_sync_service.rb:31:in `sync_repository'
from /opt/gitlab/embedded/service/gitlab-rails/ee/app/services/geo/base_sync_service.rb:33:in `block in execute'
from /opt/gitlab/embedded/service/gitlab-rails/ee/app/services/concerns/exclusive_lease_guard.rb:22:in `try_obtain_lease'
from /opt/gitlab/embedded/service/gitlab-rails/ee/app/services/geo/base_sync_service.rb:27:in `execute'
from (irb):7
from /opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/railties-4.2.10/lib/rails/commands/console.rb:110:in `start'
from /opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/railties-4.2.10/lib/rails/commands/console.rb:9:in `start'
from /opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/railties-4.2.10/lib/rails/commands/commands_tasks.rb:68:in `console'
from /opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/railties-4.2.10/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/railties-4.2.10/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:9:in `require'
from bin/rails:9:in `<main>'
I think what happens:
- We attempt to download this repo from GitLab.com
- We receive a
Gitlab::Git::Repository::NoRepositoryexception somewhere, so https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/4757/diffs doesn't ever get the chance to mark this repo as sync - We mark this repo to be redownloaded
- Repeat step 1