diff options
author | Rémy Coutable <remy@rymai.me> | 2016-06-14 20:07:25 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-06-14 20:07:25 +0300 |
commit | a50af363f80c3557ac0f5628208acfcd7206eef7 (patch) | |
tree | 556165304d93c833685aaa1a9c54b277d1f9f607 | |
parent | 9a61eadae1f82beea97d36c746660f445316ec4d (diff) | |
parent | 7eabc67efeda871fdff345c4d9723db577f8b58e (diff) |
Merge branch 'update-allocations-gem-fix-names' into 'master'
Update allocations Gem & ignore classes without names
## What does this MR do?
1. Updates the allocations Gem to 1.0.5 so it can be used on 2.2/2.3 without crashing
2. Changes the background sampler to ignore classes/modules without a name (as we can't do much with these)
## Are there points in the code the reviewer needs to double check?
No.
## Why was this MR needed?
Using MRI 2.2 or 2.3 would lead to a segmentation fault in the allocations Gem, sometimes this problem would also occur on 2.1
## What are the relevant issue numbers?
Not an issue, but the merge request that highlighted these problems: !3807
## Does this MR meet the acceptance criteria?
- [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- [ ] ~~[Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)~~
- [ ] ~~API support added~~
- [ ] Tests
- [x] Added for this feature/bug
- [ ] All builds are passing
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [ ] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
See merge request !4645
-rw-r--r-- | CHANGELOG | 2 | ||||
-rw-r--r-- | Gemfile.lock | 2 | ||||
-rw-r--r-- | lib/gitlab/metrics/sampler.rb | 6 | ||||
-rw-r--r-- | spec/lib/gitlab/metrics/sampler_spec.rb | 25 |
4 files changed, 26 insertions, 9 deletions
diff --git a/CHANGELOG b/CHANGELOG index 74fb52d3aeb..162c6723dd2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -79,6 +79,8 @@ v 8.9.0 (unreleased) - Allow users to create confidential issues in private projects - Measure CPU time for instrumented methods - Instrument private methods and private instance methods by default instead just public methods + - Updated the allocations Gem to version 1.0.5 + - The background sampler now ignores classes without names v 8.8.5 (unreleased) - Ensure branch cleanup regardless of whether the GitHub import process succeeds diff --git a/Gemfile.lock b/Gemfile.lock index 209f29de1e0..d517fcb8ed3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,7 +50,7 @@ GEM after_commit_queue (1.3.0) activerecord (>= 3.0) akismet (2.0.0) - allocations (1.0.4) + allocations (1.0.5) arel (6.0.3) asana (0.4.0) faraday (~> 0.9) diff --git a/lib/gitlab/metrics/sampler.rb b/lib/gitlab/metrics/sampler.rb index fc709222a9b..0000450d9bb 100644 --- a/lib/gitlab/metrics/sampler.rb +++ b/lib/gitlab/metrics/sampler.rb @@ -66,7 +66,11 @@ module Gitlab def sample_objects sample = Allocations.to_hash counts = sample.each_with_object({}) do |(klass, count), hash| - hash[klass.name] = count + name = klass.name + + next unless name + + hash[name] = count end # Symbols aren't allocated so we'll need to add those manually. diff --git a/spec/lib/gitlab/metrics/sampler_spec.rb b/spec/lib/gitlab/metrics/sampler_spec.rb index 59db127674a..1ab923b58cf 100644 --- a/spec/lib/gitlab/metrics/sampler_spec.rb +++ b/spec/lib/gitlab/metrics/sampler_spec.rb @@ -72,14 +72,25 @@ describe Gitlab::Metrics::Sampler do end end - describe '#sample_objects' do - it 'adds a metric containing the amount of allocated objects' do - expect(sampler).to receive(:add_metric). - with(/object_counts/, an_instance_of(Hash), an_instance_of(Hash)). - at_least(:once). - and_call_original + if Gitlab::Metrics.mri? + describe '#sample_objects' do + it 'adds a metric containing the amount of allocated objects' do + expect(sampler).to receive(:add_metric). + with(/object_counts/, an_instance_of(Hash), an_instance_of(Hash)). + at_least(:once). + and_call_original + + sampler.sample_objects + end - sampler.sample_objects + it 'ignores classes without a name' do + expect(Allocations).to receive(:to_hash).and_return({ Class.new => 4 }) + + expect(sampler).not_to receive(:add_metric). + with('object_counts', an_instance_of(Hash), type: nil) + + sampler.sample_objects + end end end |