diff --git a/CHANGELOG.md b/CHANGELOG.md index c3a28d34..99227c28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - metrics registry refactoring to search with `O(1)` [#188](https://github.com/tarantool/metrics/issues/188) +- `ipairs` instead of `pairs` while iteration in `histogram` [#196](https://github.com/tarantool/metrics/issues/196) ### Fixed - be gentle to http routes, don't leave gaps in the array diff --git a/metrics/collectors/histogram.lua b/metrics/collectors/histogram.lua index e575a3c4..6e7bf30a 100644 --- a/metrics/collectors/histogram.lua +++ b/metrics/collectors/histogram.lua @@ -9,8 +9,7 @@ local Histogram = Shared:new_class('histogram', {'observe_latency'}) function Histogram.check_buckets(buckets) local prev = -math.huge - for k, v in pairs(buckets) do - if type(k) ~= 'number' then return false end + for _, v in ipairs(buckets) do if type(v) ~= 'number' then return false end if v <= 0 then return false end if prev > v then return false end @@ -48,7 +47,7 @@ function Histogram:observe(num, label_pairs) self.count_collector:inc(1, label_pairs) self.sum_collector:inc(num, label_pairs) - for _, bucket in pairs(self.buckets) do + for _, bucket in ipairs(self.buckets) do local bkt_label_pairs = table.deepcopy(label_pairs) bkt_label_pairs.le = bucket @@ -64,13 +63,13 @@ end function Histogram:collect() local result = {} - for _, obs in pairs(self.count_collector:collect()) do + for _, obs in ipairs(self.count_collector:collect()) do table.insert(result, obs) end - for _, obs in pairs(self.sum_collector:collect()) do + for _, obs in ipairs(self.sum_collector:collect()) do table.insert(result, obs) end - for _, obs in pairs(self.bucket_collector:collect()) do + for _, obs in ipairs(self.bucket_collector:collect()) do table.insert(result, obs) end return result diff --git a/test/collectors/histogram_test.lua b/test/collectors/histogram_test.lua new file mode 100644 index 00000000..6b9e92c8 --- /dev/null +++ b/test/collectors/histogram_test.lua @@ -0,0 +1,8 @@ +local t = require('luatest') +local g = t.group() + +local metrics = require('metrics') + +g.test_unsorted_buckets_error = function() + t.assert_error_msg_contains('Invalid value for buckets', metrics.histogram, 'latency', nil, {0.9, 0.5}) +end