Skip to content

Commit 4a44ac4

Browse files
Fix issue with SDK_UPDATE event with empty segments
1 parent d6d14f9 commit 4a44ac4

File tree

13 files changed

+31
-27
lines changed

13 files changed

+31
-27
lines changed

CHANGES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
2.0.1 (November 26, 2024)
2+
- Bugfixing - Fixed an issue with the SDK_UPDATE event on server-side, where it was not being emitted if there was an empty segment and the SDK received a feature flag update notification.
3+
14
2.0.0 (November 1, 2024)
25
- Added support for targeting rules based on large segments.
36
- Added `factory.destroy()` method, which invokes the `destroy` method on all SDK clients created by the factory.

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/storages/AbstractMySegmentsCacheSync.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync
4242
// @TODO for client-side it should be the number of clients, but it requires a refactor of MySegments caches to simplify the code.
4343
abstract getKeysCount(): number
4444

45-
abstract getChangeNumber(name: string): number
45+
abstract getChangeNumber(): number
4646

4747
/**
4848
* For server-side synchronizer: the method is not used.

src/storages/inMemory/SegmentsCacheInMemory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export class SegmentsCacheInMemory implements ISegmentsCacheSync {
6565
getChangeNumber(name: string) {
6666
const value = this.segmentChangeNumber[name];
6767

68-
return isIntegerNumber(value) ? value : -1;
68+
return isIntegerNumber(value) ? value : undefined;
6969
}
7070

7171
// No-op. Not used in server-side

src/storages/inRedis/SegmentsCacheInRedis.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ export class SegmentsCacheInRedis implements ISegmentsCacheAsync {
4444
return this.redis.get(this.keys.buildSegmentTillKey(name)).then((value: string | null) => {
4545
const i = parseInt(value as string, 10);
4646

47-
return isNaNNumber(i) ? -1 : i;
47+
return isNaNNumber(i) ? undefined : i;
4848
}).catch((e) => {
4949
this.log.error(LOG_PREFIX + 'Could not retrieve changeNumber from segments storage. Error: ' + e);
50-
return -1;
50+
return undefined;
5151
});
5252
}
5353

src/storages/inRedis/__tests__/SegmentsCacheInRedis.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ describe('SEGMENTS CACHE IN REDIS', () => {
1717

1818
expect(await cache.getChangeNumber('mocked-segment') === 1).toBe(true);
1919

20-
expect(await cache.getChangeNumber('inexistent-segment')).toBe(-1); // -1 if the segment doesn't exist
20+
expect(await cache.getChangeNumber('inexistent-segment')).toBe(undefined); // -1 if the segment doesn't exist
2121

2222
await cache.update('mocked-segment', ['d', 'e'], [], 2);
2323

src/storages/pluggable/SegmentsCachePluggable.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ export class SegmentsCachePluggable implements ISegmentsCacheAsync {
5555
return this.wrapper.get(this.keys.buildSegmentTillKey(name)).then((value: string | null) => {
5656
const i = parseInt(value as string, 10);
5757

58-
return isNaNNumber(i) ? -1 : i;
58+
return isNaNNumber(i) ? undefined : i;
5959
}).catch((e) => {
6060
this.log.error(LOG_PREFIX + 'Could not retrieve changeNumber from segments storage. Error: ' + e);
61-
return -1;
61+
return undefined;
6262
});
6363
}
6464

src/storages/pluggable/__tests__/SegmentsCachePluggable.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ describe('SEGMENTS CACHE PLUGGABLE', () => {
2020

2121
expect(await cache.getChangeNumber('mocked-segment') === 1).toBe(true);
2222

23-
expect(await cache.getChangeNumber('inexistent-segment')).toBe(-1); // -1 if the segment doesn't exist
23+
expect(await cache.getChangeNumber('inexistent-segment')).toBe(undefined); // -1 if the segment doesn't exist
2424

2525
await cache.update('mocked-segment', ['d', 'e'], [], 2);
2626

src/storages/types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ export interface ISegmentsCacheBase {
237237
isInSegment(name: string, key?: string): MaybeThenable<boolean> // different signature on Server and Client-Side
238238
registerSegments(names: string[]): MaybeThenable<boolean | void> // only for Server-Side
239239
getRegisteredSegments(): MaybeThenable<string[]> // only for Server-Side
240-
getChangeNumber(name: string): MaybeThenable<number> // only for Server-Side
240+
getChangeNumber(name: string): MaybeThenable<number | undefined> // only for Server-Side
241241
update(name: string, addedKeys: string[], removedKeys: string[], changeNumber: number): MaybeThenable<boolean> // only for Server-Side
242242
clear(): MaybeThenable<boolean | void>
243243
}
@@ -248,7 +248,7 @@ export interface ISegmentsCacheSync extends ISegmentsCacheBase {
248248
registerSegments(names: string[]): boolean
249249
getRegisteredSegments(): string[]
250250
getKeysCount(): number // only used for telemetry
251-
getChangeNumber(name?: string): number
251+
getChangeNumber(name?: string): number | undefined
252252
update(name: string, addedKeys: string[], removedKeys: string[], changeNumber: number): boolean // only for Server-Side
253253
resetSegments(segmentsData: MySegmentsData | IMySegmentsResponse): boolean // only for Sync Client-Side
254254
clear(): void
@@ -258,7 +258,7 @@ export interface ISegmentsCacheAsync extends ISegmentsCacheBase {
258258
isInSegment(name: string, key: string): Promise<boolean>
259259
registerSegments(names: string[]): Promise<boolean | void>
260260
getRegisteredSegments(): Promise<string[]>
261-
getChangeNumber(name: string): Promise<number>
261+
getChangeNumber(name: string): Promise<number | undefined>
262262
update(name: string, addedKeys: string[], removedKeys: string[], changeNumber: number): Promise<boolean>
263263
clear(): Promise<boolean | void>
264264
}

src/sync/polling/updaters/segmentChangesUpdater.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ export function segmentChangesUpdaterFactory(
3333

3434
return sincePromise.then(since => {
3535
// if fetchOnlyNew flag, avoid processing already fetched segments
36-
return fetchOnlyNew && since !== -1 ?
36+
return fetchOnlyNew && since !== undefined ?
3737
false :
38-
segmentChangesFetcher(since, segmentName, noCache, till).then((changes) => {
38+
segmentChangesFetcher(since || -1, segmentName, noCache, till).then((changes) => {
3939
return Promise.all(changes.map(x => {
4040
log.debug(`${LOG_PREFIX_SYNC_SEGMENTS}Processing ${segmentName} with till = ${x.till}. Added: ${x.added.length}. Removed: ${x.removed.length}`);
4141
return segments.update(segmentName, x.added, x.removed, x.till);

0 commit comments

Comments
 (0)