Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove support to set map and array to attribute value #2039

Merged
merged 1 commit into from
Nov 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 18 additions & 63 deletions consumer/pdata/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,60 +269,7 @@ func (a AttributeValue) SetBoolVal(v bool) {
(*a.orig).Value = &otlpcommon.AnyValue_BoolValue{BoolValue: v}
}

// SetMapVal replaces the value associated with this AttributeValue,
// it also changes the type to be AttributeValueMAP. The `m` argument will be deep
// copied into this AttributeValue.
//
// Calling this function on zero-initialized AttributeValue will cause a panic.
func (a AttributeValue) SetMapVal(m AttributeMap) {
if *a.orig == nil {
*a.orig = &otlpcommon.AnyValue{}
}
var dest *otlpcommon.KeyValueList
switch v := (*a.orig).Value.(type) {
case *otlpcommon.AnyValue_KvlistValue:
if v.KvlistValue == nil {
v.KvlistValue = &otlpcommon.KeyValueList{}
}
dest = v.KvlistValue

default:
dest = &otlpcommon.KeyValueList{}
(*a.orig).Value = &otlpcommon.AnyValue_KvlistValue{KvlistValue: dest}
}

destMap := newAttributeMap(&dest.Values)
m.CopyTo(destMap)
}

// SetArrayVal replaces the value associated with this AttributeValue,
// it also changes the type to be AttributeValueARRAY. The `arr` argument will be deep
// copied into this AttributeValue.
//
// Calling this function on zero-initialized AttributeValue will cause a panic.
func (a AttributeValue) SetArrayVal(arr AnyValueArray) {
if *a.orig == nil {
*a.orig = &otlpcommon.AnyValue{}
}
var dest *otlpcommon.ArrayValue
switch v := (*a.orig).Value.(type) {
case *otlpcommon.AnyValue_ArrayValue:
if v.ArrayValue == nil {
v.ArrayValue = &otlpcommon.ArrayValue{}
}
dest = v.ArrayValue

default:
dest = &otlpcommon.ArrayValue{}
(*a.orig).Value = &otlpcommon.AnyValue_ArrayValue{ArrayValue: dest}
}

destArr := newAnyValueArray(&dest.Values)
arr.CopyTo(destArr)
}

