From d276fedf5683e1b84e360f20a99f8dca6ab876dc Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Mon, 17 Mar 2025 19:55:48 +0100 Subject: [PATCH 1/3] fix: `add` while flushing shouldn't send buffer again --- packages/node-sdk/src/batch-buffer.ts | 7 ++++--- packages/node-sdk/test/batch-buffer.test.ts | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/node-sdk/src/batch-buffer.ts b/packages/node-sdk/src/batch-buffer.ts index 2407bc9d..57934f9b 100644 --- a/packages/node-sdk/src/batch-buffer.ts +++ b/packages/node-sdk/src/batch-buffer.ts @@ -69,8 +69,11 @@ export default class BatchBuffer { return; } + const flushingBuffer = this.buffer; + this.buffer = []; + try { - await this.flushHandler(this.buffer); + await this.flushHandler(flushingBuffer); this.logger?.info("flushed buffered items", { count: this.buffer.length, @@ -81,7 +84,5 @@ export default class BatchBuffer { count: this.buffer.length, }); } - - this.buffer = []; } } diff --git a/packages/node-sdk/test/batch-buffer.test.ts b/packages/node-sdk/test/batch-buffer.test.ts index d6cd2461..e02100ff 100644 --- a/packages/node-sdk/test/batch-buffer.test.ts +++ b/packages/node-sdk/test/batch-buffer.test.ts @@ -147,6 +147,22 @@ describe("BatchBuffer", () => { ); }); + it("calling flush simultaneously should only flush data once", async () => { + let itemsFlushed = 0; + const buffer = new BatchBuffer({ + flushHandler: async (items) => { + itemsFlushed += items.length; + await new Promise((resolve) => setTimeout(resolve, 100)); + mockFlushHandler(); + }, + logger: mockLogger, + }); + + await buffer.add("item1"); + await Promise.all([buffer.flush(), buffer.flush()]); + expect(itemsFlushed).toBe(1); + }); + it("should flush buffer", async () => { const buffer = new BatchBuffer({ flushHandler: mockFlushHandler, From 9104c0ea57ac308c94f81dd1b4b5cc03ee969f7e Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Mon, 17 Mar 2025 19:58:12 +0100 Subject: [PATCH 2/3] bump node-sdk version --- packages/node-sdk/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node-sdk/package.json b/packages/node-sdk/package.json index 075186fd..b4dec0ee 100644 --- a/packages/node-sdk/package.json +++ b/packages/node-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/node-sdk", - "version": "1.6.2", + "version": "1.6.3", "license": "MIT", "repository": { "type": "git", From cd4e87a5ed85ec82ddb51b3f54e9df55fa4b7b1e Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Mon, 17 Mar 2025 20:10:18 +0100 Subject: [PATCH 3/3] fix logging --- packages/node-sdk/src/batch-buffer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node-sdk/src/batch-buffer.ts b/packages/node-sdk/src/batch-buffer.ts index 57934f9b..0435a509 100644 --- a/packages/node-sdk/src/batch-buffer.ts +++ b/packages/node-sdk/src/batch-buffer.ts @@ -76,12 +76,12 @@ export default class BatchBuffer { await this.flushHandler(flushingBuffer); this.logger?.info("flushed buffered items", { - count: this.buffer.length, + count: flushingBuffer.length, }); } catch (error) { this.logger?.error("flush of buffered items failed; discarding items", { error, - count: this.buffer.length, + count: flushingBuffer.length, }); } }