Skip to content

Commit d276fed

Browse files
committed
fix: add while flushing shouldn't send buffer again
1 parent bd32039 commit d276fed

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

packages/node-sdk/src/batch-buffer.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,11 @@ export default class BatchBuffer<T> {
6969
return;
7070
}
7171

72+
const flushingBuffer = this.buffer;
73+
this.buffer = [];
74+
7275
try {
73-
await this.flushHandler(this.buffer);
76+
await this.flushHandler(flushingBuffer);
7477

7578
this.logger?.info("flushed buffered items", {
7679
count: this.buffer.length,
@@ -81,7 +84,5 @@ export default class BatchBuffer<T> {
8184
count: this.buffer.length,
8285
});
8386
}
84-
85-
this.buffer = [];
8687
}
8788
}

packages/node-sdk/test/batch-buffer.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,22 @@ describe("BatchBuffer", () => {
147147
);
148148
});
149149

150+
it("calling flush simultaneously should only flush data once", async () => {
151+
let itemsFlushed = 0;
152+
const buffer = new BatchBuffer({
153+
flushHandler: async (items) => {
154+
itemsFlushed += items.length;
155+
await new Promise((resolve) => setTimeout(resolve, 100));
156+
mockFlushHandler();
157+
},
158+
logger: mockLogger,
159+
});
160+
161+
await buffer.add("item1");
162+
await Promise.all([buffer.flush(), buffer.flush()]);
163+
expect(itemsFlushed).toBe(1);
164+
});
165+
150166
it("should flush buffer", async () => {
151167
const buffer = new BatchBuffer({
152168
flushHandler: mockFlushHandler,

0 commit comments

Comments
 (0)