Skip to content

Commit 4c33205

Browse files
authored
fix(spanner): clear metrics tracers after operation completion (#8172)
Allow MetricsTracerFactory.clearCurrentTracer to accept the already-extracted operation request id stored on MetricsTracer. This ensures completed operations remove their tracer entries instead of retaining them until the periodic cleanup threshold.
1 parent ddb0db6 commit 4c33205

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

handwritten/spanner/src/metrics/metrics-tracer-factory.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,8 @@ export class MetricsTracerFactory {
305305
* @param requestId The request id of the gRPC call set under 'x-goog-spanner-request-id'.
306306
*/
307307
public clearCurrentTracer(requestId: string) {
308-
const operationRequest = this._extractOperationRequest(requestId);
308+
const operationRequest =
309+
this._extractOperationRequest(requestId) || requestId;
309310
if (!this._currentOperationTracers.has(operationRequest)) {
310311
return;
311312
}

handwritten/spanner/test/metrics/metrics-tracer-factory.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,22 @@ describe('MetricsTracerFactory', () => {
158158
assert.ok(tracer);
159159
});
160160

161+
it('should clear a MetricsTracer using an extracted operation request id', () => {
162+
const factory = MetricsTracerFactory.getInstance('project-id');
163+
factory!.createMetricsTracer(
164+
'some-method',
165+
'method-name',
166+
'1.1a2bc3d4.1.1.1.1',
167+
);
168+
169+
assert.strictEqual((factory as any)._currentOperationTracers.size, 1);
170+
171+
factory!.clearCurrentTracer('1.1a2bc3d4.1.1.1');
172+
173+
assert.strictEqual((factory as any)._currentOperationTracers.size, 0);
174+
assert.strictEqual((factory as any)._currentOperationLastUpdatedMs.size, 0);
175+
});
176+
161177
it('should correctly set default attributes', () => {
162178
const factory = MetricsTracerFactory.getInstance('project-id');
163179
const tracer = factory!.createMetricsTracer(

0 commit comments

Comments
 (0)