Skip to content

feat!: Remove enableTracing #15078

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

Merged
merged 1 commit into from
Jan 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All @@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All @@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All @@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All @@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All @@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down Expand Up @@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand Down Expand Up @@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down Expand Up @@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down Expand Up @@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down Expand Up @@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down Expand Up @@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All @@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand Down Expand Up @@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand Down Expand Up @@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand Down Expand Up @@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand Down Expand Up @@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand Down Expand Up @@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand Down Expand Up @@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand Down Expand Up @@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand Down Expand Up @@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand Down Expand Up @@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading
Loading