1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-02-11 13:38:37 +02:00

Eliminate Uint64NumberKind from API (#864)

fixes #851

This includes all of the associated methods, such as
  AsUint64, AsUint64Atomic, AsUint64Ptr, CoerceToUint64, SetUint64
  SetUint64Atomic, SwapUint64, SwapUint64Atomic, AddUint64,
  AddUint64Atomic, CompamreAndSwapUint64, CompareUint64

Only significant change as a result was converting the histogram
aggregator's `count` state field into an int64 from a `metric.Number`.

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
This commit is contained in:
ET 2020-06-23 16:28:04 -07:00 committed by GitHub
parent 665c0de552
commit a8faf8cacc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 8 additions and 194 deletions

View File

@ -32,9 +32,6 @@ const (
Int64NumberKind NumberKind = iota Int64NumberKind NumberKind = iota
// Float64NumberKind means that the Number stores float64. // Float64NumberKind means that the Number stores float64.
Float64NumberKind Float64NumberKind
// Uint64NumberKind means that the Number stores uint64.
// TODO: This can be removed, it's not used.
Uint64NumberKind
) )
// Zero returns a zero value for a given NumberKind // Zero returns a zero value for a given NumberKind
@ -44,8 +41,6 @@ func (k NumberKind) Zero() Number {
return NewInt64Number(0) return NewInt64Number(0)
case Float64NumberKind: case Float64NumberKind:
return NewFloat64Number(0.) return NewFloat64Number(0.)
case Uint64NumberKind:
return NewUint64Number(0)
default: default:
return Number(0) return Number(0)
} }
@ -59,8 +54,6 @@ func (k NumberKind) Minimum() Number {
return NewInt64Number(math.MinInt64) return NewInt64Number(math.MinInt64)
case Float64NumberKind: case Float64NumberKind:
return NewFloat64Number(-1. * math.MaxFloat64) return NewFloat64Number(-1. * math.MaxFloat64)
case Uint64NumberKind:
return NewUint64Number(0)
default: default:
return Number(0) return Number(0)
} }
@ -74,8 +67,6 @@ func (k NumberKind) Maximum() Number {
return NewInt64Number(math.MaxInt64) return NewInt64Number(math.MaxInt64)
case Float64NumberKind: case Float64NumberKind:
return NewFloat64Number(math.MaxFloat64) return NewFloat64Number(math.MaxFloat64)
case Uint64NumberKind:
return NewUint64Number(math.MaxUint64)
default: default:
return Number(0) return Number(0)
} }
@ -103,11 +94,6 @@ func NewFloat64Number(f float64) Number {
return NewNumberFromRaw(internal.Float64ToRaw(f)) return NewNumberFromRaw(internal.Float64ToRaw(f))
} }
// NewInt64Number creates an integral Number.
func NewUint64Number(u uint64) Number {
return NewNumberFromRaw(internal.Uint64ToRaw(u))
}
// NewNumberSignChange returns a number with the same magnitude and // NewNumberSignChange returns a number with the same magnitude and
// the opposite sign. `kind` must describe the kind of number in `nn`. // the opposite sign. `kind` must describe the kind of number in `nn`.
// //
@ -147,12 +133,6 @@ func (n *Number) AsFloat64() float64 {
return internal.RawToFloat64(n.AsRaw()) return internal.RawToFloat64(n.AsRaw())
} }
// AsUint64 assumes that the value contains an uint64 and returns it
// as such.
func (n *Number) AsUint64() uint64 {
return internal.RawToUint64(n.AsRaw())
}
// - as x atomic // - as x atomic
// AsNumberAtomic gets the Number atomically. // AsNumberAtomic gets the Number atomically.
@ -178,12 +158,6 @@ func (n *Number) AsFloat64Atomic() float64 {
return internal.RawToFloat64(n.AsRawAtomic()) return internal.RawToFloat64(n.AsRawAtomic())
} }
// AsUint64Atomic assumes that the number contains a uint64 and
// returns it as such atomically.
func (n *Number) AsUint64Atomic() uint64 {
return atomic.LoadUint64(n.AsUint64Ptr())
}
// - as x ptr // - as x ptr
// AsRawPtr gets the pointer to the raw, uninterpreted raw // AsRawPtr gets the pointer to the raw, uninterpreted raw
@ -204,12 +178,6 @@ func (n *Number) AsFloat64Ptr() *float64 {
return internal.RawPtrToFloat64Ptr(n.AsRawPtr()) return internal.RawPtrToFloat64Ptr(n.AsRawPtr())
} }
// AsUint64Ptr assumes that the number contains a uint64 and returns a
// pointer to it.
func (n *Number) AsUint64Ptr() *uint64 {
return internal.RawPtrToUint64Ptr(n.AsRawPtr())
}
// - coerce // - coerce
// CoerceToInt64 casts the number to int64. May result in // CoerceToInt64 casts the number to int64. May result in
@ -220,8 +188,6 @@ func (n *Number) CoerceToInt64(kind NumberKind) int64 {
return n.AsInt64() return n.AsInt64()
case Float64NumberKind: case Float64NumberKind:
return int64(n.AsFloat64()) return int64(n.AsFloat64())
case Uint64NumberKind:
return int64(n.AsUint64())
default: default:
// you get what you deserve // you get what you deserve
return 0 return 0
@ -236,24 +202,6 @@ func (n *Number) CoerceToFloat64(kind NumberKind) float64 {
return float64(n.AsInt64()) return float64(n.AsInt64())
case Float64NumberKind: case Float64NumberKind:
return n.AsFloat64() return n.AsFloat64()
case Uint64NumberKind:
return float64(n.AsUint64())
default:
// you get what you deserve
return 0
}
}
// CoerceToUint64 casts the number to uint64. May result in
// data/precision loss.
func (n *Number) CoerceToUint64(kind NumberKind) uint64 {
switch kind {
case Int64NumberKind:
return uint64(n.AsInt64())
case Float64NumberKind:
return uint64(n.AsFloat64())
case Uint64NumberKind:
return n.AsUint64()
default: default:
// you get what you deserve // you get what you deserve
return 0 return 0
@ -286,12 +234,6 @@ func (n *Number) SetFloat64(f float64) {
*n.AsFloat64Ptr() = f *n.AsFloat64Ptr() = f
} }
// SetUint64 assumes that the number contains a uint64 and sets it to
// the passed value.
func (n *Number) SetUint64(u uint64) {
*n.AsUint64Ptr() = u
}
// - set atomic // - set atomic
// SetNumberAtomic sets the number to the passed number // SetNumberAtomic sets the number to the passed number
@ -319,12 +261,6 @@ func (n *Number) SetFloat64Atomic(f float64) {
atomic.StoreUint64(n.AsRawPtr(), internal.Float64ToRaw(f)) atomic.StoreUint64(n.AsRawPtr(), internal.Float64ToRaw(f))
} }
// SetUint64Atomic assumes that the number contains a uint64 and sets
// it to the passed value atomically.
func (n *Number) SetUint64Atomic(u uint64) {
atomic.StoreUint64(n.AsUint64Ptr(), u)
}
// - swap // - swap
// SwapNumber sets the number to the passed number and returns the old // SwapNumber sets the number to the passed number and returns the old
@ -361,14 +297,6 @@ func (n *Number) SwapFloat64(f float64) float64 {
return old return old
} }
// SwapUint64 assumes that the number contains an uint64, sets it to
// the passed value and returns the old uint64 value.
func (n *Number) SwapUint64(u uint64) uint64 {
old := n.AsUint64()
n.SetUint64(u)
return old
}
// - swap atomic // - swap atomic
// SwapNumberAtomic sets the number to the passed number and returns // SwapNumberAtomic sets the number to the passed number and returns
@ -398,12 +326,6 @@ func (n *Number) SwapFloat64Atomic(f float64) float64 {
return internal.RawToFloat64(atomic.SwapUint64(n.AsRawPtr(), internal.Float64ToRaw(f))) return internal.RawToFloat64(atomic.SwapUint64(n.AsRawPtr(), internal.Float64ToRaw(f)))
} }
// SwapUint64Atomic assumes that the number contains an uint64, sets
// it to the passed value and returns the old uint64 value atomically.
func (n *Number) SwapUint64Atomic(u uint64) uint64 {
return atomic.SwapUint64(n.AsUint64Ptr(), u)
}
// - add // - add
// AddNumber assumes that this and the passed number are of the passed // AddNumber assumes that this and the passed number are of the passed
@ -414,8 +336,6 @@ func (n *Number) AddNumber(kind NumberKind, nn Number) {
n.AddInt64(nn.AsInt64()) n.AddInt64(nn.AsInt64())
case Float64NumberKind: case Float64NumberKind:
n.AddFloat64(nn.AsFloat64()) n.AddFloat64(nn.AsFloat64())
case Uint64NumberKind:
n.AddUint64(nn.AsUint64())
} }
} }
@ -437,12 +357,6 @@ func (n *Number) AddFloat64(f float64) {
*n.AsFloat64Ptr() += f *n.AsFloat64Ptr() += f
} }
// AddUint64 assumes that the number contains a uint64 and adds the
// passed uint64 to it.
func (n *Number) AddUint64(u uint64) {
*n.AsUint64Ptr() += u
}
// - add atomic // - add atomic
// AddNumberAtomic assumes that this and the passed number are of the // AddNumberAtomic assumes that this and the passed number are of the
@ -453,8 +367,6 @@ func (n *Number) AddNumberAtomic(kind NumberKind, nn Number) {
n.AddInt64Atomic(nn.AsInt64()) n.AddInt64Atomic(nn.AsInt64())
case Float64NumberKind: case Float64NumberKind:
n.AddFloat64Atomic(nn.AsFloat64()) n.AddFloat64Atomic(nn.AsFloat64())
case Uint64NumberKind:
n.AddUint64Atomic(nn.AsUint64())
} }
} }
@ -482,12 +394,6 @@ func (n *Number) AddFloat64Atomic(f float64) {
} }
} }
// AddUint64Atomic assumes that the number contains a uint64 and
// atomically adds the passed uint64 to it.
func (n *Number) AddUint64Atomic(u uint64) {
atomic.AddUint64(n.AsUint64Ptr(), u)
}
// - compare and swap (atomic only) // - compare and swap (atomic only)
// CompareAndSwapNumber does the atomic CAS operation on this // CompareAndSwapNumber does the atomic CAS operation on this
@ -516,12 +422,6 @@ func (n *Number) CompareAndSwapFloat64(of, nf float64) bool {
return atomic.CompareAndSwapUint64(n.AsRawPtr(), internal.Float64ToRaw(of), internal.Float64ToRaw(nf)) return atomic.CompareAndSwapUint64(n.AsRawPtr(), internal.Float64ToRaw(of), internal.Float64ToRaw(nf))
} }
// CompareAndSwapUint64 assumes that this number contains a uint64 and
// does the atomic CAS operation on it.
func (n *Number) CompareAndSwapUint64(ou, nu uint64) bool {
return atomic.CompareAndSwapUint64(n.AsUint64Ptr(), ou, nu)
}
// - compare // - compare
// CompareNumber compares two Numbers given their kind. Both numbers // CompareNumber compares two Numbers given their kind. Both numbers
@ -535,8 +435,6 @@ func (n *Number) CompareNumber(kind NumberKind, nn Number) int {
return n.CompareInt64(nn.AsInt64()) return n.CompareInt64(nn.AsInt64())
case Float64NumberKind: case Float64NumberKind:
return n.CompareFloat64(nn.AsFloat64()) return n.CompareFloat64(nn.AsFloat64())
case Uint64NumberKind:
return n.CompareUint64(nn.AsUint64())
default: default:
// you get what you deserve // you get what you deserve
return 0 return 0
@ -581,21 +479,6 @@ func (n *Number) CompareFloat64(f float64) int {
return 0 return 0
} }
// CompareUint64 assumes that the Number contains an uint64 and performs
// a comparison between the value and the other value. It returns the
// typical result of the compare function: -1 if the value is less
// than the other, 0 if both are equal, 1 if the value is greater than
// the other.
func (n *Number) CompareUint64(u uint64) int {
this := n.AsUint64()
if this < u {
return -1
} else if this > u {
return 1
}
return 0
}
// - relations to zero // - relations to zero
// IsPositive returns true if the actual value is greater than zero. // IsPositive returns true if the actual value is greater than zero.
@ -624,8 +507,6 @@ func (n *Number) Emit(kind NumberKind) string {
return fmt.Sprintf("%d", n.AsInt64()) return fmt.Sprintf("%d", n.AsInt64())
case Float64NumberKind: case Float64NumberKind:
return fmt.Sprintf("%f", n.AsFloat64()) return fmt.Sprintf("%f", n.AsFloat64())
case Uint64NumberKind:
return fmt.Sprintf("%d", n.AsUint64())
default: default:
return "" return ""
} }
@ -639,8 +520,6 @@ func (n *Number) AsInterface(kind NumberKind) interface{} {
return n.AsInt64() return n.AsInt64()
case Float64NumberKind: case Float64NumberKind:
return n.AsFloat64() return n.AsFloat64()
case Uint64NumberKind:
return n.AsUint64()
default: default:
return math.NaN() return math.NaN()
} }
@ -654,8 +533,6 @@ func (n *Number) compareWithZero(kind NumberKind) int {
return n.CompareInt64(0) return n.CompareInt64(0)
case Float64NumberKind: case Float64NumberKind:
return n.CompareFloat64(0.) return n.CompareFloat64(0.)
case Uint64NumberKind:
return n.CompareUint64(0)
default: default:
// you get what you deserve // you get what you deserve
return 0 return 0

View File

@ -156,9 +156,8 @@ func TestNumberZero(t *testing.T) {
zero := Number(0) zero := Number(0)
zerof := NewFloat64Number(0) zerof := NewFloat64Number(0)
zeroi := NewInt64Number(0) zeroi := NewInt64Number(0)
zerou := NewUint64Number(0)
if zero != zerof || zero != zeroi || zero != zerou { if zero != zerof || zero != zeroi {
t.Errorf("Invalid zero representations") t.Errorf("Invalid zero representations")
} }
} }
@ -166,10 +165,8 @@ func TestNumberZero(t *testing.T) {
func TestNumberAsInterface(t *testing.T) { func TestNumberAsInterface(t *testing.T) {
i64 := NewInt64Number(10) i64 := NewInt64Number(10)
f64 := NewFloat64Number(11.11) f64 := NewFloat64Number(11.11)
u64 := NewUint64Number(100)
require.Equal(t, int64(10), (&i64).AsInterface(Int64NumberKind).(int64)) require.Equal(t, int64(10), (&i64).AsInterface(Int64NumberKind).(int64))
require.Equal(t, 11.11, (&f64).AsInterface(Float64NumberKind).(float64)) require.Equal(t, 11.11, (&f64).AsInterface(Float64NumberKind).(float64))
require.Equal(t, uint64(100), (&u64).AsInterface(Uint64NumberKind).(uint64))
} }
func TestNumberSignChange(t *testing.T) { func TestNumberSignChange(t *testing.T) {

View File

@ -10,12 +10,11 @@ func _() {
var x [1]struct{} var x [1]struct{}
_ = x[Int64NumberKind-0] _ = x[Int64NumberKind-0]
_ = x[Float64NumberKind-1] _ = x[Float64NumberKind-1]
_ = x[Uint64NumberKind-2]
} }
const _NumberKind_name = "Int64NumberKindFloat64NumberKindUint64NumberKind" const _NumberKind_name = "Int64NumberKindFloat64NumberKind"
var _NumberKind_index = [...]uint8{0, 15, 32, 48} var _NumberKind_index = [...]uint8{0, 15, 32}
func (i NumberKind) String() string { func (i NumberKind) String() string {
if i < 0 || i >= NumberKind(len(_NumberKind_index)-1) { if i < 0 || i >= NumberKind(len(_NumberKind_index)-1) {

View File

@ -263,7 +263,7 @@ func sum(record export.Record, a aggregation.Sum) (*metricpb.Metric, error) {
} }
switch n := desc.NumberKind(); n { switch n := desc.NumberKind(); n {
case metric.Int64NumberKind, metric.Uint64NumberKind: case metric.Int64NumberKind:
m.MetricDescriptor.Type = metricpb.MetricDescriptor_COUNTER_INT64 m.MetricDescriptor.Type = metricpb.MetricDescriptor_COUNTER_INT64
m.Int64DataPoints = []*metricpb.Int64DataPoint{ m.Int64DataPoints = []*metricpb.Int64DataPoint{
{ {

View File

@ -283,8 +283,6 @@ func TestValuerecorderMetricGroupingExport(t *testing.T) {
} }
runMetricExportTests(t, []record{r, r}, expected) runMetricExportTests(t, []record{r, r}, expected)
//changing the number kind should make no difference. //changing the number kind should make no difference.
r.nKind = metric.Uint64NumberKind
runMetricExportTests(t, []record{r, r}, expected)
r.nKind = metric.Float64NumberKind r.nKind = metric.Float64NumberKind
runMetricExportTests(t, []record{r, r}, expected) runMetricExportTests(t, []record{r, r}, expected)
} }
@ -330,60 +328,6 @@ func TestCountInt64MetricGroupingExport(t *testing.T) {
) )
} }
func TestCountUint64MetricGroupingExport(t *testing.T) {
r := record{
"uint64-count",
metric.CounterKind,
metric.Uint64NumberKind,
nil,
nil,
append(baseKeyValues, cpuKey.Int(1)),
}
runMetricExportTests(
t,
[]record{r, r},
[]metricpb.ResourceMetrics{
{
Resource: nil,
InstrumentationLibraryMetrics: []*metricpb.InstrumentationLibraryMetrics{
{
Metrics: []*metricpb.Metric{
{
MetricDescriptor: &metricpb.MetricDescriptor{
Name: "uint64-count",
Type: metricpb.MetricDescriptor_COUNTER_INT64,
Labels: []*commonpb.StringKeyValue{
{
Key: "CPU",
Value: "1",
},
{
Key: "host",
Value: "test.com",
},
},
},
Int64DataPoints: []*metricpb.Int64DataPoint{
{
Value: 11,
StartTimeUnixNano: startTime(),
TimeUnixNano: pointTime(),
},
{
Value: 11,
StartTimeUnixNano: startTime(),
TimeUnixNano: pointTime(),
},
},
},
},
},
},
},
},
)
}
func TestCountFloat64MetricGroupingExport(t *testing.T) { func TestCountFloat64MetricGroupingExport(t *testing.T) {
r := record{ r := record{
"float64-count", "float64-count",
@ -729,9 +673,6 @@ func runMetricExportTest(t *testing.T, exp *Exporter, rs []record, expected []me
ctx := context.Background() ctx := context.Background()
switch r.nKind { switch r.nKind {
case metric.Uint64NumberKind:
require.NoError(t, agg.Update(ctx, metric.NewUint64Number(1), &desc))
require.NoError(t, agg.Update(ctx, metric.NewUint64Number(10), &desc))
case metric.Int64NumberKind: case metric.Int64NumberKind:
require.NoError(t, agg.Update(ctx, metric.NewInt64Number(1), &desc)) require.NoError(t, agg.Update(ctx, metric.NewInt64Number(1), &desc))
require.NoError(t, agg.Update(ctx, metric.NewInt64Number(10), &desc)) require.NoError(t, agg.Update(ctx, metric.NewInt64Number(10), &desc))

View File

@ -45,8 +45,8 @@ type (
// the less than equal bucket count for the pre-determined boundaries. // the less than equal bucket count for the pre-determined boundaries.
state struct { state struct {
bucketCounts []float64 bucketCounts []float64
count metric.Number
sum metric.Number sum metric.Number
count int64
} }
) )
@ -100,7 +100,7 @@ func (c *Aggregator) Sum() (metric.Number, error) {
// Count returns the number of values in the checkpoint. // Count returns the number of values in the checkpoint.
func (c *Aggregator) Count() (int64, error) { func (c *Aggregator) Count() (int64, error) {
return int64(c.state.count), nil return c.state.count, nil
} }
// Histogram returns the count of events in pre-determined buckets. // Histogram returns the count of events in pre-determined buckets.
@ -160,7 +160,7 @@ func (c *Aggregator) Update(_ context.Context, number metric.Number, desc *metri
c.lock.Lock() c.lock.Lock()
defer c.lock.Unlock() defer c.lock.Unlock()
c.state.count.AddInt64(1) c.state.count++
c.state.sum.AddNumber(kind, number) c.state.sum.AddNumber(kind, number)
c.state.bucketCounts[bucketID]++ c.state.bucketCounts[bucketID]++
@ -175,7 +175,7 @@ func (c *Aggregator) Merge(oa export.Aggregator, desc *metric.Descriptor) error
} }
c.state.sum.AddNumber(desc.NumberKind(), o.state.sum) c.state.sum.AddNumber(desc.NumberKind(), o.state.sum)
c.state.count.AddNumber(metric.Uint64NumberKind, o.state.count) c.state.count += o.state.count
for i := 0; i < len(c.state.bucketCounts); i++ { for i := 0; i < len(c.state.bucketCounts); i++ {
c.state.bucketCounts[i] += o.state.bucketCounts[i] c.state.bucketCounts[i] += o.state.bucketCounts[i]