Deadline exceeded when trying to load diff files
Copied from gitlab#377884
When trying to load a particularly large diff (200MB in the original issue), the call times out in the following manner:
GRPC::DeadlineExceeded: 4:Deadline Exceeded.
from grpc-1.42.0-x86_64 (linux) src/ruby/lib/grpc/generic/active_call.rb:29:in `check_status'
from grpc-1.42.0-x86_64 (linux) src/ruby/lib/grpc/generic/active_call.rb:180:in `attach_status_results_and_complete_call'
from grpc-1.42.0-x86_64 (linux) src/ruby/lib/grpc/generic/active_call.rb:169:in `receive_and_check_status'
from grpc-1.42.0-x86_64 (linux) src/ruby/lib/grpc/generic/active_call.rb:337:in `each_remote_read_then_finish'
from config/initializers/enumerator_next_patch.rb:9:in `block (2 levels) in <module:EnumeratorNextPatch>'
from lib/gitlab/gitaly_client/call.rb:43:in `block (3 levels) in instrument_stream'
from lib/gitlab/gitaly_client/call.rb:55:in `recording_request'
from lib/gitlab/gitaly_client/call.rb:43:in `block (2 levels) in instrument_stream'
from lib/gitlab/gitaly_client/call.rb:42:in `loop'
from lib/gitlab/gitaly_client/call.rb:42:in `block in instrument_stream'
from lib/gitlab/gitaly_client/diff_stitcher.rb:17:in `each'
from lib/gitlab/gitaly_client/diff_stitcher.rb:17:in `each'
from lib/gitlab/gitaly_client/diff_stitcher.rb:17:in `each'
from lib/gitlab/git/diff_collection.rb:160:in `each_gitaly_patch'
from lib/gitlab/git/diff_collection.rb:51:in `each'
from lib/gitlab/git/diff_collection.rb:123:in `each_with_index'
from lib/gitlab/git/diff_collection.rb:123:in `decorate!'
from lib/gitlab/diff/file_collection/base.rb:41:in `block in raw_diff_files'
from lib/gitlab/utils/strong_memoize.rb:44:in `strong_memoize'
from lib/gitlab/diff/file_collection/base.rb:40:in `raw_diff_files'
from lib/gitlab/diff/file_collection/base.rb:11:in `size'
from app/views/projects/commit/_ci_menu.html.haml:6
If diffs are too large to load reliably it would be good to be able to inform the user of that, but currently I'm not sure we can determine it in Ruby without this endpoint returning either successfully or throwing a relevant error that we can capture and pass on
Edited by Robert May