Gracefully handle Git errors in project views
Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.
Zendesk (internal): https://gitlab.zendesk.com/agent/tickets/128782
GitLab will produce a 500 error when viewing certain project pages if there is a problem with the repository, or if Gitaly errors for another reason. The error may be something like the following, or a GRPC::Unavailable
or GRPC::DeadlineExceeded
error:
Gitlab::Git::CommandError (13:read info line: EOF):
lib/gitlab/git/wraps_gitaly_errors.rb:13:in `rescue in wrapped_gitaly_errors'
lib/gitlab/git/wraps_gitaly_errors.rb:6:in `wrapped_gitaly_errors'
lib/gitlab/metrics/instrumentation.rb:161:in `block in wrapped_gitaly_errors'
lib/gitlab/metrics/method_call.rb:36:in `measure'
lib/gitlab/metrics/instrumentation.rb:161:in `wrapped_gitaly_errors'
lib/gitlab/git/repository.rb:145:in `local_branches'
app/models/repository.rb:788:in `local_branches'
lib/gitlab/metrics/instrumentation.rb:161:in `block in branches'
lib/gitlab/metrics/method_call.rb:36:in `measure'
lib/gitlab/metrics/instrumentation.rb:161:in `branches'
app/models/protectable_dropdown.rb:25:in `public_send'
app/models/protectable_dropdown.rb:25:in `refs'
app/models/protectable_dropdown.rb:29:in `ref_names'
app/models/protectable_dropdown.rb:15:in `protectable_ref_names'
app/models/protectable_dropdown.rb:19:in `hash'
app/controllers/projects/settings/repository_controller.rb:88:in `protectable_branches_for_dropdown'
app/controllers/projects/settings/repository_controller.rb:93:in `load_gon_index'
ee/app/controllers/ee/projects/settings/repository_controller.rb:35:in `load_gon_index'
app/controllers/projects/settings/repository_controller.rb:60:in `define_protected_refs'
ee/app/controllers/ee/projects/settings/repository_controller.rb:46:in `render_show'
app/controllers/projects/settings/repository_controller.rb:10:in `show'
lib/gitlab/i18n.rb:55:in `with_locale'
lib/gitlab/i18n.rb:61:in `with_user_locale'
app/controllers/application_controller.rb:434:in `set_locale'
lib/gitlab/middleware/rails_queue_duration.rb:27:in `call'
lib/gitlab/metrics/rack_middleware.rb:17:in `block in call'
lib/gitlab/metrics/transaction.rb:57:in `run'
lib/gitlab/metrics/rack_middleware.rb:17:in `call'
lib/gitlab/middleware/multipart.rb:103:in `call'
lib/gitlab/request_profiler/middleware.rb:16:in `call'
ee/lib/gitlab/jira/middleware.rb:17:in `call'
lib/gitlab/middleware/go.rb:20:in `call'
lib/gitlab/etag_caching/middleware.rb:13:in `call'
lib/gitlab/middleware/correlation_id.rb:16:in `block in call'
lib/gitlab/correlation_id.rb:15:in `use_id'
lib/gitlab/middleware/correlation_id.rb:15:in `call'
lib/gitlab/middleware/read_only/controller.rb:42:in `call'
lib/gitlab/middleware/read_only.rb:18:in `call'
lib/gitlab/middleware/basic_health_check.rb:25:in `call'
lib/gitlab/request_context.rb:26:in `call'
lib/gitlab/metrics/requests_rack_middleware.rb:29:in `call'
lib/gitlab/middleware/release_env.rb:13:in `call'
GitLab should gracefully handle problems accessing the repository, at least for certain pages. For example, the project main page itself, the 'Files' view, and all settings pages should load despite the repository not loading. We should be able to catch the mentioned errors and display the page anyway, with a friendly error message.