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

chore: Bump otel 2.x #15518

Draft
wants to merge 11 commits into
base: develop
Choose a base branch
from
Draft

chore: Bump otel 2.x #15518

wants to merge 11 commits into from

Conversation

andreiborza
Copy link
Member

@andreiborza andreiborza commented Feb 26, 2025

This is a rough draft to bump Otel to the first pre-release version of 2.0.0. Tests are failing partly due to api changes and removed exports. I wasn't sure how to best tackle these and lack the knowledge to migrate some of these.

Followed migration guide: https://github.com/trentm/opentelemetry-js/blob/tm-sdk2-migration-docs-take2/doc/upgrade-to-2.x.md

Things to note:

  • BasicTracerProvider no longer exports a register function to register a propagator and context manager. I replaced BasicTracerProvider with NodeTracerProvider of @opentelemetry/sdk-trace-node
    • Note: We originally had the node trace provider. This PR switched to the base provider. Seems like we can use the node one but we should check whether in the meantime it received some additional unwanted features.
  • BasicTracerProvider no longer exports an (already marked private previously) activeSpanProcessor with no provided alternatives. I opted to call forceFlush on the provider instead which maps through the span processors and flushes them.
  • VERSION is no longer exported by @opentelemetry/core, for now I hardcoded the version where it was needed to pass into instrumentations. Maybe we should use our own versions here?
  • feat(js): Stop using provider.addSpanProcessor() sentry-docs#13011 - BasicTracerProvider#addSpanProcessor(...) was removed. We use the NodeTracerProvider#addSpanProcessor in the docs for combining existing otel setups with sentry: https://docs.sentry.io/platforms/javascript/guides/node/opentelemetry/custom-setup/

Copy link
Contributor

github-actions bot commented Feb 26, 2025

size-limit report 📦

Path Size % Change Change
@sentry/browser 23.16 KB +0.03% +7 B 🔺
@sentry/browser - with treeshaking flags 22.95 KB +0.03% +6 B 🔺
@sentry/browser (incl. Tracing) 36.22 KB +0.03% +8 B 🔺
@sentry/browser (incl. Tracing, Replay) 73.39 KB +0.01% +3 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 66.81 KB +0.01% +2 B 🔺
@sentry/browser (incl. Tracing, Replay with Canvas) 78.02 KB +0.02% +10 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback) 90.58 KB +0.02% +12 B 🔺
@sentry/browser (incl. Feedback) 40.31 KB +0.02% +8 B 🔺
@sentry/browser (incl. sendFeedback) 27.79 KB +0.03% +7 B 🔺
@sentry/browser (incl. FeedbackAsync) 32.58 KB +0.03% +9 B 🔺
@sentry/react 24.98 KB +0.04% +10 B 🔺
@sentry/react (incl. Tracing) 38.11 KB +0.03% +8 B 🔺
@sentry/vue 27.4 KB +0.03% +7 B 🔺
@sentry/vue (incl. Tracing) 37.91 KB +0.03% +9 B 🔺
@sentry/svelte 23.19 KB +0.03% +7 B 🔺
CDN Bundle 24.37 KB +0.04% +9 B 🔺
CDN Bundle (incl. Tracing) 36.26 KB +0.02% +6 B 🔺
CDN Bundle (incl. Tracing, Replay) 71.28 KB +0.01% +3 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) 76.45 KB +0.01% +4 B 🔺
CDN Bundle - uncompressed 71.21 KB +0.03% +15 B 🔺
CDN Bundle (incl. Tracing) - uncompressed 107.58 KB +0.02% +15 B 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed 218.84 KB +0.01% +15 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 231.41 KB +0.01% +15 B 🔺
@sentry/nextjs (client) 39.39 KB +0.02% +6 B 🔺
@sentry/sveltekit (client) 36.63 KB +0.02% +7 B 🔺
@sentry/node 127.7 KB -10.26% -14.58 KB 🔽
@sentry/node - without tracing 95.54 KB -0.18% -169 B 🔽
@sentry/aws-serverless 105.62 KB -12.03% -14.44 KB 🔽

View base workflow run

Copy link

codecov bot commented Feb 26, 2025

❌ 18 Tests Failed:

Tests completed Failed Passed Skipped
4603 18 4585 322
View the top 3 failed test(s) by shortest run time
createTransactionForOtelSpan works with a http.server span
Stack Traces | 0.007s run time
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 3
+ Received  + 0

