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

Performance improvements for recordingSpan SetAttributes and addOverCapAttrs #5864

Merged

Conversation

boekkooi-impossiblecloud
Copy link
Contributor

@boekkooi-impossiblecloud boekkooi-impossiblecloud commented Oct 2, 2024

Good day,

While working on #5858 I found some other possible improvements.

This PR:

  • Adds an early return to SetAttributes when no attributes are provided.
  • Only increases s.attributes to guarantee that there is enough space for elements to be added.
  • Fixes and issue where truncateAttr was not used when a attribute was being updated in addOverCapAttrs.

Thanks for reviewing and please let me know if any changes are needed.

benchstat:
```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/trace
cpu: 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz
                                 │   new.txt    │              new1.txt               │
                                 │    sec/op    │   sec/op     vs base                │
TraceStart/with_a_simple_span-12   451.0n ±  5%   375.0n ± 1%  -16.85% (p=0.000 n=10)
TraceStart/with_several_links-12   595.8n ±  3%   501.7n ± 1%  -15.80% (p=0.000 n=10)
TraceStart/with_attributes-12      644.5n ± 10%   569.5n ± 4%  -11.63% (p=0.000 n=10)
geomean                            557.4n         474.9n       -14.79%

                                 │  new.txt   │              new1.txt               │
                                 │    B/op    │    B/op     vs base                 │
TraceStart/with_a_simple_span-12   496.0 ± 0%   496.0 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_several_links-12   672.0 ± 0%   672.0 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_attributes-12      752.0 ± 0%   752.0 ± 0%       ~ (p=1.000 n=10) ¹
geomean                            630.5        630.5       +0.00%
¹ all samples are equal

                                 │  new.txt   │              new1.txt               │
                                 │ allocs/op  │ allocs/op   vs base                 │
TraceStart/with_a_simple_span-12   2.000 ± 0%   2.000 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_several_links-12   3.000 ± 0%   3.000 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_attributes-12      4.000 ± 0%   4.000 ± 0%       ~ (p=1.000 n=10) ¹
geomean                            2.884        2.884       +0.00%
¹ all samples are equal
```
Grow increases the slice's capacity, if necessary, to guarantee space for another n elements.
This change now ensures that `n` is the amount of elements to grow and not the capacity amount.
@dmathieu
Copy link
Member

dmathieu commented Oct 2, 2024

Could you post benchstat results showing the improvements?

@boekkooi-impossiblecloud

This comment was marked as outdated.

Copy link

codecov bot commented Oct 3, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 84.5%. Comparing base (9e791a6) to head (c8f11cb).
Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##            main   #5864     +/-   ##
=======================================
- Coverage   84.6%   84.5%   -0.1%     
=======================================
  Files        272     272             
  Lines      22779   22800     +21     
=======================================
+ Hits       19272   19283     +11     
- Misses      3165    3171      +6     
- Partials     342     346      +4     

see 2 files with indirect coverage changes

@boekkooi-impossiblecloud
Copy link
Contributor Author

boekkooi-impossiblecloud commented Oct 4, 2024

Hey @dashpole
Thank you for your review and approval.
I'm sorry to add another commit to this PR but I think it's worth it. Could you please review the change?

Benchstat for f6fd877 are as follows.

goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/trace
cpu: 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz
                                              │ 1727937489-attr-old.txt │      1728021883-attr-lock.txt       │
                                              │         sec/op          │   sec/op     vs base                │
