DataDog / dd-sdk-android

Datadog SDK for Android (Compatible with Kotlin and Java)
Apache License 2.0
146 stars 59 forks source link

RUM-4371 Extract OpenTelemetry support sdk into a dedicated module #2021

Closed mariusc83 closed 3 months ago

mariusc83 commented 4 months ago

What does this PR do?

Following previous discussions and plans in this PR we are performing the following:

  1. We are extracting the OpenTelemetry support SDK code into a separated module: dd-sdk-android-trace-otel
  2. The ported code from dd-java-agent project containing the CoreTracer code will remain as part of the dd-sdk-android-trace module as this is considered the core tracing module. The idea behind this decision is to have later a better split of tracing API implementations support into dedicated module and all to delegate to the CoreTracer into the dd-sdk-android-trace module.
  3. The newly created dd-sdk-android-trace-otel module will not require desugaring in its .aar metadata anymore and we added a safety mechanism in place in case our clients will omit the docs and use this module without desugaring

Motivation

What inspired you to submit this pull request?

Additional Notes

  1. Please have in mind that the dd-java-agent code containing the CoreTracer logic is still using the java.util.function package and therefor will require desugaring for Android 23 and below. By discussing with the team we decided that it is fine for this code to stay in the dd-sdk-android-trace module as for now it will only be used by the dd-sdk-android-trace-otel module which will require desugaring in the release docs. In any case this code will be stripped out by R8 in the clients apps if it is not used.
  2. Once this branch will be merged in develop and dogfooding will start the plan is to clean more the CoreTracer code and see if we can actually make it compatible for Android 23 and below by removing all the java.util.function logic. This is highly doubtable as I already performed some research and this turns out to be quite complicated.
  3. I could not add the unit tests for the ContextStorage.addWrapper functionality as this is weirdly initialized in the OpenTelemetry code (when the class is loaded) and these tests are too flaky as there can be already the class loaded before the test started due to some weird Junit behaviour.

Review checklist (to be filled by reviewers)

codecov-commenter commented 3 months ago

Codecov Report

Attention: Patch coverage is 89.61039% with 8 lines in your changes are missing coverage. Please review.

Project coverage is 63.62%. Comparing base (a0e5b5f) to head (b49d5b0). Report is 2 commits behind head on feature/otel-support.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## feature/otel-support #2021 +/- ## ======================================================== - Coverage 63.92% 63.62% -0.31% ======================================================== Files 752 751 -1 Lines 28382 28359 -23 Branches 4686 4682 -4 ======================================================== - Hits 18143 18041 -102 - Misses 9036 9119 +83 + Partials 1203 1199 -4 ``` | [Files](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog) | Coverage Δ | | |---|---|---| | [...elemetry/context/propagation/TraceStateHelper.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Fcontext%2Fpropagation%2FTraceStateHelper.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvY29udGV4dC9wcm9wYWdhdGlvbi9UcmFjZVN0YXRlSGVscGVyLmphdmE=) | `0.00% <ø> (ø)` | | | [...m/datadog/opentelemetry/trace/OtelConventions.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Ftrace%2FOtelConventions.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvdHJhY2UvT3RlbENvbnZlbnRpb25zLmphdmE=) | `26.58% <ø> (ø)` | | | [...adog/opentelemetry/trace/OtelExtractedContext.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Ftrace%2FOtelExtractedContext.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvdHJhY2UvT3RlbEV4dHJhY3RlZENvbnRleHQuamF2YQ==) | `0.00% <ø> (ø)` | | | [...java/com/datadog/opentelemetry/trace/OtelSpan.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Ftrace%2FOtelSpan.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvdHJhY2UvT3RlbFNwYW4uamF2YQ==) | `59.38% <ø> (ø)` | | | [...m/datadog/opentelemetry/trace/OtelSpanBuilder.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Ftrace%2FOtelSpanBuilder.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvdHJhY2UvT3RlbFNwYW5CdWlsZGVyLmphdmE=) | `24.59% <ø> (ø)` | | | [...m/datadog/opentelemetry/trace/OtelSpanContext.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Ftrace%2FOtelSpanContext.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvdHJhY2UvT3RlbFNwYW5Db250ZXh0LmphdmE=) | `58.33% <ø> (ø)` | | | [.../com/datadog/opentelemetry/trace/OtelSpanLink.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Ftrace%2FOtelSpanLink.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvdHJhY2UvT3RlbFNwYW5MaW5rLmphdmE=) | `0.00% <ø> (ø)` | | | [...va/com/datadog/opentelemetry/trace/OtelTracer.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Ftrace%2FOtelTracer.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvdHJhY2UvT3RlbFRyYWNlci5qYXZh) | `100.00% <ø> (ø)` | | | [...datadog/opentelemetry/trace/OtelTracerBuilder.java](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fjava%2Fcom%2Fdatadog%2Fopentelemetry%2Ftrace%2FOtelTracerBuilder.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9qYXZhL2NvbS9kYXRhZG9nL29wZW50ZWxlbWV0cnkvdHJhY2UvT3RlbFRyYWNlckJ1aWxkZXIuamF2YQ==) | `87.50% <ø> (ø)` | | | [...datadog/android/trace/opentelemetry/OtelContext.kt](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree&filepath=features%2Fdd-sdk-android-trace-otel%2Fsrc%2Fmain%2Fkotlin%2Fcom%2Fdatadog%2Fandroid%2Ftrace%2Fopentelemetry%2FOtelContext.kt&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog#diff-ZmVhdHVyZXMvZGQtc2RrLWFuZHJvaWQtdHJhY2Utb3RlbC9zcmMvbWFpbi9rb3RsaW4vY29tL2RhdGFkb2cvYW5kcm9pZC90cmFjZS9vcGVudGVsZW1ldHJ5L090ZWxDb250ZXh0Lmt0) | `90.00% <ø> (ø)` | | | ... and [11 more](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog) | | ... and [40 files with indirect coverage changes](https://app.codecov.io/gh/DataDog/dd-sdk-android/pull/2021/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=DataDog)
mariusc83 commented 3 months ago

Docs were flagged to review due to features/dd-sdk-android-trace-otel/README.md. Do you intend to add more content here? Let me know, and we can take a look!

@brett0000FF yes we have a special task for docs in the README.md + docs in the public page.