Skip to content

Commit 8bf9566

Browse files
Add getRegisteredSegment utility function, to compute the segments in use for server-side
1 parent a3f6481 commit 8bf9566

24 files changed

+97
-171
lines changed

src/storages/AbstractMySegmentsCacheSync.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync
1111
protected abstract addSegment(name: string): boolean
1212
protected abstract removeSegment(name: string): boolean
1313
protected abstract setChangeNumber(changeNumber?: number): boolean | void
14+
protected abstract getSegments(): string[]
1415

1516
/**
1617
* For server-side synchronizer: check if `key` is in `name` segment.
@@ -27,14 +28,14 @@ export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync
2728

2829

2930
// No-op. Not used in client-side.
30-
registerSegments(): boolean { return false; }
3131
update() { return false; }
3232

3333
/**
34-
* For server-side synchronizer: get the list of segments to fetch changes.
35-
* Also used for the `seC` (segment count) telemetry stat.
34+
* Used for the `seC` (segment count) telemetry stat.
3635
*/
37-
abstract getRegisteredSegments(): string[]
36+
getSegmentsCount() {
37+
return this.getSegments().length;
38+
}
3839

3940
/**
4041
* Only used for the `skC`(segment keys count) telemetry stat: 1 for client-side, and total count of keys in server-side.
@@ -68,7 +69,7 @@ export abstract class AbstractMySegmentsCacheSync implements ISegmentsCacheSync
6869
}
6970

7071
const names = ((segmentsData as IMySegmentsResponse).k || []).map(s => s.n).sort();
71-
const storedSegmentKeys = this.getRegisteredSegments().sort();
72+
const storedSegmentKeys = this.getSegments().sort();
7273

7374
// Extreme fast => everything is empty
7475
if (!names.length && !storedSegmentKeys.length) return false;

src/storages/AbstractSplitsCacheAsync.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export abstract class AbstractSplitsCacheAsync implements ISplitsCacheAsync {
3131
abstract trafficTypeExists(trafficType: string): Promise<boolean>
3232
abstract clear(): Promise<boolean | void>
3333

34-
// @TODO revisit segment-related methods ('usesSegments', 'getRegisteredSegments', 'registerSegments')
34+
// @TODO revisit segment-related methods ('usesSegments')
3535
// noop, just keeping the interface. This is used by standalone client-side API only, and so only implemented by InMemory and InLocalStorage.
3636
usesSegments(): Promise<boolean> {
3737
return Promise.resolve(true);

src/storages/KeyBuilderSS.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@ export class KeyBuilderSS extends KeyBuilder {
2929
this.versionablePrefix = `${metadata.s}/${metadata.n}/${metadata.i}`;
3030
}
3131

32-
buildRegisteredSegmentsKey() {
33-
return `${this.prefix}.segments.registered`;
34-
}
35-
3632
buildImpressionsKey() {
3733
return `${this.prefix}.impressions`;
3834
}

src/storages/__tests__/KeyBuilder.spec.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,8 @@ test('KEYS / segments keys', () => {
3636
const expectedKey = `SPLITIO.segment.${segmentName}`;
3737
const expectedTill = `SPLITIO.segment.${segmentName}.till`;
3838

39-
const expectedSegmentRegistered = 'SPLITIO.segments.registered';
40-
4139
expect(builder.buildSegmentNameKey(segmentName) === expectedKey).toBe(true);
4240
expect(builder.buildSegmentTillKey(segmentName) === expectedTill).toBe(true);
43-
expect(builder.buildRegisteredSegmentsKey() === expectedSegmentRegistered).toBe(true);
44-
45-
// NOT USED
46-
// const expectedReady = 'SPLITIO.segments.ready';
47-
// expect(builder.buildSegmentsReady() === expectedReady).toBe(true);
4841
});
4942

5043
test('KEYS / traffic type keys', () => {

src/storages/inLocalStorage/MySegmentsCacheInLocal.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class MySegmentsCacheInLocal extends AbstractMySegmentsCacheSync {
4646
return localStorage.getItem(this.keys.buildSegmentNameKey(name)) === DEFINED;
4747
}
4848

49-
getRegisteredSegments(): string[] {
49+
protected getSegments(): string[] {
5050
// Scan current values from localStorage
5151
return Object.keys(localStorage).reduce((accum, key) => {
5252
let segmentName = this.keys.extractSegmentName(key);

src/storages/inLocalStorage/RBSegmentsCacheInLocal.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ export class RBSegmentsCacheInLocal implements IRBSegmentsCacheSync {
105105
return item && JSON.parse(item);
106106
}
107107

108+
getAll(): IRBSegment[] {
109+
return this.getNames().map(name => this.get(name) as IRBSegment);
110+
}
111+
108112
contains(names: Set<string>): boolean {
109113
const namesArray = setToArray(names);
110114
const namesInStorage = this.getNames();

src/storages/inLocalStorage/__tests__/MySegmentsCacheInLocal.spec.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ test('SEGMENT CACHE / in LocalStorage', () => {
1717
expect(cache.getChangeNumber()).toBe(-1);
1818

1919
expect(cache.isInSegment('mocked-segment')).toBe(true);
20-
expect(cache.getRegisteredSegments()).toEqual(['mocked-segment', 'mocked-segment-2']);
2120
expect(cache.getKeysCount()).toBe(1);
2221
});
2322

@@ -29,7 +28,6 @@ test('SEGMENT CACHE / in LocalStorage', () => {
2928
});
3029

3130
expect(cache.isInSegment('mocked-segment')).toBe(false);
32-
expect(cache.getRegisteredSegments()).toEqual(['mocked-segment-2']);
3331
expect(cache.getKeysCount()).toBe(1);
3432
});
3533

src/storages/inMemory/MySegmentsCacheInMemory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export class MySegmentsCacheInMemory extends AbstractMySegmentsCacheSync {
3838
return this.cn || -1;
3939
}
4040

41-
getRegisteredSegments() {
41+
protected getSegments() {
4242
return Object.keys(this.segmentCache);
4343
}
4444

src/storages/inMemory/RBSegmentsCacheInMemory.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ export class RBSegmentsCacheInMemory implements IRBSegmentsCacheSync {
5151
return this.cache[name] || null;
5252
}
5353

54+
getAll(): IRBSegment[] {
55+
return this.getNames().map(name => this.get(name) as IRBSegment);
56+
}
57+
5458
contains(names: Set<string>): boolean {
5559
const namesArray = setToArray(names);
5660
const namesInStorage = this.getNames();

src/storages/inMemory/SegmentsCacheInMemory.ts

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,8 @@ export class SegmentsCacheInMemory implements ISegmentsCacheSync {
3636
this.segmentChangeNumber = {};
3737
}
3838

39-
private _registerSegment(name: string) {
40-
if (!this.segmentCache[name]) {
41-
this.segmentCache[name] = new Set<string>();
42-
}
43-
44-
return true;
45-
}
46-
47-
registerSegments(names: string[]) {
48-
for (let i = 0; i < names.length; i++) {
49-
this._registerSegment(names[i]);
50-
}
51-
52-
return true;
53-
}
54-
55-
getRegisteredSegments() {
56-
return Object.keys(this.segmentCache);
39+
getSegmentsCount() {
40+
return Object.keys(this.segmentCache).length;
5741
}
5842

5943
getKeysCount() {

0 commit comments

Comments
 (0)