RecordingSpanSetAttributes/WithLimit/false-12              6.579µ ±  9%   6.034µ ± 9%   -8.29% (p=0.011 n=10)
RecordingSpanSetAttributes/WithLimit/true-12               14.27µ ± 10%   11.95µ ± 9%  -16.26% (p=0.009 n=10)
SpanEnd-12                                                 63.44n ±  0%   63.44n ± 1%        ~ (p=0.985 n=10)
TraceStart/with_a_simple_span-12                           728.0n ±  3%   717.4n ± 3%        ~ (p=0.210 n=10)
TraceStart/with_several_links-12                           881.5n ±  1%   869.2n ± 1%   -1.40% (p=0.015 n=10)
TraceStart/with_attributes-12                              916.5n ±  2%   933.4n ± 4%        ~ (p=0.436 n=10)
SpanProcessorOnEnd/batch:_10,_spans:_10-12                 151.9n ±  3%   147.5n ± 3%   -2.90% (p=0.012 n=10)
SpanProcessorOnEnd/batch:_10,_spans:_100-12                1.497µ ±  2%   1.453µ ± 3%   -2.91% (p=0.001 n=10)
SpanProcessorOnEnd/batch:_100,_spans:_10-12                148.5n ±  2%   147.5n ± 3%        ~ (p=0.306 n=10)
SpanProcessorOnEnd/batch:_100,_spans:_100-12               1.481µ ±  3%   1.450µ ± 3%   -2.09% (p=0.037 n=10)
SpanProcessorVerboseLogging-12                             9.376µ ±  1%   9.030µ ± 1%   -3.69% (p=0.000 n=10)
SpanLimits/AttributeValueLengthLimit-12                    7.221µ ±  4%   6.642µ ± 6%   -8.02% (p=0.003 n=10)
SpanLimits/AttributeCountLimit-12                          6.300µ ±  6%   5.766µ ± 6%   -8.48% (p=0.001 n=10)
SpanLimits/EventCountLimit-12                              5.921µ ±  4%   5.668µ ± 5%   -4.28% (p=0.009 n=10)
SpanLimits/LinkCountLimit-12                               6.073µ ±  6%   5.572µ ± 4%   -8.25% (p=0.002 n=10)
SpanLimits/AttributePerEventCountLimit-12                  6.455µ ±  3%   6.023µ ± 2%   -6.69% (p=0.000 n=10)
SpanLimits/AttributePerLinkCountLimit-12                   6.263µ ±  4%   6.029µ ± 5%   -3.73% (p=0.004 n=10)
SpanSetAttributesOverCapacity-12                           1.683µ ±  1%   1.669µ ± 1%        ~ (p=0.072 n=10)
StartEndSpan/AlwaysSample-12                               803.0n ±  4%   763.0n ± 3%   -4.99% (p=0.001 n=10)
StartEndSpan/NeverSample-12                                216.0n ±  2%   210.4n ± 2%   -2.62% (p=0.003 n=10)
SpanWithAttributes_4/AlwaysSample-12                       1.217µ ±  2%   1.133µ ± 4%   -6.86% (p=0.000 n=10)
SpanWithAttributes_4/NeverSample-12                        370.4n ±  5%   360.5n ± 4%        ~ (p=0.143 n=10)
SpanWithAttributes_8/AlwaysSample-12                       1.494µ ±  4%   1.416µ ± 4%   -5.22% (p=0.000 n=10)
SpanWithAttributes_8/NeverSample-12                        477.1n ±  3%   442.4n ± 5%   -7.27% (p=0.001 n=10)
SpanWithAttributes_all/AlwaysSample-12                     1.310µ ±  5%   1.207µ ± 5%   -7.94% (p=0.001 n=10)
SpanWithAttributes_all/NeverSample-12                      388.0n ±  5%   370.0n ± 8%   -4.64% (p=0.019 n=10)
SpanWithAttributes_all_2x/AlwaysSample-12                  1.664µ ±  2%   1.508µ ± 3%   -9.37% (p=0.000 n=10)
SpanWithAttributes_all_2x/NeverSample-12                   522.7n ±  7%   490.9n ± 3%   -6.07% (p=0.003 n=10)
SpanWithEvents_4/AlwaysSample-12                           1.411µ ±  4%   1.318µ ± 4%   -6.56% (p=0.002 n=10)
SpanWithEvents_4/NeverSample-12                            218.4n ±  3%   215.9n ± 2%        ~ (p=0.101 n=10)
SpanWithEvents_8/AlwaysSample-12                           1.997µ ±  5%   1.927µ ± 5%   -3.51% (p=0.023 n=10)
SpanWithEvents_8/NeverSample-12                            226.6n ±  3%   217.8n ± 2%   -3.84% (p=0.000 n=10)
SpanWithEvents_WithStackTrace/AlwaysSample-12             1016.5n ±  2%   956.5n ± 4%   -5.90% (p=0.001 n=10)
SpanWithEvents_WithStackTrace/NeverSample-12               242.0n ±  3%   237.7n ± 2%   -1.76% (p=0.022 n=10)
SpanWithEvents_WithTimestamp/AlwaysSample-12              1019.5n ±  3%   941.7n ± 7%   -7.63% (p=0.002 n=10)
SpanWithEvents_WithTimestamp/NeverSample-12                276.4n ±  3%   271.9n ± 2%   -1.65% (p=0.009 n=10)
TraceID_DotString-12                                       71.94n ±  3%   68.63n ± 3%   -4.61% (p=0.015 n=10)
SpanID_DotString-12                                        50.88n ±  3%   49.27n ± 1%   -3.16% (p=0.000 n=10)
geomean                                                    952.8n         908.2n        -4.68%

                                              │ 1727937489-attr-old.txt │       1728021883-attr-lock.txt        │
                                              │          B/op           │     B/op      vs base                 │
