Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
0a4ee10e
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0a4ee10e
编写于
2月 28, 2018
作者:
A
Alejandro Rodríguez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix n+1 issue by not reloading fully loaded blobs
上级
369d34c7
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
9 deletion
+40
-9
app/controllers/projects/compare_controller.rb
app/controllers/projects/compare_controller.rb
+2
-4
lib/gitlab/git/blob.rb
lib/gitlab/git/blob.rb
+9
-5
spec/lib/gitlab/git/blob_spec.rb
spec/lib/gitlab/git/blob_spec.rb
+29
-0
未找到文件。
app/controllers/projects/compare_controller.rb
浏览文件 @
0a4ee10e
...
...
@@ -17,10 +17,8 @@ class Projects::CompareController < Projects::ApplicationController
def
show
apply_diff_view_cookie!
# n+1: https://gitlab.com/gitlab-org/gitlab-ce/issues/37430
Gitlab
::
GitalyClient
.
allow_n_plus_1_calls
do
render
end
render
end
def
diff_for_path
...
...
lib/gitlab/git/blob.rb
浏览文件 @
0a4ee10e
...
...
@@ -238,9 +238,9 @@ module Gitlab
self
.
__send__
(
"
#{
key
}
="
,
options
[
key
.
to_sym
])
# rubocop:disable GitlabSecurity/PublicSend
end
@loaded_all_data
=
false
# Retain the actual size before it is encoded
@loaded_size
=
@data
.
bytesize
if
@data
@loaded_all_data
=
@loaded_size
==
size
end
def
binary?
...
...
@@ -255,10 +255,15 @@ module Gitlab
# memory as a Ruby string.
def
load_all_data!
(
repository
)
return
if
@data
==
''
# don't mess with submodule blobs
return
@data
if
@loaded_all_data
Gitlab
::
GitalyClient
.
migrate
(
:git_blob_load_all_data
)
do
|
is_enabled
|
@data
=
begin
# Even if we return early, recalculate wether this blob is binary in
# case a blob was initialized as text but the full data isn't
@binary
=
nil
return
if
@loaded_all_data
@data
=
Gitlab
::
GitalyClient
.
migrate
(
:git_blob_load_all_data
)
do
|
is_enabled
|
begin
if
is_enabled
repository
.
gitaly_blob_client
.
get_blob
(
oid:
id
,
limit:
-
1
).
data
else
...
...
@@ -269,7 +274,6 @@ module Gitlab
@loaded_all_data
=
true
@loaded_size
=
@data
.
bytesize
@binary
=
nil
end
def
name
...
...
spec/lib/gitlab/git/blob_spec.rb
浏览文件 @
0a4ee10e
...
...
@@ -500,4 +500,33 @@ describe Gitlab::Git::Blob, seed_helper: true do
end
end
end
describe
'#load_all_data!'
do
let
(
:full_data
)
{
'abcd'
}
let
(
:blob
)
{
Gitlab
::
Git
::
Blob
.
new
(
name:
'test'
,
size:
4
,
data:
'abc'
)
}
subject
{
blob
.
load_all_data!
(
repository
)
}
it
'loads missing data'
do
expect
(
Gitlab
::
GitalyClient
).
to
receive
(
:migrate
)
.
with
(
:git_blob_load_all_data
).
and_return
(
full_data
)
subject
expect
(
blob
.
data
).
to
eq
(
full_data
)
end
context
'with a fully loaded blob'
do
let
(
:blob
)
{
Gitlab
::
Git
::
Blob
.
new
(
name:
'test'
,
size:
4
,
data:
full_data
)
}
it
"doesn't perform any loading"
do
expect
(
Gitlab
::
GitalyClient
).
not_to
receive
(
:migrate
)
.
with
(
:git_blob_load_all_data
)
subject
expect
(
blob
.
data
).
to
eq
(
full_data
)
end
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录