prometheus/pkg/histogram/sparse_histogram.go
Dieter Plaetinck 4d27816ea5
Sparsehistogram: improve dod encoding, testing, encode chunk metadata (#9015)
* factor out different varbit schemes and include Beorn's "optimum" for buckets

Signed-off-by: Dieter Plaetinck <dieter@grafana.com>

* use more compact dod encoding scheme for SHS chunk columns

Signed-off-by: Dieter Plaetinck <dieter@grafana.com>

* remove FB VB and xor dod encoding because we won't use it

Signed-off-by: Dieter Plaetinck <dieter@grafana.com>

* HistoChunk metadata encoding

Signed-off-by: Dieter Plaetinck <dieter@grafana.com>

* add SparseHistogram.Copy()

Signed-off-by: Dieter Plaetinck <dieter@grafana.com>

* histogram test: test appending a few histograms

Signed-off-by: Dieter Plaetinck <dieter@grafana.com>

* add license headers

Signed-off-by: Dieter Plaetinck <dieter@grafana.com>
2021-06-30 16:15:43 +05:30

51 lines
1.5 KiB
Go

// Copyright 2021 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package histogram
type SparseHistogram struct {
Count, ZeroCount uint64
Sum, ZeroThreshold float64
Schema int32
PositiveSpans, NegativeSpans []Span
PositiveBuckets, NegativeBuckets []int64
}
type Span struct {
Offset int32
Length uint32
}
func (s SparseHistogram) Copy() SparseHistogram {
c := s
if s.PositiveSpans != nil {
c.PositiveSpans = make([]Span, len(s.PositiveSpans))
copy(c.PositiveSpans, s.PositiveSpans)
}
if s.NegativeSpans != nil {
c.NegativeSpans = make([]Span, len(s.NegativeSpans))
copy(c.NegativeSpans, s.NegativeSpans)
}
if s.PositiveBuckets != nil {
c.PositiveBuckets = make([]int64, len(s.PositiveBuckets))
copy(c.PositiveBuckets, s.PositiveBuckets)
}
if s.NegativeBuckets != nil {
c.NegativeBuckets = make([]int64, len(s.NegativeBuckets))
copy(c.NegativeBuckets, s.NegativeBuckets)
}
return c
}