RecordingSpanSetAttributes/WithLimit/false-12            7.062Ki ± 0%     7.062Ki ± 0%       ~ (p=1.000 n=10) ¹
RecordingSpanSetAttributes/WithLimit/true-12             7.564Ki ± 0%     7.564Ki ± 0%  +0.01% (p=0.034 n=10)
SpanEnd-12                                                 0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_a_simple_span-12                           704.0 ± 0%       704.0 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_several_links-12                           880.0 ± 0%       880.0 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_attributes-12                              960.0 ± 0%       960.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_10,_spans:_10-12                 0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_10,_spans:_100-12                0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_100,_spans:_10-12                0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_100,_spans:_100-12               0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorVerboseLogging-12                           10.94Ki ± 0%     10.94Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/AttributeValueLengthLimit-12                  10.76Ki ± 0%     10.76Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/AttributeCountLimit-12                        10.02Ki ± 0%     10.02Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/EventCountLimit-12                            9.594Ki ± 0%     9.594Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/LinkCountLimit-12                             9.203Ki ± 0%     9.203Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/AttributePerEventCountLimit-12                10.64Ki ± 0%     10.64Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/AttributePerLinkCountLimit-12                 10.64Ki ± 0%     10.64Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanSetAttributesOverCapacity-12                           768.0 ± 0%       768.0 ± 0%       ~ (p=1.000 n=10) ¹
StartEndSpan/AlwaysSample-12                               704.0 ± 0%       704.0 ± 0%       ~ (p=1.000 n=10) ¹
StartEndSpan/NeverSample-12                                144.0 ± 0%       144.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_4/AlwaysSample-12                     1.188Ki ± 0%     1.188Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_4/NeverSample-12                        400.0 ± 0%       400.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_8/AlwaysSample-12                     1.688Ki ± 0%     1.688Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_8/NeverSample-12                        656.0 ± 0%       656.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_all/AlwaysSample-12                   1.312Ki ± 0%     1.312Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_all/NeverSample-12                      464.0 ± 0%       464.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_all_2x/AlwaysSample-12                2.062Ki ± 0%     2.062Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_all_2x/NeverSample-12                   848.0 ± 0%       848.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_4/AlwaysSample-12                         1.188Ki ± 0%     1.188Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_4/NeverSample-12                            144.0 ± 0%       144.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_8/AlwaysSample-12                         1.812Ki ± 0%     1.812Ki ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_8/NeverSample-12                            144.0 ± 0%       144.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_WithStackTrace/AlwaysSample-12              800.0 ± 0%       800.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_WithStackTrace/NeverSample-12               160.0 ± 0%       160.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_WithTimestamp/AlwaysSample-12               824.0 ± 0%       824.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_WithTimestamp/NeverSample-12                184.0 ± 0%       184.0 ± 0%       ~ (p=1.000 n=10) ¹
TraceID_DotString-12                                       64.00 ± 0%       64.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanID_DotString-12                                        32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                                               ²                 +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                              │ 1727937489-attr-old.txt │      1728021883-attr-lock.txt       │
                                              │        allocs/op        │ allocs/op   vs base                 │
RecordingSpanSetAttributes/WithLimit/false-12              15.00 ± 0%     15.00 ± 0%       ~ (p=1.000 n=10) ¹
RecordingSpanSetAttributes/WithLimit/true-12               20.00 ± 0%     20.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanEnd-12                                                 0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_a_simple_span-12                           14.00 ± 0%     14.00 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_several_links-12                           15.00 ± 0%     15.00 ± 0%       ~ (p=1.000 n=10) ¹
TraceStart/with_attributes-12                              16.00 ± 0%     16.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_10,_spans:_10-12                 0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_10,_spans:_100-12                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_100,_spans:_10-12                0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorOnEnd/batch:_100,_spans:_100-12               0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanProcessorVerboseLogging-12                             155.0 ± 0%     155.0 ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/AttributeValueLengthLimit-12                    54.00 ± 0%     54.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/AttributeCountLimit-12                          50.00 ± 0%     50.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/EventCountLimit-12                              47.00 ± 0%     47.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/LinkCountLimit-12                               47.00 ± 0%     47.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/AttributePerEventCountLimit-12                  50.00 ± 0%     50.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanLimits/AttributePerLinkCountLimit-12                   50.00 ± 0%     50.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanSetAttributesOverCapacity-12                           15.00 ± 0%     15.00 ± 0%       ~ (p=1.000 n=10) ¹
StartEndSpan/AlwaysSample-12                               14.00 ± 0%     14.00 ± 0%       ~ (p=1.000 n=10) ¹
StartEndSpan/NeverSample-12                                2.000 ± 0%     2.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_4/AlwaysSample-12                       16.00 ± 0%     16.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_4/NeverSample-12                        3.000 ± 0%     3.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_8/AlwaysSample-12                       16.00 ± 0%     16.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_8/NeverSample-12                        3.000 ± 0%     3.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_all/AlwaysSample-12                     16.00 ± 0%     16.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_all/NeverSample-12                      3.000 ± 0%     3.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_all_2x/AlwaysSample-12                  16.00 ± 0%     16.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithAttributes_all_2x/NeverSample-12                   3.000 ± 0%     3.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_4/AlwaysSample-12                           17.00 ± 0%     17.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_4/NeverSample-12                            2.000 ± 0%     2.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_8/AlwaysSample-12                           18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_8/NeverSample-12                            2.000 ± 0%     2.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_WithStackTrace/AlwaysSample-12              16.00 ± 0%     16.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_WithStackTrace/NeverSample-12               3.000 ± 0%     3.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_WithTimestamp/AlwaysSample-12               17.00 ± 0%     17.00 ± 0%       ~ (p=1.000 n=10) ¹
SpanWithEvents_WithTimestamp/NeverSample-12                4.000 ± 0%     4.000 ± 0%       ~ (p=1.000 n=10) ¹
TraceID_DotString-12                                       2.000 ± 0%     2.000 ± 0%       ~ (p=1.000 n=10) ¹
SpanID_DotString-12                                        2.000 ± 0%     2.000 ± 0%       ~ (p=1.000 n=10) ¹
geomean                                                               ²               +0.00%                ²
¹ all samples are equal
² summaries must be >0 to compute geomean

