Skip to content

Commit 759f07c

Browse files
committed
ref(replay): Explicitly clear event buffer queue on checkout
1 parent 4e4d804 commit 759f07c

File tree

6 files changed

+46
-35
lines changed

6 files changed

+46
-35
lines changed

packages/replay/src/eventBuffer/EventBufferArray.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,16 @@ export class EventBufferArray implements EventBuffer {
3030
}
3131

3232
/** @inheritdoc */
33-
public async addEvent(event: RecordingEvent, isCheckout?: boolean): Promise<AddEventResult> {
34-
if (isCheckout) {
35-
this._events = [event];
36-
return;
37-
}
38-
33+
public async addEvent(event: RecordingEvent): Promise<AddEventResult> {
3934
this._events.push(event);
4035
return;
4136
}
4237

38+
/** @inheritdoc */
39+
public async clear(): Promise<void> {
40+
this._events = [];
41+
}
42+
4343
/** @inheritdoc */
4444
public finish(): Promise<string> {
4545
return new Promise<string>(resolve => {

packages/replay/src/eventBuffer/EventBufferCompressionWorker.ts

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,25 +79,21 @@ export class EventBufferCompressionWorker implements EventBuffer {
7979
*
8080
* Returns true if event was successfuly received and processed by worker.
8181
*/
82-
public async addEvent(event: RecordingEvent, isCheckout?: boolean): Promise<AddEventResult> {
83-
if (isCheckout) {
84-
// This event is a checkout, make sure worker buffer is cleared before
85-
// proceeding.
86-
await this._postMessage({
87-
id: this._getAndIncrementId(),
88-
method: 'init',
89-
args: [],
90-
});
91-
}
92-
93-
// Don't store checkout events in `_pendingEvents` because they are too large
94-
if (!isCheckout) {
95-
this._pendingEvents.push(event);
96-
}
97-
82+
public addEvent(event: RecordingEvent): Promise<AddEventResult> {
83+
this.pendingEvents.push(event);
9884
return this._sendEventToWorker(event);
9985
}
10086

87+
/** @inheritdoc */
88+
public clear(): Promise<void> {
89+
// This will clear the queue of events that are waiting to be compressed
90+
return this._postMessage({
91+
id: this._getAndIncrementId(),
92+
method: 'init',
93+
args: [],
94+
});
95+
}
96+
10197
/**
10298
* Finish the event buffer and return the compressed data.
10399
*/

packages/replay/src/eventBuffer/EventBufferProxy.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ export class EventBufferProxy implements EventBuffer {
3939
this._compression.destroy();
4040
}
4141

42-
/**
43-
* Add an event to the event buffer.
44-
*
45-
* Returns true if event was successfully added.
46-
*/
47-
public addEvent(event: RecordingEvent, isCheckout?: boolean): Promise<AddEventResult> {
48-
return this._used.addEvent(event, isCheckout);
42+
/** @inheritdoc */
43+
public addEvent(event: RecordingEvent): Promise<AddEventResult> {
44+
return this._used.addEvent(event);
45+
}
46+
47+
/** @inheritdoc */
48+
public clear(): Promise<void> {
49+
return this._used.clear();
4950
}
5051

5152
/** @inheritDoc */

packages/replay/src/types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,12 @@ export interface EventBuffer {
220220
*
221221
* Returns a promise that resolves if the event was successfully added, else rejects.
222222
*/
223-
addEvent(event: RecordingEvent, isCheckout?: boolean): Promise<AddEventResult>;
223+
addEvent(event: RecordingEvent): Promise<AddEventResult>;
224+
225+
/**
226+
* Clear any pending events from the buffer.
227+
*/
228+
clear(): Promise<void>;
224229

225230
/**
226231
* Clears and returns the contents of the buffer.

packages/replay/src/util/addEvent.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ export async function addEvent(
99
event: RecordingEvent,
1010
isCheckout?: boolean,
1111
): Promise<AddEventResult | null> {
12-
if (!replay.eventBuffer) {
12+
const { eventBuffer } = replay;
13+
14+
if (!eventBuffer) {
1315
// This implies that `_isEnabled` is false
1416
return null;
1517
}
@@ -39,5 +41,9 @@ export async function addEvent(
3941
replay.getContext().earliestEvent = timestampInMs;
4042
}
4143

42-
return replay.eventBuffer.addEvent(event, isCheckout);
44+
if (isCheckout) {
45+
await eventBuffer.clear();
46+
}
47+
48+
return eventBuffer.addEvent(event);
4349
}

packages/replay/test/unit/eventBuffer.test.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ describe('Unit | eventBuffer', () => {
2727
buffer.addEvent(TEST_EVENT);
2828
buffer.addEvent(TEST_EVENT);
2929

30-
buffer.addEvent(TEST_EVENT, true);
30+
// Checkout triggers clear
31+
buffer.clear();
32+
buffer.addEvent(TEST_EVENT);
3133
const result = await buffer.finish();
3234

3335
expect(result).toEqual(JSON.stringify([TEST_EVENT]));
@@ -85,8 +87,9 @@ describe('Unit | eventBuffer', () => {
8587
await buffer.addEvent(TEST_EVENT);
8688
await buffer.addEvent(TEST_EVENT);
8789

88-
// This should clear previous buffer
89-
await buffer.addEvent({ ...TEST_EVENT, type: 2 }, true);
90+
// Checkout triggers clear
91+
await buffer.clear();
92+
await buffer.addEvent({ ...TEST_EVENT, type: 2 });
9093

9194
const result = await buffer.finish();
9295
expect(result).toBeInstanceOf(Uint8Array);

0 commit comments

Comments
 (0)