fix inclusive-exclusiveness of histogram ToString
Summary:
I spent too much time thinking about histograms lately and realized boundary values fall into the lower bucket, not the upper bucket. It's because we're using `std::map::lower_bound` here: 867fe92e5e/monitoring/histogram.cc (L53)
. Fixed histogram's `ToString()` to reflect this.
Closes https://github.com/facebook/rocksdb/pull/2817
Differential Revision: D5751159
Pulled By: ajkr
fbshipit-source-id: 67432bb45849eec9b5bcc0d095551dbc0ee81766
This commit is contained in:
parent
0ec90a7cc2
commit
3b9a000c15
@ -209,7 +209,8 @@ std::string HistogramStat::ToString() const {
|
||||
if (bucket_value <= 0.0) continue;
|
||||
cumulative_sum += bucket_value;
|
||||
snprintf(buf, sizeof(buf),
|
||||
"[ %7" PRIu64 ", %7" PRIu64 " ) %8" PRIu64 " %7.3f%% %7.3f%% ",
|
||||
"%c %7" PRIu64 ", %7" PRIu64 " ] %8" PRIu64 " %7.3f%% %7.3f%% ",
|
||||
(b == 0) ? '[' : '(',
|
||||
(b == 0) ? 0 : bucketMapper.BucketLimit(b-1), // left
|
||||
bucketMapper.BucketLimit(b), // right
|
||||
bucket_value, // count
|
||||
|
@ -85,6 +85,19 @@ TEST_F(HistogramTest, BasicOperation) {
|
||||
BasicOperation(histogramWindowing);
|
||||
}
|
||||
|
||||
TEST_F(HistogramTest, BoundaryValue) {
|
||||
HistogramImpl histogram;
|
||||
// - both should be in [0, 1] bucket because we place values on bucket
|
||||
// boundaries in the lower bucket.
|
||||
// - all points are in [0, 1] bucket, so p50 will be 0.5
|
||||
// - the test cannot be written with a single point since histogram won't
|
||||
// report percentiles lower than the min or greater than the max.
|
||||
histogram.Add(0);
|
||||
histogram.Add(1);
|
||||
|
||||
ASSERT_LE(fabs(histogram.Percentile(50.0) - 0.5), kIota);
|
||||
}
|
||||
|
||||
TEST_F(HistogramTest, MergeHistogram) {
|
||||
HistogramImpl histogram;
|
||||
HistogramImpl other;
|
||||
|
Loading…
Reference in New Issue
Block a user