Skip to content

Commit 5481af4

Browse files
committed
fix: respect sampled flag in Span Processors, fix associated tests
1 parent 3b9cd16 commit 5481af4

File tree

4 files changed

+44
-5
lines changed

4 files changed

+44
-5
lines changed

packages/opentelemetry-tracing/src/export/BatchSpanProcessorBase.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { context } from '@opentelemetry/api';
17+
import { context, TraceFlags } from '@opentelemetry/api';
1818
import {
1919
ExportResultCode,
2020
getEnv,
@@ -77,6 +77,11 @@ export abstract class BatchSpanProcessorBase<T extends BufferConfig> implements
7777
if (this._isShutdown) {
7878
return;
7979
}
80+
81+
if (span.spanContext().traceFlags !== TraceFlags.SAMPLED) {
82+
return;
83+
}
84+
8085
this._addToBuffer(span);
8186
}
8287

packages/opentelemetry-tracing/src/export/SimpleSpanProcessor.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { context } from '@opentelemetry/api';
17+
import { context, TraceFlags } from '@opentelemetry/api';
1818
import {
1919
ExportResultCode,
2020
globalErrorHandler,
@@ -50,6 +50,10 @@ export class SimpleSpanProcessor implements SpanProcessor {
5050
return;
5151
}
5252

53+
if (span.spanContext().traceFlags !== TraceFlags.SAMPLED) {
54+
return;
55+
}
56+
5357
// prevent downstream exporter calls from generating spans
5458
context.with(suppressTracing(context.active()), () => {
5559
this._exporter.export([span], result => {

packages/opentelemetry-tracing/test/common/export/BatchSpanProcessorBase.test.ts

+24
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import { diag } from '@opentelemetry/api';
1818
import {
19+
AlwaysOffSampler,
1920
AlwaysOnSampler,
2021
ExportResultCode,
2122
loggingErrorHandler,
@@ -38,6 +39,15 @@ function createSampledSpan(spanName: string): Span {
3839
return span as Span;
3940
}
4041

42+
function createUnsampledSpan(spanName: string): Span {
43+
const tracer = new BasicTracerProvider({
44+
sampler: new AlwaysOffSampler(),
45+
}).getTracer('default');
46+
const span = tracer.startSpan(spanName);
47+
span.end();
48+
return span as Span;
49+
}
50+
4151
class BatchSpanProcessor extends BatchSpanProcessorBase<BufferConfig> {
4252
onInit() {}
4353
onShutdown() {}
@@ -141,6 +151,20 @@ describe('BatchSpanProcessorBase', () => {
141151
assert.strictEqual(exporter.getFinishedSpans().length, 0);
142152
});
143153

154+
it('should not export unsampled spans', async () => {
155+
const processor = new BatchSpanProcessor(exporter, defaultBufferConfig);
156+
const spy: sinon.SinonSpy = sinon.spy(exporter, 'export') as any;
157+
158+
const span = createUnsampledSpan(`${name}_0`);
159+
160+
processor.onEnd(span);
161+
162+
await processor.forceFlush();
163+
assert.strictEqual(processor['_finishedSpans'].length, 0);
164+
assert.strictEqual(exporter.getFinishedSpans().length, 0);
165+
assert.strictEqual(spy.args.length, 0);
166+
});
167+
144168
it('should export the sampled spans with buffer size reached', done => {
145169
const clock = sinon.useFakeTimers();
146170
const processor = new BatchSpanProcessor(exporter, defaultBufferConfig);

packages/opentelemetry-tracing/test/common/export/SimpleSpanProcessor.test.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,14 @@ import { TestStackContextManager } from './TestStackContextManager';
3838
import { TestTracingSpanExporter } from './TestTracingSpanExporter';
3939

4040
describe('SimpleSpanProcessor', () => {
41-
const provider = new BasicTracerProvider();
42-
const exporter = new InMemorySpanExporter();
41+
let provider: BasicTracerProvider;
42+
let exporter: InMemorySpanExporter;
43+
44+
45+
beforeEach(() => {
46+
provider = new BasicTracerProvider();
47+
exporter = new InMemorySpanExporter();
48+
});
4349

4450
describe('constructor', () => {
4551
it('should create a SimpleSpanProcessor instance', () => {
@@ -103,7 +109,7 @@ describe('SimpleSpanProcessor', () => {
103109
const spanContext: SpanContext = {
104110
traceId: 'a3cda95b652f4a1592b449d5929fda1b',
105111
spanId: '5e0c63257de34c92',
106-
traceFlags: TraceFlags.NONE,
112+
traceFlags: TraceFlags.SAMPLED,
107113
};
108114
const span = new Span(
109115
provider.getTracer('default'),

0 commit comments

Comments
 (0)