Move bucket index calculations to the place where they are used
This can help https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1096
This commit is contained in:
parent
5523b934ae
commit
16e4558792
16
histogram.go
16
histogram.go
@ -86,14 +86,6 @@ func (h *Histogram) Update(v float64) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
bucketIdx := (math.Log10(v) - e10Min) * bucketsPerDecimal
|
bucketIdx := (math.Log10(v) - e10Min) * bucketsPerDecimal
|
||||||
idx := uint(bucketIdx)
|
|
||||||
if bucketIdx == float64(idx) {
|
|
||||||
// Edge case for 10^n values, which must go to the lower bucket
|
|
||||||
// according to Prometheus logic for `le`-based histograms.
|
|
||||||
idx--
|
|
||||||
}
|
|
||||||
decimalBucketIdx := idx / bucketsPerDecimal
|
|
||||||
offset := idx % bucketsPerDecimal
|
|
||||||
h.mu.Lock()
|
h.mu.Lock()
|
||||||
h.sum += v
|
h.sum += v
|
||||||
if bucketIdx < 0 {
|
if bucketIdx < 0 {
|
||||||
@ -101,6 +93,14 @@ func (h *Histogram) Update(v float64) {
|
|||||||
} else if bucketIdx >= bucketsCount {
|
} else if bucketIdx >= bucketsCount {
|
||||||
h.upper++
|
h.upper++
|
||||||
} else {
|
} else {
|
||||||
|
idx := uint(bucketIdx)
|
||||||
|
if bucketIdx == float64(idx) {
|
||||||
|
// Edge case for 10^n values, which must go to the lower bucket
|
||||||
|
// according to Prometheus logic for `le`-based histograms.
|
||||||
|
idx--
|
||||||
|
}
|
||||||
|
decimalBucketIdx := idx / bucketsPerDecimal
|
||||||
|
offset := idx % bucketsPerDecimal
|
||||||
db := h.decimalBuckets[decimalBucketIdx]
|
db := h.decimalBuckets[decimalBucketIdx]
|
||||||
if db == nil {
|
if db == nil {
|
||||||
var b [bucketsPerDecimal]uint64
|
var b [bucketsPerDecimal]uint64
|
||||||
|
Loading…
Reference in New Issue
Block a user