Commit 3186a3bf authored by Sean McGivern's avatar Sean McGivern

Merge branch 'sh-fix-infite-loop-peek-bar' into 'master'

Fix SystemStackError when Peek bar is active with Rugged calls

Closes #65404

See merge request gitlab-org/gitlab-ce!31357
parents 011093ce 7a5c4cd0
......@@ -29,8 +29,12 @@ module Peek
def format_args(args)
args.map do |arg|
# Needed to avoid infinite as_json calls
if arg.is_a?(Gitlab::Git::Repository)
# ActiveSupport::JSON recursively calls as_json on all
# instance variables, and if that instance variable points to
# something that refers back to the same instance, we can wind
# up in an infinite loop. Currently this only seems to happen with
# Gitlab::Git::Repository and ::Repository.
if arg.instance_variables.present?
arg.to_s
else
arg
......
......@@ -24,7 +24,7 @@ describe Peek::Views::Rugged, :request_store do
args: [project.repository.raw, 'HEAD'],
duration: 0.123)
::Gitlab::RuggedInstrumentation.add_call_details(feature: :rugged_test2,
args: [project.repository.raw, 'refs/heads/master'],
args: [project.repository, 'refs/heads/master'],
duration: 0.456)
results = subject.results
......@@ -32,7 +32,11 @@ describe Peek::Views::Rugged, :request_store do
expect(results[:duration]).to eq('1234.00ms')
expect(results[:details].count).to eq(2)
expect(results[:details][0][:args]).to eq([project.repository.raw.to_s, "refs/heads/master"])
expect(results[:details][1][:args]).to eq([project.repository.raw.to_s, "HEAD"])
expected = [
[project.repository.raw.to_s, "HEAD"],
[project.repository.to_s, "refs/heads/master"]
]
expect(results[:details].map { |data| data[:args] }).to match_array(expected)
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment