1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-07-13 01:00:22 +02:00

Metric Accumulator fix for SumObservers (#1381)

* Let SynchronizedMove(nil) reset and discard

* Add common test for SynchronizedMove(nil)

* End-to-end test for the Processor and SumObserver

* Implement SynchronizedMove(nil) six ways

* Lint

* Changelog

* Test no reset for wrong aggregator type; Fix four Aggregators

* Cleanup

* imports

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
This commit is contained in:
Joshua MacDonald
2020-12-10 18:13:08 -08:00
committed by GitHub
parent 970755bd08
commit eb28005e2f
18 changed files with 333 additions and 64 deletions

View File

@ -97,20 +97,27 @@ func (c *Aggregator) Points() ([]number.Number, error) {
// the empty set, taking a lock to prevent concurrent Update() calls.
func (c *Aggregator) SynchronizedMove(oa export.Aggregator, desc *metric.Descriptor) error {
o, _ := oa.(*Aggregator)
if o == nil {
if oa != nil && o == nil {
return aggregator.NewInconsistentAggregatorError(c, oa)
}
c.lock.Lock()
o.points, c.points = c.points, nil
o.sum, c.sum = c.sum, 0
if o != nil {
o.points = c.points
o.sum = c.sum
}
c.points = nil
c.sum = 0
c.lock.Unlock()
// TODO: This sort should be done lazily, only when quantiles
// are requested. The SDK specification says you can use this
// aggregator to simply list values in the order they were
// received as an alternative to requesting quantile information.
o.sort(desc.NumberKind())
if o != nil {
o.sort(desc.NumberKind())
}
return nil
}