1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-11-23 22:34:47 +02:00
Commit Graph

20 Commits

Author SHA1 Message Date
Andrew Wilkins
e2da30d7d0 trace,metric,log: change WithInstrumentationAttributes to not de-depuplicate the passed attributes in a closure (#7266)
WithInstrumentationAttributes is creating a closure with a reference to
a slice which is later passed to attribute.NewSet.

attribute.NewSet may mutate the slice, so this will lead to a data race
when the option is applied concurrently. We can fix this by moving the
call to attribute.NewSet outside the closure.

Fixes #7217

<details>
<summary>benchstat for New*Config</summary>

```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/log
cpu: Intel(R) Core(TM) Ultra 7 155U
                                                      │ /tmp/old.txt │            /tmp/new.txt            │
                                                      │    sec/op    │   sec/op     vs base               │
NewLoggerConfig/with_no_options-14                       2.961n ± 6%   3.091n ± 6%        ~ (p=0.132 n=6)
NewLoggerConfig/with_an_instrumentation_version-14       24.75n ± 4%   25.04n ± 5%        ~ (p=0.126 n=6)
NewLoggerConfig/with_a_schema_url-14                     24.97n ± 6%   24.79n ± 4%        ~ (p=0.974 n=6)
NewLoggerConfig/with_instrumentation_attribute-14        55.32n ± 4%   25.32n ± 4%  -54.23% (p=0.002 n=6)
NewLoggerConfig/with_instrumentation_attribute_set-14    24.77n ± 3%   24.96n ± 4%        ~ (p=0.394 n=6)
geomean                                                  19.05n        16.47n       -13.52%

                                                      │ /tmp/old.txt │              /tmp/new.txt              │
                                                      │     B/op     │    B/op     vs base                    │
NewLoggerConfig/with_no_options-14                      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewLoggerConfig/with_an_instrumentation_version-14      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewLoggerConfig/with_a_schema_url-14                    0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewLoggerConfig/with_instrumentation_attribute-14       64.00 ± 0%      0.00 ± 0%  -100.00% (p=0.002 n=6)
NewLoggerConfig/with_instrumentation_attribute_set-14   0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
geomean                                                            ²               ?                      ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

                                                      │ /tmp/old.txt │              /tmp/new.txt              │
                                                      │  allocs/op   │ allocs/op   vs base                    │
NewLoggerConfig/with_no_options-14                      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewLoggerConfig/with_an_instrumentation_version-14      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewLoggerConfig/with_a_schema_url-14                    0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewLoggerConfig/with_instrumentation_attribute-14       1.000 ± 0%     0.000 ± 0%  -100.00% (p=0.002 n=6)
NewLoggerConfig/with_instrumentation_attribute_set-14   0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
geomean                                                            ²               ?                      ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

pkg: go.opentelemetry.io/otel/metric
                                                     │ /tmp/old.txt │            /tmp/new.txt            │
                                                     │    sec/op    │   sec/op     vs base               │
NewMeterConfig/with_no_options-14                       3.255n ± 2%   3.045n ± 4%   -6.42% (p=0.002 n=6)
NewMeterConfig/with_an_instrumentation_version-14       22.84n ± 6%   23.14n ± 3%        ~ (p=0.818 n=6)
NewMeterConfig/with_a_schema_url-14                     24.71n ± 5%   25.29n ± 4%        ~ (p=0.132 n=6)
NewMeterConfig/with_instrumentation_attribute-14        61.30n ± 5%   25.36n ± 7%  -58.63% (p=0.002 n=6)
NewMeterConfig/with_instrumentation_attribute_set-14    25.93n ± 5%   26.24n ± 4%        ~ (p=0.485 n=6)
geomean                                                 19.64n        16.40n       -16.49%

                                                     │ /tmp/old.txt │              /tmp/new.txt              │
                                                     │     B/op     │    B/op     vs base                    │
NewMeterConfig/with_no_options-14                      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewMeterConfig/with_an_instrumentation_version-14      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewMeterConfig/with_a_schema_url-14                    0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewMeterConfig/with_instrumentation_attribute-14       64.00 ± 0%      0.00 ± 0%  -100.00% (p=0.002 n=6)
NewMeterConfig/with_instrumentation_attribute_set-14   0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
geomean                                                           ²               ?                      ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

                                                     │ /tmp/old.txt │              /tmp/new.txt              │
                                                     │  allocs/op   │ allocs/op   vs base                    │
NewMeterConfig/with_no_options-14                      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewMeterConfig/with_an_instrumentation_version-14      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewMeterConfig/with_a_schema_url-14                    0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewMeterConfig/with_instrumentation_attribute-14       1.000 ± 0%     0.000 ± 0%  -100.00% (p=0.002 n=6)
NewMeterConfig/with_instrumentation_attribute_set-14   0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
geomean                                                           ²               ?                      ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

pkg: go.opentelemetry.io/otel/trace
                                                         │ /tmp/old.txt  │            /tmp/new.txt             │
                                                         │    sec/op     │    sec/op     vs base               │
NewTracerConfig/with_no_options-14                          2.980n ±  5%   2.948n ±  3%        ~ (p=0.240 n=6)
NewTracerConfig/with_an_instrumentation_version-14          24.44n ±  4%   23.54n ±  1%   -3.70% (p=0.002 n=6)
NewTracerConfig/with_a_schema_url-14                        24.47n ±  5%   23.95n ±  7%        ~ (p=0.180 n=6)
NewTracerConfig/with_instrumentation_attribute-14           58.39n ±  7%   25.54n ±  6%  -56.25% (p=0.002 n=6)
NewTracerConfig/with_instrumentation_attribute_set-14       25.70n ±  3%   26.55n ±  6%        ~ (p=0.310 n=6)
NewSpanStartConfig/with_no_options-14                       2.670n ±  7%   2.838n ±  6%        ~ (p=0.093 n=6)
NewSpanStartConfig/with_attributes-14                       60.65n ± 20%   51.84n ±  8%        ~ (p=0.240 n=6)
NewSpanStartConfig/with_attributes_set_multiple_times-14    115.4n ± 10%   110.0n ±  7%   -4.68% (p=0.004 n=6)
NewSpanStartConfig/with_a_timestamp-14                      18.03n ±  3%   17.77n ±  4%        ~ (p=0.937 n=6)
NewSpanStartConfig/with_links-14                            66.63n ±  8%   75.60n ±  8%  +13.47% (p=0.009 n=6)
NewSpanStartConfig/with_links_set_multiple_times-14         155.2n ±  4%   162.8n ± 18%        ~ (p=0.485 n=6)
NewSpanStartConfig/with_new_root-14                         26.59n ± 19%   23.04n ±  4%  -13.32% (p=0.004 n=6)
NewSpanStartConfig/with_span_kind-14                        24.02n ±  4%   23.72n ±  9%        ~ (p=0.589 n=6)
NewSpanEndConfig/with_no_options-14                         2.673n ± 10%   2.765n ±  7%        ~ (p=0.485 n=6)
NewSpanEndConfig/with_a_timestamp-14                        17.37n ±  9%   18.04n ±  4%        ~ (p=0.093 n=6)
NewSpanEndConfig/with_stack_trace-14                        16.70n ±  3%   16.59n ±  4%        ~ (p=0.937 n=6)
NewEventConfig/with_no_options-14                           37.14n ±  6%   36.63n ±  3%        ~ (p=0.818 n=6)
NewEventConfig/with_attributes-14                          117.15n ±  9%   98.92n ± 14%  -15.56% (p=0.009 n=6)
NewEventConfig/with_attributes_set_multiple_times-14        172.6n ±  5%   168.1n ±  9%        ~ (p=0.333 n=6)
NewEventConfig/with_a_timestamp-14                          25.41n ±  3%   26.66n ±  3%   +4.92% (p=0.002 n=6)
NewEventConfig/with_a_stacktrace-14                         51.01n ± 15%   52.45n ±  2%        ~ (p=0.093 n=6)
geomean                                                     28.82n         27.38n         -4.98%

                                                         │ /tmp/old.txt │              /tmp/new.txt              │
                                                         │     B/op     │    B/op     vs base                    │
NewTracerConfig/with_no_options-14                         0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewTracerConfig/with_an_instrumentation_version-14         0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewTracerConfig/with_a_schema_url-14                       0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewTracerConfig/with_instrumentation_attribute-14          64.00 ± 0%      0.00 ± 0%  -100.00% (p=0.002 n=6)
NewTracerConfig/with_instrumentation_attribute_set-14      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_no_options-14                      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_attributes-14                      64.00 ± 0%     64.00 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_attributes_set_multiple_times-14   192.0 ± 0%     192.0 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_a_timestamp-14                     0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_links-14                           96.00 ± 0%     96.00 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_links_set_multiple_times-14        272.0 ± 0%     272.0 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_new_root-14                        0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_span_kind-14                       0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanEndConfig/with_no_options-14                        0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanEndConfig/with_a_timestamp-14                       0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanEndConfig/with_stack_trace-14                       0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_no_options-14                          0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_attributes-14                          64.00 ± 0%     64.00 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_attributes_set_multiple_times-14       192.0 ± 0%     192.0 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_a_timestamp-14                         0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_a_stacktrace-14                        0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
geomean                                                               ²               ?                      ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

                                                         │ /tmp/old.txt │              /tmp/new.txt              │
                                                         │  allocs/op   │ allocs/op   vs base                    │
NewTracerConfig/with_no_options-14                         0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewTracerConfig/with_an_instrumentation_version-14         0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewTracerConfig/with_a_schema_url-14                       0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewTracerConfig/with_instrumentation_attribute-14          1.000 ± 0%     0.000 ± 0%  -100.00% (p=0.002 n=6)
NewTracerConfig/with_instrumentation_attribute_set-14      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_no_options-14                      0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_attributes-14                      1.000 ± 0%     1.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_attributes_set_multiple_times-14   2.000 ± 0%     2.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_a_timestamp-14                     0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_links-14                           1.000 ± 0%     1.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_links_set_multiple_times-14        2.000 ± 0%     2.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_new_root-14                        0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanStartConfig/with_span_kind-14                       0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanEndConfig/with_no_options-14                        0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanEndConfig/with_a_timestamp-14                       0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewSpanEndConfig/with_stack_trace-14                       0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_no_options-14                          0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_attributes-14                          1.000 ± 0%     1.000 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_attributes_set_multiple_times-14       2.000 ± 0%     2.000 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_a_timestamp-14                         0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
NewEventConfig/with_a_stacktrace-14                        0.000 ± 0%     0.000 ± 0%         ~ (p=1.000 n=6) ¹
geomean                                                               ²               ?                      ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean
```
</details>

---------

Co-authored-by: Robert Pająk <pellared@hotmail.com>
Co-authored-by: Flc゛ <four_leaf_clover@foxmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2025-09-11 08:47:22 -07:00
Robert Pająk
07a91dd2b0 trace,metric,log: add WithInstrumentationAttributeSet option (#7287)
Per
https://github.com/open-telemetry/opentelemetry-go/pull/7266#issuecomment-3237027300

Related to
https://github.com/open-telemetry/opentelemetry-go/issues/7217

## What

This PR adds `WithInstrumentationAttributeSet` option functions to the
`log`, `metric`, and `trace` packages as suggested in
https://github.com/open-telemetry/opentelemetry-go/pull/7266#issuecomment-3237027300.
These new functions provide a more concurrent-safe alternative to the
existing `WithInstrumentationAttributes` functions by accepting a
pre-constructed `attribute.Set` instead of variadic `attribute.KeyValue`
parameters.

## Why

As discussed in #7266, the existing `WithInstrumentationAttributes`
functions can lead to data races when used concurrently because
`attribute.NewSet()` may mutate the passed slice in-place. While the
issue was partially addressed by moving the `attribute.NewSet()` call
outside the closure, the best long-term solution is to provide an
alternative that accepts an immutable `attribute.Set`.

**Benefits:**

1. **Concurrent Safety**: Since `attribute.Set` is immutable, these
functions are inherently safe for concurrent use
2. **Performance**: Avoids repeated calls to `attribute.NewSet()` when
the same attributes are used multiple times
3. **Consistency**: Matches the existing pattern used in
`metric.WithAttributeSet()`
4. **Flexibility**: Allows users to pre-compute attribute sets and reuse
them

Deprecating `WithInstrumentationAttributes` is out of scope. See
https://github.com/open-telemetry/opentelemetry-go/pull/7287#issuecomment-3245820459.

## Benchmarks

```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/trace
cpu: 13th Gen Intel(R) Core(TM) i7-13800H
BenchmarkNewTracerConfig/with_no_options-20         	280298306	         4.268 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewTracerConfig/with_an_instrumentation_version-20         	33389427	        30.84 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewTracerConfig/with_a_schema_url-20                       	35441077	        30.46 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewTracerConfig/with_instrumentation_attribute-20          	17607649	        88.23 ns/op	      64 B/op	       1 allocs/op
BenchmarkNewTracerConfig/with_instrumentation_attribute_set-20      	38336211	        31.30 ns/op	       0 B/op	       0 allocs/op
```

```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/metric
cpu: 13th Gen Intel(R) Core(TM) i7-13800H
BenchmarkNewMeterConfig/with_no_options-20         	262998199	         4.525 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewMeterConfig/with_an_instrumentation_version-20         	40483780	        29.31 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewMeterConfig/with_a_schema_url-20                       	39162420	        30.58 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewMeterConfig/with_instrumentation_attribute-20          	19900275	        77.50 ns/op	      64 B/op	       1 allocs/op
BenchmarkNewMeterConfig/with_instrumentation_attribute_set-20      	37519020	        31.93 ns/op	       0 B/op	       0 allocs/op
```

```
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/log
cpu: 13th Gen Intel(R) Core(TM) i7-13800H
BenchmarkNewLoggerConfig/with_no_options-20         	271100760	         4.322 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewLoggerConfig/with_an_instrumentation_version-20         	38392390	        30.77 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewLoggerConfig/with_a_schema_url-20                       	39615074	        30.25 ns/op	       0 B/op	       0 allocs/op
BenchmarkNewLoggerConfig/with_instrumentation_attribute-20          	17108463	        82.51 ns/op	      64 B/op	       1 allocs/op
BenchmarkNewLoggerConfig/with_instrumentation_attribute_set-20      	37746534	        31.70 ns/op	       0 B/op	       0 allocs/op
```
2025-09-08 17:21:37 +02:00
Robert Pająk
dcf14aa937 trace,metric,log: WithInstrumentationAttributes options to merge attributes (#7300)
## What

Fix `WithInstrumentationAttributes` options in
`go.opentelemetry.io/otel/trace`, `go.opentelemetry.io/otel/metric`, and
`go.opentelemetry.io/otel/log` to properly merge attributes when passed
multiple times instead of replacing them. Attributes with duplicate keys
will use the last value passed.

## Why

Per
https://github.com/open-telemetry/opentelemetry-go/pull/7287#pullrequestreview-3181379062
and
https://github.com/open-telemetry/opentelemetry-go/pull/7287#issuecomment-3250085450

Not that this does not address
https://github.com/open-telemetry/opentelemetry-go/issues/7217. This is
left to a seperate PR to not scope creep this one. CC @axw

---------

Co-authored-by: Damien Mathieu <42@dmathieu.com>
2025-09-08 10:46:08 +02:00
Damien Mathieu
351a51f1ed Use existing schema URLs in tests (#6924)
The 1.2.0 schema URL isn't avaibable (anymore?). So link checks are
failing.
This upgrades the schema URLs to 1.21.0.

See
https://cloud-native.slack.com/archives/C02UN96HZH6/p1750664367346769

---------

Co-authored-by: Robert Pająk <pellared@hotmail.com>
2025-06-24 09:02:21 +02:00
Tyler Yahn
e8c22e6e71 Add TestSpanStartConfigAttributeMutability (#5591)
Follow up to #5567. Test the immutability of configured attributes.

Co-authored-by: Sam Xie <sam@samxie.me>
2024-07-10 12:02:01 -07:00
Damien Mathieu
83c61f521f Extend trace config benchmarks to run each option individually (#5566)
This extends the trace API new traces, span and event benchmarks into
sub benchmarks, so each option is tested individually rather than all of
them together.

```
open-telemetry/opentelemetry-go/trace›  git:(extend-trace-config-benchmarks) go test -v -bench=Config -run Benchmark
goos: darwin
goarch: arm64
pkg: go.opentelemetry.io/otel/trace
BenchmarkNewTracerConfig
BenchmarkNewTracerConfig/with_no_options
BenchmarkNewTracerConfig/with_no_options-10             558777036                2.021 ns/op           0 B/op          0 allocs/op
BenchmarkNewTracerConfig/with_an_instrumentation_version
BenchmarkNewTracerConfig/with_an_instrumentation_version-10             91590230                13.09 ns/op            0 B/op          0 allocs/op
BenchmarkNewTracerConfig/with_a_schema_url
BenchmarkNewTracerConfig/with_a_schema_url-10                           89374104                13.07 ns/op            0 B/op          0 allocs/op
BenchmarkNewSpanStartConfig
BenchmarkNewSpanStartConfig/with_no_options
BenchmarkNewSpanStartConfig/with_no_options-10                          288158400                4.187 ns/op           0 B/op          0 allocs/op
BenchmarkNewSpanStartConfig/with_attributes
BenchmarkNewSpanStartConfig/with_attributes-10                          26750458                45.20 ns/op           64 B/op          1 allocs/op
BenchmarkNewSpanStartConfig/with_attributes_set_multiple_times
BenchmarkNewSpanStartConfig/with_attributes_set_multiple_times-10       11745048               102.4 ns/op           192 B/op          2 allocs/op
BenchmarkNewSpanStartConfig/with_a_timestamp
BenchmarkNewSpanStartConfig/with_a_timestamp-10                         55898018                21.38 ns/op            0 B/op          0 allocs/op
BenchmarkNewSpanStartConfig/with_links
BenchmarkNewSpanStartConfig/with_links-10                               19950262                60.21 ns/op           96 B/op          1 allocs/op
BenchmarkNewSpanStartConfig/with_links_set_multiple_times
BenchmarkNewSpanStartConfig/with_links_set_multiple_times-10             8129803               141.6 ns/op           272 B/op          2 allocs/op
BenchmarkNewSpanStartConfig/with_new_root
BenchmarkNewSpanStartConfig/with_new_root-10                            43815543                27.46 ns/op            0 B/op          0 allocs/op
BenchmarkNewSpanStartConfig/with_span_kind
BenchmarkNewSpanStartConfig/with_span_kind-10                           43276576                27.49 ns/op            0 B/op          0 allocs/op
BenchmarkNewSpanEndConfig
BenchmarkNewSpanEndConfig/with_no_options
BenchmarkNewSpanEndConfig/with_no_options-10                            286546008                4.155 ns/op           0 B/op          0 allocs/op
BenchmarkNewSpanEndConfig/with_a_timestamp
BenchmarkNewSpanEndConfig/with_a_timestamp-10                           55678317                21.26 ns/op            0 B/op          0 allocs/op
BenchmarkNewSpanEndConfig/with_stack_trace
BenchmarkNewSpanEndConfig/with_stack_trace-10                           57029929                20.80 ns/op            0 B/op          0 allocs/op
BenchmarkNewEventConfig
BenchmarkNewEventConfig/with_no_options
BenchmarkNewEventConfig/with_no_options-10                              25571608                46.08 ns/op            0 B/op          0 allocs/op
BenchmarkNewEventConfig/with_attributes
BenchmarkNewEventConfig/with_attributes-10                              13868670                80.87 ns/op           64 B/op          1 allocs/op
BenchmarkNewEventConfig/with_attributes_set_multiple_times
BenchmarkNewEventConfig/with_attributes_set_multiple_times-10            8357275               143.2 ns/op           192 B/op          2 allocs/op
BenchmarkNewEventConfig/with_a_timestamp
BenchmarkNewEventConfig/with_a_timestamp-10                             80229771                14.77 ns/op            0 B/op          0 allocs/op
BenchmarkNewEventConfig/with_a_stacktrace
BenchmarkNewEventConfig/with_a_stacktrace-10                            21965215                54.93 ns/op            0 B/op          0 allocs/op
PASS
ok      go.opentelemetry.io/otel/trace  24.862s
```

---------

Co-authored-by: Robert Pająk <pellared@hotmail.com>
2024-07-08 16:14:15 +02:00
Robert Pająk
7dea232a46 [chore] Simplify the license header (#4987) 2024-02-29 07:05:28 +01:00
Charlie Le
1b55281859 docs(typos): Run codespell to fix typos (#3980)
* docs(typos): Run codespell to fix typos

There were a lot of typos through the repository, so I ran
[codespell][], a tool for automatically fixing typos, to fix them.

```console
make codespell
```

There's already a tool called [misspell][] that's supposed to take care
of this, but misspell hasn't been updated for 6 years, and it doesn't
seem to be catching any of the typos that codespell can.

[codespell]: https://github.com/codespell-project/codespell
[misspell]: https://github.com/client9/misspell

* Revert and ignore spelling for Consequentially

* Add GH workflow for codespell

* Revert GH Workflow and Makefile for codespell

Per @pellared, since there's no instructions for setting up codespell,
it was suggested that the changes for setting up a workflow and section
in Makefile include instructions for setting up codespell as well.

* Revert spelling on consequently

---------

Co-authored-by: Chester Cheung <cheung.zhy.csu@gmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2023-04-11 17:28:13 -07:00
Tyler Yahn
99ec432679 Accept scope attributes during Tracer creation (#3739)
* Accept scope attributes during Tracer creation

The OTel specification requires the instrumentation attributes are
accepted by the API for the Tracer. This adds a TracerOption to satisfy
that requirement.
2023-02-21 13:31:37 -06:00
Aaron Clawson
7aba25d651 Revert Adding attributes to the instrumentation scope.
Revert "Add instrumentation scope attributes (#3131)" (#3154)

This reverts commit 0078faeb0e.

Revert "Add WithScopeAttributes MeterOption to metric API package (#3132)"

This reverts commit 81a9bab814.
2022-09-09 09:06:58 -05:00
Tyler Yahn
0078faeb0e Add instrumentation scope attributes (#3131)
* Add WithScopeAttributes TracerOption to trace API

* Add Attributes field to instrumentation Scope

* Use scope attributes for new Tracer

* Fix stdouttrace expected test output

* Allow unexported Set fields in sdk/trace test

* Export instrumentation scope attrs in OTLP

* Add changes to the changelog

* Fix imports with make lint

* Add unit tests for WithScopeAttributes

* Fix English in Scope documentation
2022-08-31 15:19:50 -07:00
Tyler Yahn
bd817df68c Change Options to accept type not pointer (#2558)
* Change trace options to accept type not pointer

Add benchmark to show allocation improvement.

* Update CONTRIBUTING.md guidelines

* Update all Option iface

* Fix grammar in CONTRIBUTING
2022-02-01 15:51:23 -06:00
Tyler Yahn
1f527a52ab Update trace API config creation functions (#2212)
* Update trace API config creation funcs

Follow our style guide and return the config struct instead of pointers.

* Update changelog with changes

Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
2021-09-01 15:44:13 -04:00
Bhautik Pipaliya
dfc866bd03 Support capturing stack trace (#2163)
* capturing stack trace support

* added changelog entry

* remove error package stack trace support

* modified unnecessary changes to go.sum files

* added EventOption to enable stack trace capturing

* added tests

* added runtime.Stack method and minor changes

* minor changes

* remove redundant line

* fix gihub check on linter

* fix tests

* fix tests

* Update sdk/trace/trace_test.go

Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>

* Update sdk/trace/trace_test.go

Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>

Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
2021-08-13 17:44:18 -04:00
Tigran Najaryan
bd935866f4 Add schema URL support to Tracer (#1889)
This adds support for schema URL to the Tracer according to the specification:
https://github.com/open-telemetry/opentelemetry-specification/pull/1666
(Link to replaced by the link to the spec after that PR is merged)

For the future: once the proto is updated we will need to populate the
schema_url field in the messages.
2021-05-27 15:22:38 -04:00
Aaron Clawson
c1f460e097 Update API configs. (#1921)
* Added Reason to Contributing and Updated TracerConfig

* PR comment fixup

* Changed how span Options work.

* Fix Markdown linting

* Added meter configs.

* Fixes from PR comments

* fix for missing instrument

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2021-05-27 07:53:56 -07:00
ET
3684191338 Remove WithRecord() option from trace.SpanOption when starting a span (#1660)
* Remove `WithRecord()` option from SpanConfig options

This brings the trace API into conformance with the specification.

* Add entry to CHANGELOG

Fixes #192

* Updated CHANGELOG with PR#

* Cleaned up CHANGELOG notes

* fixup! Merge remote-tracking branch 'upstream/main' into remove-with-record

* Use new spanContext API to set traceflags, tracestate

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
2021-03-09 09:45:09 -08:00
Anthony Mirabella
e88a091a72 Make SpanContext Immutable (#1573)
* Make SpanContext Immutable

* Adds NewSpanContext() constructor and SpanContextConfig{} struct for
constructing a new SpanContext when all fields are known
* Adds With<field>() methods to SpanContext for deriving a SpanContext
with a single field changed.
* Updates all uses of SpanContext to use the new API

Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>

* Update CHANGELOG.md

Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>

* Add tests for new SpanContext constructor and derivation

Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>

* Address PR feedback

* Fix new uses of SpanContext from main
2021-03-09 08:17:29 -08:00
Punya Biswal
ecf65d7968 Rename otel/label -> otel/attribute (#1541)
* Rename otel/label -> otel/attr

Leave the imported name alone, to avoid a large diff and conflicts

* Better import comment

* Update CHANGELOG.md

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>

* otel/attr -> otel/attribute

* Missed the changelog entry

* Get rid of import renaming

* Merge remaining conflicts

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
2021-02-18 12:59:37 -05:00
Krzesimir Nowak
3268501910 Move tracing code to trace package (#1307)
* Move tracing code to trace package

* Update changelog
2020-11-06 17:13:31 -05:00