Skip to content

Commit 06635a2

Browse files
committed
Add MergeTo method for profiles
Signed-off-by: Israel Blancas <[email protected]>
1 parent d7cc444 commit 06635a2

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

pdata/pprofile/profiles_merge.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package pprofile // import "go.opentelemetry.io/collector/pdata/pprofile"
5+
6+
// MergeTo merges the current Profiles into dest, updating the destination
7+
// dictionary as needed and appending the resource profiles.
8+
func (ms Profiles) MergeTo(dest Profiles) error {
9+
dest.getState().AssertMutable()
10+
if ms.getOrig() == dest.getOrig() {
11+
return nil
12+
}
13+
14+
tmp := NewProfiles()
15+
ms.CopyTo(tmp)
16+
17+
if err := tmp.switchDictionary(tmp.Dictionary(), dest.Dictionary()); err != nil {
18+
return err
19+
}
20+
21+
tmp.ResourceProfiles().MoveAndAppendTo(dest.ResourceProfiles())
22+
23+
return nil
24+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package pprofile
5+
6+
import (
7+
"testing"
8+
9+
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestProfilesMergeTo(t *testing.T) {
14+
src := NewProfiles()
15+
dest := NewProfiles()
16+
17+
src.ResourceProfiles().AppendEmpty()
18+
src.ResourceProfiles().AppendEmpty()
19+
dest.ResourceProfiles().AppendEmpty()
20+
21+
require.NoError(t, src.MergeTo(dest))
22+
23+
assert.Equal(t, 3, dest.ResourceProfiles().Len())
24+
assert.Equal(t, 2, src.ResourceProfiles().Len())
25+
}
26+
27+
func TestProfilesMergeToSelf(t *testing.T) {
28+
profiles := NewProfiles()
29+
profiles.Dictionary().StringTable().Append("test")
30+
profiles.ResourceProfiles().AppendEmpty()
31+
32+
require.NoError(t, profiles.MergeTo(profiles))
33+
34+
assert.Equal(t, 1, profiles.Dictionary().StringTable().Len())
35+
assert.Equal(t, 1, profiles.ResourceProfiles().Len())
36+
}
37+
38+
func TestProfilesMergeToError(t *testing.T) {
39+
src := NewProfiles()
40+
dest := NewProfiles()
41+
42+
stackTable := src.Dictionary().StackTable()
43+
stackTable.AppendEmpty()
44+
stack := stackTable.AppendEmpty()
45+
stack.LocationIndices().Append(1)
46+
47+
locationTable := src.Dictionary().LocationTable()
48+
locationTable.AppendEmpty()
49+
locationTable.AppendEmpty().SetMappingIndex(1)
50+
51+
sample := src.ResourceProfiles().AppendEmpty().
52+
ScopeProfiles().AppendEmpty().
53+
Profiles().AppendEmpty().
54+
Samples().AppendEmpty()
55+
sample.SetStackIndex(1)
56+
57+
err := src.MergeTo(dest)
58+
require.Error(t, err)
59+
60+
assert.Equal(t, 0, dest.ResourceProfiles().Len())
61+
}

0 commit comments

Comments
 (0)