diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2019-04-25 09:05:24 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2019-04-25 09:05:24 +0000 |
commit | e7c494cc08de77a8898a561016bd38abc903a5d8 (patch) | |
tree | 8911bc0deef5234f2f0ce2ccf73cd242e818640a | |
parent | 6b90db7d64f404c7785b23dcf7b8e39ff6175423 (diff) | |
parent | 1885691b035a29948fa009bc505c59a97fb79ae6 (diff) | |
download | gitlab-ce-e7c494cc08de77a8898a561016bd38abc903a5d8.tar.gz |
Merge branch 'fix-lazy-blobs-requesting-all-previous-blobs' into 'master'
Ensure that we only request blobs in one batch
Closes #60829
See merge request gitlab-org/gitlab-ce!27625
-rw-r--r-- | changelogs/unreleased/fix-lazy-blobs-requesting-all-previous-blobs.yml | 6 | ||||
-rw-r--r-- | lib/gitlab/gitaly_client/blob_service.rb | 4 | ||||
-rw-r--r-- | spec/models/blob_spec.rb | 15 |
3 files changed, 23 insertions, 2 deletions
diff --git a/changelogs/unreleased/fix-lazy-blobs-requesting-all-previous-blobs.yml b/changelogs/unreleased/fix-lazy-blobs-requesting-all-previous-blobs.yml new file mode 100644 index 00000000000..58f5a9c943c --- /dev/null +++ b/changelogs/unreleased/fix-lazy-blobs-requesting-all-previous-blobs.yml @@ -0,0 +1,6 @@ +--- +title: Fix Blob.lazy always loading all previously-requested blobs when a new request + is made +merge_request: +author: +type: performance diff --git a/lib/gitlab/gitaly_client/blob_service.rb b/lib/gitlab/gitaly_client/blob_service.rb index 6b8e58e6199..8ccefb00d20 100644 --- a/lib/gitlab/gitaly_client/blob_service.rb +++ b/lib/gitlab/gitaly_client/blob_service.rb @@ -55,13 +55,13 @@ module Gitlab def get_blobs(revision_paths, limit = -1) return [] if revision_paths.empty? - revision_paths.map! do |rev, path| + request_revision_paths = revision_paths.map do |rev, path| Gitaly::GetBlobsRequest::RevisionPath.new(revision: rev, path: encode_binary(path)) end request = Gitaly::GetBlobsRequest.new( repository: @gitaly_repo, - revision_paths: revision_paths, + revision_paths: request_revision_paths, limit: limit ) diff --git a/spec/models/blob_spec.rb b/spec/models/blob_spec.rb index d0e1688cce3..8364293b908 100644 --- a/spec/models/blob_spec.rb +++ b/spec/models/blob_spec.rb @@ -43,6 +43,21 @@ describe Blob do changelog.id contributing.id end + + it 'does not include blobs from previous requests in later requests' do + changelog = described_class.lazy(project, commit_id, 'CHANGELOG') + contributing = described_class.lazy(same_project, commit_id, 'CONTRIBUTING.md') + + # Access property so the values are loaded + changelog.id + contributing.id + + readme = described_class.lazy(project, commit_id, 'README.md') + + expect(project.repository).to receive(:blobs_at).with([[commit_id, 'README.md']]).once.and_call_original + + readme.id + end end describe '#data' do |