// copyTo copies the value to AnyValue. Will panic if dest is nil.
// Calling this function on zero-initialized AttributeValue will cause a panic.
func (a AttributeValue) copyTo(dest *otlpcommon.AnyValue) {
if *a.orig == nil {
// This is a null value. Make the dest null too.
Expand All @@ -331,21 +278,29 @@ func (a AttributeValue) copyTo(dest *otlpcommon.AnyValue) {
}
switch v := (*a.orig).Value.(type) {
case *otlpcommon.AnyValue_KvlistValue:
kv, ok := dest.Value.(*otlpcommon.AnyValue_KvlistValue)
if !ok {
kv = &otlpcommon.AnyValue_KvlistValue{KvlistValue: &otlpcommon.KeyValueList{}}
dest.Value = kv
}
if v.KvlistValue == nil {
// Source is empty.
AttributeValue{&dest}.SetMapVal(NewAttributeMap())
} else {
// Deep copy to dest.
AttributeValue{&dest}.SetMapVal(newAttributeMap(&v.KvlistValue.Values))
kv.KvlistValue = nil
return
}
// Deep copy to dest.
newAttributeMap(&v.KvlistValue.Values).CopyTo(newAttributeMap(&kv.KvlistValue.Values))
case *otlpcommon.AnyValue_ArrayValue:
av, ok := dest.Value.(*otlpcommon.AnyValue_ArrayValue)
if !ok {
av = &otlpcommon.AnyValue_ArrayValue{ArrayValue: &otlpcommon.ArrayValue{}}
dest.Value = av
}
if v.ArrayValue == nil {
// Source is empty.
AttributeValue{&dest}.SetArrayVal(NewAnyValueArray())
} else {
// Deep copy to dest.
AttributeValue{&dest}.SetArrayVal(newAnyValueArray(&v.ArrayValue.Values))
av.ArrayValue = nil
return
}
// Deep copy to dest.
newAnyValueArray(&v.ArrayValue.Values).CopyTo(newAnyValueArray(&av.ArrayValue.Values))
default:
// Primitive immutable type, no need for deep copy.
dest.Value = (*a.orig).Value
Expand Down
68 changes: 23 additions & 45 deletions consumer/pdata/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,12 @@ func fromVal(v interface{}) AttributeValue {
}

func fromMap(v map[string]interface{}) AttributeValue {
m := NewAttributeMap()
av := NewAttributeValueMap()
m := av.MapVal()
for k, v := range v {
m.Insert(k, fromVal(v))
}
m.Sort()
av := NewAttributeValueMap()
av.SetMapVal(m)
return av
}

Expand Down Expand Up @@ -224,16 +223,6 @@ func TestNilOrigSetAttributeValue(t *testing.T) {
av = createNilOrigSetAttributeValue()
av.SetDoubleVal(1.23)
assert.EqualValues(t, 1.23, av.DoubleVal())

av = createNilOrigSetAttributeValue()
av.SetMapVal(NewAttributeMap())
assert.EqualValues(t, NewAttributeMap(), av.MapVal())

// Test nil KvlistValue case for MapVal() func.
orig := &otlpcommon.AnyValue{Value: &otlpcommon.AnyValue_KvlistValue{KvlistValue: nil}}
av = AttributeValue{orig: &orig}
av.SetMapVal(NewAttributeMap())
assert.EqualValues(t, NewAttributeMap(), av.MapVal())
}

func TestAttributeValueEqual(t *testing.T) {
Expand Down Expand Up @@ -595,6 +584,25 @@ func TestAttributeMap_InitFromMap(t *testing.T) {
assert.EqualValues(t, AttributeMap{orig: &rawOrig}.Sort(), am.Sort())
}

func TestAttributeValue_CopyTo(t *testing.T) {
// Test nil KvlistValue case for MapVal() func.
dest := NewAttributeValueNull()
orig := &otlpcommon.AnyValue{Value: &otlpcommon.AnyValue_KvlistValue{KvlistValue: nil}}
AttributeValue{orig: &orig}.CopyTo(dest)
assert.Nil(t, (*dest.orig).Value.(*otlpcommon.AnyValue_KvlistValue).KvlistValue)

// Test nil ArrayValue case for ArrayVal() func.
dest = NewAttributeValueNull()
orig = &otlpcommon.AnyValue{Value: &otlpcommon.AnyValue_ArrayValue{ArrayValue: nil}}
AttributeValue{orig: &orig}.CopyTo(dest)
assert.Nil(t, (*dest.orig).Value.(*otlpcommon.AnyValue_ArrayValue).ArrayValue)

// Test copy nil value.
var origNil *otlpcommon.AnyValue
AttributeValue{orig: &origNil}.CopyTo(dest)
assert.Nil(t, *dest.orig)
}

func TestAttributeMap_CopyTo(t *testing.T) {
dest := NewAttributeMap()
// Test CopyTo to empty
Expand Down Expand Up @@ -1052,12 +1060,11 @@ func generateTestBoolAttributeMap() AttributeMap {
}

func fromArray(v []interface{}) AttributeValue {
arr := NewAnyValueArray()
av := NewAttributeValueArray()
arr := av.ArrayVal()
for _, v := range v {
arr.Append(fromVal(v))
}
av := NewAttributeValueArray()
av.SetArrayVal(arr)
return av
}

Expand Down Expand Up @@ -1118,35 +1125,6 @@ func TestAttributeValueArray(t *testing.T) {
assert.EqualValues(t, NewAnyValueArray(), a1.ArrayVal())
}

func TestAttributeValueSetArrayVal(t *testing.T) {
var anyVal *otlpcommon.AnyValue
v := newAttributeValue(&anyVal)
assert.EqualValues(t, AttributeValueNULL, v.Type())

v.SetArrayVal(NewAnyValueArray())
assert.EqualValues(t, AttributeValueARRAY, v.Type())

anyVal = &otlpcommon.AnyValue{Value: &otlpcommon.AnyValue_ArrayValue{}}
v = newAttributeValue(&anyVal)
assert.EqualValues(t, AttributeValueARRAY, v.Type())

v.SetArrayVal(NewAnyValueArray())
assert.EqualValues(t, AttributeValueARRAY, v.Type())

v.SetIntVal(123)
assert.EqualValues(t, AttributeValueINT, v.Type())

v.SetArrayVal(NewAnyValueArray())
assert.EqualValues(t, AttributeValueARRAY, v.Type())
assert.EqualValues(t, 0, v.ArrayVal().Len())

av := NewAnyValueArray()
av.Resize(1)
v.SetArrayVal(av)
assert.EqualValues(t, AttributeValueARRAY, v.Type())
assert.EqualValues(t, 1, v.ArrayVal().Len())
}

func TestAnyValueArrayWithNilValues(t *testing.T) {
origWithNil := []*otlpcommon.AnyValue{
nil,
Expand Down
8 changes: 3 additions & 5 deletions exporter/loggingexporter/logging_exporter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,18 +72,16 @@ func TestLoggingLogsExporterNoErrors(t *testing.T) {
}

func TestNestedArraySerializesCorrectly(t *testing.T) {
av := pdata.NewAnyValueArray()
ava := pdata.NewAttributeValueArray()
av := ava.ArrayVal()
av.Append(pdata.NewAttributeValueString("foo"))
av.Append(pdata.NewAttributeValueInt(42))

av2 := pdata.NewAnyValueArray()
av2.Append(pdata.NewAttributeValueString("bar"))
ava2 := pdata.NewAttributeValueArray()
ava2.SetArrayVal(av2)
av2 := ava2.ArrayVal()
av2.Append(pdata.NewAttributeValueString("bar"))

av.Append(ava2)
ava.SetArrayVal(av)

assert.Equal(t, 3, ava.ArrayVal().Len())
assert.Equal(t, "[foo, 42, [bar]]", attributeValueToString(ava))
Expand Down