@@ -3,13 +3,10 @@
      "otel": Object {
        "resource": Object {
          "service.name": "opentelemetry-test",
          "service.namespace": "sentry",
          "service.version": "9.2.0",
-         "telemetry.sdk.language": "nodejs",
-         "telemetry.sdk.name": "opentelemetry",
-         "telemetry.sdk.version": Any<String>,
        },
      },
      "response": Object {
        "status_code": 200,
      },
    at Object.<anonymous> (.../opentelemetry/test/spanExporter.test.ts:73:19)
    at Promise.then.completed (.../jest-circus/build/utils.js:391:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../jest-circus/build/utils.js:316:10)
    at _callCircusTest (.../jest-circus/build/run.js:218:40)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at _runTest (.../jest-circus/build/run.js:155:3)
    at _runTestsForDescribeBlock (.../jest-circus/build/run.js:66:9)
    at _runTestsForDescribeBlock (.../jest-circus/build/run.js:60:9)
    at run (.../jest-circus/build/run.js:25:3)
test/integration/transactions.test.ts > Integration | Transactions > cleans up spans that are not flushed for over 5 mins
Stack Traces | 0.022s run time
Error: No exporter found, aborting test...
 ❯ test/integration/transactions.test.ts:578:13
setupEventContextTrace works with active span
Stack Traces | 0.028s run time
Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)

Expected: ObjectContaining {"contexts": ObjectContaining {"trace": {"parent_span_id": "152ac9183fd9a3bd", "span_id": "09cb02840a88052d", "trace_id": "725d8ae3b78487f2c571ae01dcf2215c"}}}, ObjectContaining {"event_id": Any<String>, "originalException": [Error: test], "syntheticException": Any<Error>}
Received: {"breadcrumbs": undefined, "contexts": {"trace": {"span_id": "09cb02840a88052d", "trace_id": "725d8ae3b78487f2c571ae01dcf2215c"}}, "environment": "production", "event_id": "42e3f6afc3e84325bf0a4209c2deb9a5", "exception": {"values": [{"type": "Error", "value": "test"}]}, "sdkProcessingMetadata": {"dynamicSamplingContext": {"environment": "production", "public_key": "username", "sample_rand": "0.7154596665275146", "sample_rate": "1", "sampled": "true", "trace_id": "725d8ae3b78487f2c571ae01dcf2215c", "transaction": "outer"}}, "timestamp": 1740682962.238}, {"event_id": "42e3f6afc3e84325bf0a4209c2deb9a5", "originalException": [Error: test], "syntheticException": [Error: Sentry syntheticException]}

Number of calls: 1
    at Object.<anonymous> (.../test/utils/setupEventContextTrace.test.ts:91:24)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Copy link
Member

@AbhiPrasad AbhiPrasad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like the unit test failures are mainly due to imports that have changed (for ex. because they are now types instead of classes) or fields that no longer exist on certain objects.

The pattern I see in E2E tests, and that is in a couple of unit tests, is that parent_span_id seems to not be set anymore. I think this is because of this change: open-telemetry/opentelemetry-js#5450.

span.parentSpanId -> span.parentSpanContext?.spanId

@@ -56,7 +55,7 @@ export class SentryNodeFetchInstrumentation extends InstrumentationBase<SentryNo
private _propagationDecisionMap: LRUMap<string, boolean>;

public constructor(config: SentryNodeFetchInstrumentationOptions = {}) {
super('@sentry/instrumentation-node-fetch', VERSION, config);
super('@sentry/instrumentation-node-fetch', '2.0.0-dev.0', config);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

considering this is using @sentry/X I think it's reasonable enough to set our own SDK version here.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea was thinking the same. Will update.

@timfish
Copy link
Collaborator

timfish commented Mar 3, 2025

Would this update be considered a breaking change? I guess this could break compatibility with all otel integrations customers might be using?

@andreiborza andreiborza self-assigned this Mar 17, 2025
@andreiborza andreiborza changed the title chore: Bump otel 2.0.0 chore: Bump otel 2.x Mar 17, 2025
mydea added a commit that referenced this pull request Mar 17, 2025
…15702)

Fixes part of #15518

We have been using the deprecated `new Span()` syntax for tests in OTEL.

This PR changes this to instead use a proper tracer, which is also
supported in v2 of otel.
@andreiborza andreiborza force-pushed the ab/otel-2.0.0 branch 5 times, most recently from 86ef801 to dd500bd Compare March 19, 2025 05:32
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.

3 participants