CHANGELOG.md Outdated Show resolved Hide resolved
@dmathieu dmathieu merged commit 3cbd967 into open-telemetry:main Oct 7, 2024
32 checks passed
dmathieu added a commit that referenced this pull request Oct 9, 2024
Good day,
Thanks for review this PR!
This PR follows from
#5864 and avoid
multiple locks in `End`, `RecordError`, `AddEvent` and `AddLink`.

Benchstats result are:
```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/trace
cpu: 11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz
           │ event-3cbd9671.txt │        event-pr-e9744b48.txt        │
           │       sec/op       │                 │
SpanEnd-12          63.07n ± 1%   53.63n ± 1%  -14.97% (p=0.000 n=10)

           │ event-3cbd9671.txt │     event-pr-e9744b48.txt      │
           │        B/op        │    B/op     vs base            │
SpanEnd-12           0.000 ± 0%   0.000 ± 0%  ~ (p=1.000 n=10) ¹
¹ all samples are equal

           │ event-3cbd9671.txt │     event-pr-e9744b48.txt      │
           │     allocs/op      │ allocs/op   vs base            │
SpanEnd-12           0.000 ± 0%   0.000 ± 0%  ~ (p=1.000 n=10) ¹
¹ all samples are equal

```

---------

Co-authored-by: David Ashpole <[email protected]>
Co-authored-by: Damien Mathieu <[email protected]>
@MrAlias MrAlias added this to the v1.31.0 milestone Oct 10, 2024
dashpole added a commit that referenced this pull request Oct 11, 2024
### Added

- Add `go.opentelemetry.io/otel/sdk/metric/exemplar` package which
includes `Exemplar`, `Filter`, `TraceBasedFilter`, `AlwaysOnFilter`,
`HistogramReservoir`, `FixedSizeReservoir`, `Reservoir`, `Value` and
`ValueType` types. These will be used for configuring the exemplar
reservoir for the metrics sdk. (#5747, #5862)
- Add `WithExportBufferSize` option to log batch processor.(#5877)

### Changed

- Enable exemplars by default in `go.opentelemetry.io/otel/sdk/metric`.
Exemplars can be disabled by setting
`OTEL_METRICS_EXEMPLAR_FILTER=always_off` (#5778)
- `Logger.Enabled` in `go.opentelemetry.io/otel/log` now accepts a newly
introduced `EnabledParameters` type instead of `Record`. (#5791)
- `FilterProcessor.Enabled` in
`go.opentelemetry.io/otel/sdk/log/internal/x` now accepts
`EnabledParameters` instead of `Record`. (#5791)
- The `Record` type in `go.opentelemetry.io/otel/log` is no longer
comparable. (#5847)
- Performance improvements for the trace SDK `SetAttributes` method in
`Span`. (#5864)
- Reduce memory allocations for the `Event` and `Link` lists in `Span`.
(#5858)
- Performance improvements for the trace SDK `AddEvent`, `AddLink`,
`RecordError` and `End` methods in `Span`. (#5874)

### Deprecated

- Deprecate all examples under `go.opentelemetry.io/otel/example` as
they are moved to [Contrib
repository](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/examples).
(#5854)

### Fixed

- The race condition for multiple `FixedSize` exemplar reservoirs
identified in #5814 is resolved. (#5819)
- Fix log records duplication in case of heterogeneous resource
attributes by correctly mapping each log record to it's resource and
scope. (#5803)
- Fix timer channel drain to avoid hanging on Go 1.23. (#5868)
- Fix delegation for global meter providers, and panic when calling
otel.SetMeterProvider. (#5827)
- Change the `reflect.TypeOf` to use a nil pointer to not allocate on
the heap unless necessary. (#5827)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants