* omit metrics artifacts (alpha) from the bill of materials (bom)
* Hack the version number for maven publications that end in -metrics.
* Remove the failed attempt.
The Zipkin exporter specification for error handling has slightly changed regarding the removal
of the otel.status_description tag in favour for the error tag
* Add custom proto marshaler to avoid unnecessary allocation
Some of the differences with the generated code:
1. Avoid builders to construct the marshalers;
2. Use less objects for Attributes because of the way `oneof` generated code is implemented; Also proto files supports arrays of any combination which is not the case for us.
3. Take advantage on the fact that data we know are immutable, no need to wrap to unmodifiable list/maps etc;
Unfortunately we cannot get the whole performance back because we need to write a custom Marshaler for grpc (which is possible but try to limit the PR size).
As the numbers show we have ~25% improvement in CPU and ~15% in memory with this PR. With a custom marshaler we can get anoter 7% CPU and 7% memory.
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
* Always send the message information even if empty values
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
* Test for error status
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
* Test for valid ParentSpanId
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
* Fix order in status fields
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
* Address feedback from code review
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
* Avoid one extra object BytesString, use byte array always
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
* Fix things after PR that moved proto conversions
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
* add a section on class member ordering, since it's not covered in the google style guide
* add an item about toString methods
* add a note about final fields coming before non-final
* Add rationale and description of the release and versioning strategy.
* typo fix
* alternate version of the versioning strategy that tags the version rather than the artifact.
* add context for clarity
* Update docs/rationale.md
Co-authored-by: Nikita Salnikov-Tarnovski <gnikem@gmail.com>
* add some additional flavor about internals and mention the bom in an example
Co-authored-by: Nikita Salnikov-Tarnovski <gnikem@gmail.com>
This ensure clear separation of functionality. This PR does not change any functionality, it just restructures the code to separate global functionality from
the Default implementation. Also helps to ensure that Global initialization does not happen by mistake when working only with the default implementation.
Also it helps with methods like `OpenTelemetry.get()` and `OpenTelemetry.set()` to understand they are interacting with global instance
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
This ensure clear separation of functionality. This PR does not change any functionality, it just restructures the code to separate global functionality from
the Default implementation. Also helps to ensure that Global initialization does not happen by mistake when working only with the default implementation.
Also it helps with methods like `OpenTelemetry.get()` and `OpenTelemetry.set()` to understand they are interacting with global instance
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
The code already existed as part of the instrument, but it was extracted in a separate concept,
and all Sync/Async instruments look very similar: Descriptor + Accumulator.
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>