Skip to content

Commit e3ef3f2

Browse files
authored
fix(core): Ensure metrics past MAX_METRIC_BUFFER_SIZE are not swallowed (#18212)
Looks like we swallowed the metric that triggers a flush when MAX_METRIC_BUFFER_SIZE is surpassed. Test demonstrating issue: [f0737fa](f0737fa) Fix: [1a4e02a](1a4e02a) Related logs pr: #18207
1 parent e403d89 commit e3ef3f2

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

packages/core/src/metrics/internal.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,16 @@ function setMetricAttribute(
8888
*/
8989
export function _INTERNAL_captureSerializedMetric(client: Client, serializedMetric: SerializedMetric): void {
9090
const bufferMap = _getBufferMap();
91-
9291
const metricBuffer = _INTERNAL_getMetricBuffer(client);
92+
9393
if (metricBuffer === undefined) {
9494
bufferMap.set(client, [serializedMetric]);
9595
} else {
96-
bufferMap.set(client, [...metricBuffer, serializedMetric]);
9796
if (metricBuffer.length >= MAX_METRIC_BUFFER_SIZE) {
9897
_INTERNAL_flushMetricsBuffer(client, metricBuffer);
98+
bufferMap.set(client, [serializedMetric]);
99+
} else {
100+
bufferMap.set(client, [...metricBuffer, serializedMetric]);
99101
}
100102
}
101103
}

packages/core/test/lib/metrics/internal.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,10 @@ describe('_INTERNAL_captureMetric', () => {
256256
// Add one more to trigger flush
257257
_INTERNAL_captureMetric({ type: 'counter', name: 'trigger.flush', value: 999 }, { scope });
258258

259-
expect(_INTERNAL_getMetricBuffer(client)).toEqual([]);
259+
// After flushing the 1000 metrics, the new metric starts a fresh buffer with 1 item
260+
const buffer = _INTERNAL_getMetricBuffer(client);
261+
expect(buffer).toHaveLength(1);
262+
expect(buffer?.[0]?.name).toBe('trigger.flush');
260263
});
261264

262265
it('does not flush metrics buffer when it is empty', () => {

0 commit comments

Comments
 (0)