From 06363e0398016006134bbd9ad92d224a67269d88 Mon Sep 17 00:00:00 2001 From: Rahul Yadav Date: Tue, 5 May 2026 21:10:50 +0530 Subject: [PATCH] fix(spanner): clear metrics tracers after operation completion 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. --- .../src/metrics/metrics-tracer-factory.ts | 3 ++- .../test/metrics/metrics-tracer-factory.ts | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/handwritten/spanner/src/metrics/metrics-tracer-factory.ts b/handwritten/spanner/src/metrics/metrics-tracer-factory.ts index d928c6fa8322..24eba573f3c7 100644 --- a/handwritten/spanner/src/metrics/metrics-tracer-factory.ts +++ b/handwritten/spanner/src/metrics/metrics-tracer-factory.ts @@ -305,7 +305,8 @@ export class MetricsTracerFactory { * @param requestId The request id of the gRPC call set under 'x-goog-spanner-request-id'. */ public clearCurrentTracer(requestId: string) { - const operationRequest = this._extractOperationRequest(requestId); + const operationRequest = + this._extractOperationRequest(requestId) || requestId; if (!this._currentOperationTracers.has(operationRequest)) { return; } diff --git a/handwritten/spanner/test/metrics/metrics-tracer-factory.ts b/handwritten/spanner/test/metrics/metrics-tracer-factory.ts index c5db377aeacb..78dc1d27a132 100644 --- a/handwritten/spanner/test/metrics/metrics-tracer-factory.ts +++ b/handwritten/spanner/test/metrics/metrics-tracer-factory.ts @@ -158,6 +158,22 @@ describe('MetricsTracerFactory', () => { assert.ok(tracer); }); + it('should clear a MetricsTracer using an extracted operation request id', () => { + const factory = MetricsTracerFactory.getInstance('project-id'); + factory!.createMetricsTracer( + 'some-method', + 'method-name', + '1.1a2bc3d4.1.1.1.1', + ); + + assert.strictEqual((factory as any)._currentOperationTracers.size, 1); + + factory!.clearCurrentTracer('1.1a2bc3d4.1.1.1'); + + assert.strictEqual((factory as any)._currentOperationTracers.size, 0); + assert.strictEqual((factory as any)._currentOperationLastUpdatedMs.size, 0); + }); + it('should correctly set default attributes', () => { const factory = MetricsTracerFactory.getInstance('project-id'); const tracer = factory!.createMetricsTracer(