Skip to content

Commit fe0f353

Browse files
Add usesSegmentsSync utility function to reuse code
1 parent a3f6481 commit fe0f353

File tree

4 files changed

+16
-9
lines changed

4 files changed

+16
-9
lines changed

src/storages/AbstractSplitsCacheSync.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ISplitsCacheSync } from './types';
1+
import { ISplitsCacheSync, IStorageSync } from './types';
22
import { IRBSegment, ISplit } from '../dtos/types';
33
import { objectAssign } from '../utils/lang/objectAssign';
44
import { IN_SEGMENT, IN_LARGE_SEGMENT } from '../utils/constants';
@@ -88,3 +88,7 @@ export function usesSegments(ruleEntity: ISplit | IRBSegment) {
8888

8989
return false;
9090
}
91+
92+
export function usesSegmentsSync(storage: Pick<IStorageSync, 'splits' | 'rbSegments'>) {
93+
return storage.splits.usesSegments() || storage.rbSegments.usesSegments();
94+
}

src/sync/polling/pollingManagerCS.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { getMatching } from '../../utils/key';
88
import { SDK_SPLITS_ARRIVED, SDK_SEGMENTS_ARRIVED } from '../../readiness/constants';
99
import { POLLING_SMART_PAUSING, POLLING_START, POLLING_STOP } from '../../logger/constants';
1010
import { ISdkFactoryContextSync } from '../../sdkFactory/types';
11+
import { usesSegmentsSync } from '../../storages/AbstractSplitsCacheSync';
1112

1213
/**
1314
* Expose start / stop mechanism for polling data from services.
@@ -43,7 +44,7 @@ export function pollingManagerCSFactory(
4344
// smart pausing
4445
readiness.splits.on(SDK_SPLITS_ARRIVED, () => {
4546
if (!splitsSyncTask.isRunning()) return; // noop if not doing polling
46-
const usingSegments = storage.splits.usesSegments() || storage.rbSegments.usesSegments();
47+
const usingSegments = usesSegmentsSync(storage);
4748
if (usingSegments !== mySegmentsSyncTask.isRunning()) {
4849
log.info(POLLING_SMART_PAUSING, [usingSegments ? 'ON' : 'OFF']);
4950
if (usingSegments) {
@@ -59,9 +60,9 @@ export function pollingManagerCSFactory(
5960

6061
// smart ready
6162
function smartReady() {
62-
if (!readiness.isReady() && !storage.splits.usesSegments() && !storage.rbSegments.usesSegments()) readiness.segments.emit(SDK_SEGMENTS_ARRIVED);
63+
if (!readiness.isReady() && !usesSegmentsSync(storage)) readiness.segments.emit(SDK_SEGMENTS_ARRIVED);
6364
}
64-
if (!storage.splits.usesSegments() && !storage.rbSegments.usesSegments()) setTimeout(smartReady, 0);
65+
if (!usesSegmentsSync(storage)) setTimeout(smartReady, 0);
6566
else readiness.splits.once(SDK_SPLITS_ARRIVED, smartReady);
6667

6768
mySegmentsSyncTasks[matchingKey] = mySegmentsSyncTask;
@@ -77,7 +78,7 @@ export function pollingManagerCSFactory(
7778
log.info(POLLING_START);
7879

7980
splitsSyncTask.start();
80-
if (storage.splits.usesSegments() || storage.rbSegments.usesSegments()) startMySegmentsSyncTasks();
81+
if (usesSegmentsSync(storage)) startMySegmentsSyncTasks();
8182
},
8283

8384
// Stop periodic fetching (polling)

src/sync/polling/updaters/mySegmentsUpdater.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { SYNC_MYSEGMENTS_FETCH_RETRY } from '../../../logger/constants';
88
import { MySegmentsData } from '../types';
99
import { IMembershipsResponse } from '../../../dtos/types';
1010
import { MEMBERSHIPS_LS_UPDATE } from '../../streaming/constants';
11+
import { usesSegmentsSync } from '../../../storages/AbstractSplitsCacheSync';
1112

1213
type IMySegmentsUpdater = (segmentsData?: MySegmentsData, noCache?: boolean, till?: number) => Promise<boolean>
1314

@@ -27,7 +28,7 @@ export function mySegmentsUpdaterFactory(
2728
matchingKey: string
2829
): IMySegmentsUpdater {
2930

30-
const { splits, rbSegments, segments, largeSegments } = storage;
31+
const { segments, largeSegments } = storage;
3132
let readyOnAlreadyExistentState = true;
3233
let startingUp = true;
3334

@@ -51,7 +52,7 @@ export function mySegmentsUpdaterFactory(
5152
}
5253

5354
// Notify update if required
54-
if ((splits.usesSegments() || rbSegments.usesSegments()) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
55+
if (usesSegmentsSync(storage) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
5556
readyOnAlreadyExistentState = false;
5657
segmentsEventEmitter.emit(SDK_SEGMENTS_ARRIVED);
5758
}

src/sync/syncManagerOnline.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { isConsentGranted } from '../consent';
1010
import { POLLING, STREAMING, SYNC_MODE_UPDATE } from '../utils/constants';
1111
import { ISdkFactoryContextSync } from '../sdkFactory/types';
1212
import { SDK_SPLITS_CACHE_LOADED } from '../readiness/constants';
13+
import { usesSegmentsSync } from '../storages/AbstractSplitsCacheSync';
1314

1415
/**
1516
* Online SyncManager factory.
@@ -155,14 +156,14 @@ export function syncManagerOnlineFactory(
155156
if (pushManager) {
156157
if (pollingManager.isRunning()) {
157158
// if doing polling, we must start the periodic fetch of data
158-
if (storage.splits.usesSegments() || storage.rbSegments.usesSegments()) mySegmentsSyncTask.start();
159+
if (usesSegmentsSync(storage)) mySegmentsSyncTask.start();
159160
} else {
160161
// if not polling, we must execute the sync task for the initial fetch
161162
// of segments since `syncAll` was already executed when starting the main client
162163
mySegmentsSyncTask.execute();
163164
}
164165
} else {
165-
if (storage.splits.usesSegments() || storage.rbSegments.usesSegments()) mySegmentsSyncTask.start();
166+
if (usesSegmentsSync(storage)) mySegmentsSyncTask.start();
166167
}
167168
} else {
168169
if (!readinessManager.isReady()) mySegmentsSyncTask.execute();

0 commit comments

Comments
 (0)