@splitsoftware/splitio-commons 2.1.0 → 2.1.1-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/cjs/evaluator/combiners/and.js +2 -6
- package/cjs/evaluator/combiners/ifelseif.js +6 -6
- package/cjs/evaluator/condition/index.js +6 -5
- package/cjs/evaluator/index.js +7 -7
- package/cjs/evaluator/matchers/index.js +3 -1
- package/cjs/evaluator/matchers/matcherTypes.js +1 -0
- package/cjs/evaluator/matchers/rbsegment.js +43 -0
- package/cjs/evaluator/matchersTransform/index.js +4 -0
- package/cjs/evaluator/parser/index.js +2 -2
- package/cjs/evaluator/value/sanitize.js +1 -0
- package/cjs/logger/constants.js +5 -6
- package/cjs/logger/messages/debug.js +3 -4
- package/cjs/logger/messages/warn.js +1 -1
- package/cjs/services/splitApi.js +2 -2
- package/cjs/storages/AbstractSplitsCacheAsync.js +12 -1
- package/cjs/storages/AbstractSplitsCacheSync.js +10 -9
- package/cjs/storages/KeyBuilder.js +8 -15
- package/cjs/storages/KeyBuilderCS.js +12 -3
- package/cjs/storages/KeyBuilderSS.js +3 -0
- package/cjs/storages/dataLoader.js +1 -2
- package/cjs/storages/inLocalStorage/RBSegmentsCacheInLocal.js +117 -0
- package/cjs/storages/inLocalStorage/SplitsCacheInLocal.js +14 -16
- package/cjs/storages/inLocalStorage/index.js +4 -0
- package/cjs/storages/inMemory/InMemoryStorage.js +3 -0
- package/cjs/storages/inMemory/InMemoryStorageCS.js +4 -0
- package/cjs/storages/inMemory/RBSegmentsCacheInMemory.js +61 -0
- package/cjs/storages/inMemory/SplitsCacheInMemory.js +24 -31
- package/cjs/storages/inRedis/RBSegmentsCacheInRedis.js +64 -0
- package/cjs/storages/inRedis/SplitsCacheInRedis.js +4 -21
- package/cjs/storages/inRedis/index.js +2 -0
- package/cjs/storages/pluggable/RBSegmentsCachePluggable.js +64 -0
- package/cjs/storages/pluggable/SplitsCachePluggable.js +2 -19
- package/cjs/storages/pluggable/index.js +2 -0
- package/cjs/sync/offline/syncTasks/fromObjectSyncTask.js +12 -13
- package/cjs/sync/polling/fetchers/splitChangesFetcher.js +2 -2
- package/cjs/sync/polling/pollingManagerCS.js +7 -7
- package/cjs/sync/polling/syncTasks/splitsSyncTask.js +1 -1
- package/cjs/sync/polling/updaters/mySegmentsUpdater.js +2 -2
- package/cjs/sync/polling/updaters/segmentChangesUpdater.js +1 -1
- package/cjs/sync/polling/updaters/splitChangesUpdater.js +53 -51
- package/cjs/sync/streaming/SSEHandler/index.js +1 -0
- package/cjs/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +106 -77
- package/cjs/sync/streaming/constants.js +2 -1
- package/cjs/sync/streaming/pushManager.js +3 -16
- package/cjs/sync/syncManagerOnline.js +2 -2
- package/cjs/utils/constants/index.js +3 -2
- package/esm/evaluator/combiners/and.js +2 -6
- package/esm/evaluator/combiners/ifelseif.js +7 -7
- package/esm/evaluator/condition/index.js +6 -5
- package/esm/evaluator/index.js +7 -7
- package/esm/evaluator/matchers/index.js +3 -1
- package/esm/evaluator/matchers/matcherTypes.js +1 -0
- package/esm/evaluator/matchers/rbsegment.js +39 -0
- package/esm/evaluator/matchersTransform/index.js +4 -0
- package/esm/evaluator/parser/index.js +2 -2
- package/esm/evaluator/value/sanitize.js +1 -0
- package/esm/logger/constants.js +2 -3
- package/esm/logger/messages/debug.js +3 -4
- package/esm/logger/messages/warn.js +1 -1
- package/esm/services/splitApi.js +2 -2
- package/esm/storages/AbstractSplitsCacheAsync.js +12 -1
- package/esm/storages/AbstractSplitsCacheSync.js +10 -9
- package/esm/storages/KeyBuilder.js +8 -15
- package/esm/storages/KeyBuilderCS.js +12 -3
- package/esm/storages/KeyBuilderSS.js +3 -0
- package/esm/storages/dataLoader.js +1 -2
- package/esm/storages/inLocalStorage/RBSegmentsCacheInLocal.js +114 -0
- package/esm/storages/inLocalStorage/SplitsCacheInLocal.js +14 -16
- package/esm/storages/inLocalStorage/index.js +4 -0
- package/esm/storages/inMemory/InMemoryStorage.js +3 -0
- package/esm/storages/inMemory/InMemoryStorageCS.js +4 -0
- package/esm/storages/inMemory/RBSegmentsCacheInMemory.js +58 -0
- package/esm/storages/inMemory/SplitsCacheInMemory.js +24 -31
- package/esm/storages/inRedis/RBSegmentsCacheInRedis.js +61 -0
- package/esm/storages/inRedis/SplitsCacheInRedis.js +4 -21
- package/esm/storages/inRedis/index.js +2 -0
- package/esm/storages/pluggable/RBSegmentsCachePluggable.js +61 -0
- package/esm/storages/pluggable/SplitsCachePluggable.js +2 -19
- package/esm/storages/pluggable/index.js +2 -0
- package/esm/sync/offline/syncTasks/fromObjectSyncTask.js +12 -13
- package/esm/sync/polling/fetchers/splitChangesFetcher.js +2 -2
- package/esm/sync/polling/pollingManagerCS.js +7 -7
- package/esm/sync/polling/syncTasks/splitsSyncTask.js +1 -1
- package/esm/sync/polling/updaters/mySegmentsUpdater.js +2 -2
- package/esm/sync/polling/updaters/segmentChangesUpdater.js +1 -1
- package/esm/sync/polling/updaters/splitChangesUpdater.js +53 -51
- package/esm/sync/streaming/SSEHandler/index.js +2 -1
- package/esm/sync/streaming/UpdateWorkers/SplitsUpdateWorker.js +102 -73
- package/esm/sync/streaming/constants.js +1 -0
- package/esm/sync/streaming/pushManager.js +6 -19
- package/esm/sync/syncManagerOnline.js +2 -2
- package/esm/utils/constants/index.js +2 -1
- package/package.json +1 -1
- package/src/dtos/types.ts +32 -8
- package/src/evaluator/Engine.ts +1 -1
- package/src/evaluator/combiners/and.ts +5 -4
- package/src/evaluator/combiners/ifelseif.ts +7 -9
- package/src/evaluator/condition/engineUtils.ts +1 -1
- package/src/evaluator/condition/index.ts +12 -12
- package/src/evaluator/index.ts +7 -7
- package/src/evaluator/matchers/index.ts +3 -1
- package/src/evaluator/matchers/matcherTypes.ts +1 -0
- package/src/evaluator/matchers/rbsegment.ts +61 -0
- package/src/evaluator/matchersTransform/index.ts +3 -0
- package/src/evaluator/parser/index.ts +3 -3
- package/src/evaluator/types.ts +2 -2
- package/src/evaluator/value/index.ts +2 -2
- package/src/evaluator/value/sanitize.ts +5 -4
- package/src/logger/constants.ts +2 -3
- package/src/logger/messages/debug.ts +3 -4
- package/src/logger/messages/warn.ts +1 -1
- package/src/sdkManager/index.ts +1 -1
- package/src/services/splitApi.ts +2 -2
- package/src/services/types.ts +1 -1
- package/src/storages/AbstractSplitsCacheAsync.ts +15 -5
- package/src/storages/AbstractSplitsCacheSync.ts +14 -15
- package/src/storages/KeyBuilder.ts +9 -17
- package/src/storages/KeyBuilderCS.ts +15 -4
- package/src/storages/KeyBuilderSS.ts +4 -0
- package/src/storages/dataLoader.ts +1 -2
- package/src/storages/inLocalStorage/RBSegmentsCacheInLocal.ts +136 -0
- package/src/storages/inLocalStorage/SplitsCacheInLocal.ts +15 -16
- package/src/storages/inLocalStorage/index.ts +4 -0
- package/src/storages/inMemory/InMemoryStorage.ts +3 -0
- package/src/storages/inMemory/InMemoryStorageCS.ts +4 -0
- package/src/storages/inMemory/RBSegmentsCacheInMemory.ts +68 -0
- package/src/storages/inMemory/SplitsCacheInMemory.ts +22 -27
- package/src/storages/inRedis/RBSegmentsCacheInRedis.ts +79 -0
- package/src/storages/inRedis/SplitsCacheInRedis.ts +4 -21
- package/src/storages/inRedis/index.ts +2 -0
- package/src/storages/pluggable/RBSegmentsCachePluggable.ts +76 -0
- package/src/storages/pluggable/SplitsCachePluggable.ts +2 -19
- package/src/storages/pluggable/index.ts +2 -0
- package/src/storages/types.ts +43 -17
- package/src/sync/offline/syncTasks/fromObjectSyncTask.ts +14 -15
- package/src/sync/polling/fetchers/splitChangesFetcher.ts +2 -1
- package/src/sync/polling/fetchers/types.ts +1 -0
- package/src/sync/polling/pollingManagerCS.ts +7 -7
- package/src/sync/polling/syncTasks/splitsSyncTask.ts +1 -2
- package/src/sync/polling/types.ts +2 -2
- package/src/sync/polling/updaters/mySegmentsUpdater.ts +2 -2
- package/src/sync/polling/updaters/segmentChangesUpdater.ts +1 -1
- package/src/sync/polling/updaters/splitChangesUpdater.ts +64 -62
- package/src/sync/streaming/SSEHandler/index.ts +2 -1
- package/src/sync/streaming/SSEHandler/types.ts +2 -2
- package/src/sync/streaming/UpdateWorkers/SplitsUpdateWorker.ts +98 -68
- package/src/sync/streaming/constants.ts +1 -0
- package/src/sync/streaming/parseUtils.ts +2 -2
- package/src/sync/streaming/pushManager.ts +6 -18
- package/src/sync/streaming/types.ts +3 -2
- package/src/sync/syncManagerOnline.ts +2 -2
- package/src/utils/constants/index.ts +2 -1
- package/src/utils/lang/index.ts +1 -1
|
@@ -47,15 +47,13 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
47
47
|
};
|
|
48
48
|
SplitsCacheInLocal.prototype._incrementCounts = function (split) {
|
|
49
49
|
try {
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
var ttKey = this.keys.buildTrafficTypeKey(split.trafficTypeName);
|
|
51
|
+
// @ts-expect-error
|
|
52
|
+
localStorage.setItem(ttKey, (0, lang_1.toNumber)(localStorage.getItem(ttKey)) + 1);
|
|
53
|
+
if ((0, AbstractSplitsCacheSync_1.usesSegments)(split)) {
|
|
54
|
+
var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
|
|
52
55
|
// @ts-expect-error
|
|
53
|
-
localStorage.setItem(
|
|
54
|
-
if ((0, AbstractSplitsCacheSync_1.usesSegments)(split)) {
|
|
55
|
-
var segmentsCountKey = this.keys.buildSplitsWithSegmentCountKey();
|
|
56
|
-
// @ts-expect-error
|
|
57
|
-
localStorage.setItem(segmentsCountKey, (0, lang_1.toNumber)(localStorage.getItem(segmentsCountKey)) + 1);
|
|
58
|
-
}
|
|
56
|
+
localStorage.setItem(segmentsCountKey, (0, lang_1.toNumber)(localStorage.getItem(segmentsCountKey)) + 1);
|
|
59
57
|
}
|
|
60
58
|
}
|
|
61
59
|
catch (e) {
|
|
@@ -82,9 +80,10 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
82
80
|
});
|
|
83
81
|
this.hasSync = false;
|
|
84
82
|
};
|
|
85
|
-
SplitsCacheInLocal.prototype.addSplit = function (
|
|
83
|
+
SplitsCacheInLocal.prototype.addSplit = function (split) {
|
|
86
84
|
try {
|
|
87
|
-
var
|
|
85
|
+
var name_1 = split.name;
|
|
86
|
+
var splitKey = this.keys.buildSplitKey(name_1);
|
|
88
87
|
var splitFromLocalStorage = localStorage.getItem(splitKey);
|
|
89
88
|
var previousSplit = splitFromLocalStorage ? JSON.parse(splitFromLocalStorage) : null;
|
|
90
89
|
localStorage.setItem(splitKey, JSON.stringify(split));
|
|
@@ -103,6 +102,8 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
103
102
|
SplitsCacheInLocal.prototype.removeSplit = function (name) {
|
|
104
103
|
try {
|
|
105
104
|
var split = this.getSplit(name);
|
|
105
|
+
if (!split)
|
|
106
|
+
return false;
|
|
106
107
|
localStorage.removeItem(this.keys.buildSplitKey(name));
|
|
107
108
|
this._decrementCounts(split);
|
|
108
109
|
if (split)
|
|
@@ -174,12 +175,9 @@ var SplitsCacheInLocal = /** @class */ (function (_super) {
|
|
|
174
175
|
return true;
|
|
175
176
|
var storedCount = localStorage.getItem(this.keys.buildSplitsWithSegmentCountKey());
|
|
176
177
|
var splitsWithSegmentsCount = storedCount === null ? 0 : (0, lang_1.toNumber)(storedCount);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
else {
|
|
181
|
-
return true;
|
|
182
|
-
}
|
|
178
|
+
return (0, lang_1.isFiniteNumber)(splitsWithSegmentsCount) ?
|
|
179
|
+
splitsWithSegmentsCount > 0 :
|
|
180
|
+
true;
|
|
183
181
|
};
|
|
184
182
|
/**
|
|
185
183
|
* Check if the splits information is already stored in browser LocalStorage.
|
|
@@ -16,6 +16,7 @@ var constants_2 = require("../../utils/constants");
|
|
|
16
16
|
var TelemetryCacheInMemory_1 = require("../inMemory/TelemetryCacheInMemory");
|
|
17
17
|
var UniqueKeysCacheInMemoryCS_1 = require("../inMemory/UniqueKeysCacheInMemoryCS");
|
|
18
18
|
var key_1 = require("../../utils/key");
|
|
19
|
+
var RBSegmentsCacheInLocal_1 = require("./RBSegmentsCacheInLocal");
|
|
19
20
|
/**
|
|
20
21
|
* InLocal storage factory for standalone client-side SplitFactory
|
|
21
22
|
*/
|
|
@@ -33,10 +34,12 @@ function InLocalStorage(options) {
|
|
|
33
34
|
var keys = new KeyBuilderCS_1.KeyBuilderCS(prefix, matchingKey);
|
|
34
35
|
var expirationTimestamp = Date.now() - browser_1.DEFAULT_CACHE_EXPIRATION_IN_MILLIS;
|
|
35
36
|
var splits = new SplitsCacheInLocal_1.SplitsCacheInLocal(settings, keys, expirationTimestamp);
|
|
37
|
+
var rbSegments = new RBSegmentsCacheInLocal_1.RBSegmentsCacheInLocal(settings, keys);
|
|
36
38
|
var segments = new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, keys);
|
|
37
39
|
var largeSegments = new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, (0, KeyBuilderCS_1.myLargeSegmentsKeyBuilder)(prefix, matchingKey));
|
|
38
40
|
return {
|
|
39
41
|
splits: splits,
|
|
42
|
+
rbSegments: rbSegments,
|
|
40
43
|
segments: segments,
|
|
41
44
|
largeSegments: largeSegments,
|
|
42
45
|
impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(impressionsQueueSize),
|
|
@@ -49,6 +52,7 @@ function InLocalStorage(options) {
|
|
|
49
52
|
shared: function (matchingKey) {
|
|
50
53
|
return {
|
|
51
54
|
splits: this.splits,
|
|
55
|
+
rbSegments: this.rbSegments,
|
|
52
56
|
segments: new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, new KeyBuilderCS_1.KeyBuilderCS(prefix, matchingKey)),
|
|
53
57
|
largeSegments: new MySegmentsCacheInLocal_1.MySegmentsCacheInLocal(log, (0, KeyBuilderCS_1.myLargeSegmentsKeyBuilder)(prefix, matchingKey)),
|
|
54
58
|
impressions: this.impressions,
|
|
@@ -9,6 +9,7 @@ var ImpressionCountsCacheInMemory_1 = require("./ImpressionCountsCacheInMemory")
|
|
|
9
9
|
var constants_1 = require("../../utils/constants");
|
|
10
10
|
var TelemetryCacheInMemory_1 = require("./TelemetryCacheInMemory");
|
|
11
11
|
var UniqueKeysCacheInMemory_1 = require("./UniqueKeysCacheInMemory");
|
|
12
|
+
var RBSegmentsCacheInMemory_1 = require("./RBSegmentsCacheInMemory");
|
|
12
13
|
/**
|
|
13
14
|
* InMemory storage factory for standalone server-side SplitFactory
|
|
14
15
|
*
|
|
@@ -17,9 +18,11 @@ var UniqueKeysCacheInMemory_1 = require("./UniqueKeysCacheInMemory");
|
|
|
17
18
|
function InMemoryStorageFactory(params) {
|
|
18
19
|
var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, __splitFiltersValidation = _a.sync.__splitFiltersValidation;
|
|
19
20
|
var splits = new SplitsCacheInMemory_1.SplitsCacheInMemory(__splitFiltersValidation);
|
|
21
|
+
var rbSegments = new RBSegmentsCacheInMemory_1.RBSegmentsCacheInMemory();
|
|
20
22
|
var segments = new SegmentsCacheInMemory_1.SegmentsCacheInMemory();
|
|
21
23
|
var storage = {
|
|
22
24
|
splits: splits,
|
|
25
|
+
rbSegments: rbSegments,
|
|
23
26
|
segments: segments,
|
|
24
27
|
impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(impressionsQueueSize),
|
|
25
28
|
impressionCounts: new ImpressionCountsCacheInMemory_1.ImpressionCountsCacheInMemory(),
|
|
@@ -9,6 +9,7 @@ var ImpressionCountsCacheInMemory_1 = require("./ImpressionCountsCacheInMemory")
|
|
|
9
9
|
var constants_1 = require("../../utils/constants");
|
|
10
10
|
var TelemetryCacheInMemory_1 = require("./TelemetryCacheInMemory");
|
|
11
11
|
var UniqueKeysCacheInMemoryCS_1 = require("./UniqueKeysCacheInMemoryCS");
|
|
12
|
+
var RBSegmentsCacheInMemory_1 = require("./RBSegmentsCacheInMemory");
|
|
12
13
|
/**
|
|
13
14
|
* InMemory storage factory for standalone client-side SplitFactory
|
|
14
15
|
*
|
|
@@ -17,10 +18,12 @@ var UniqueKeysCacheInMemoryCS_1 = require("./UniqueKeysCacheInMemoryCS");
|
|
|
17
18
|
function InMemoryStorageCSFactory(params) {
|
|
18
19
|
var _a = params.settings, _b = _a.scheduler, impressionsQueueSize = _b.impressionsQueueSize, eventsQueueSize = _b.eventsQueueSize, __splitFiltersValidation = _a.sync.__splitFiltersValidation;
|
|
19
20
|
var splits = new SplitsCacheInMemory_1.SplitsCacheInMemory(__splitFiltersValidation);
|
|
21
|
+
var rbSegments = new RBSegmentsCacheInMemory_1.RBSegmentsCacheInMemory();
|
|
20
22
|
var segments = new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory();
|
|
21
23
|
var largeSegments = new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory();
|
|
22
24
|
var storage = {
|
|
23
25
|
splits: splits,
|
|
26
|
+
rbSegments: rbSegments,
|
|
24
27
|
segments: segments,
|
|
25
28
|
largeSegments: largeSegments,
|
|
26
29
|
impressions: new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(impressionsQueueSize),
|
|
@@ -33,6 +36,7 @@ function InMemoryStorageCSFactory(params) {
|
|
|
33
36
|
shared: function () {
|
|
34
37
|
return {
|
|
35
38
|
splits: this.splits,
|
|
39
|
+
rbSegments: this.rbSegments,
|
|
36
40
|
segments: new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory(),
|
|
37
41
|
largeSegments: new MySegmentsCacheInMemory_1.MySegmentsCacheInMemory(),
|
|
38
42
|
impressions: this.impressions,
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RBSegmentsCacheInMemory = void 0;
|
|
4
|
+
var sets_1 = require("../../utils/lang/sets");
|
|
5
|
+
var AbstractSplitsCacheSync_1 = require("../AbstractSplitsCacheSync");
|
|
6
|
+
var RBSegmentsCacheInMemory = /** @class */ (function () {
|
|
7
|
+
function RBSegmentsCacheInMemory() {
|
|
8
|
+
this.cache = {};
|
|
9
|
+
this.changeNumber = -1;
|
|
10
|
+
this.segmentsCount = 0;
|
|
11
|
+
}
|
|
12
|
+
RBSegmentsCacheInMemory.prototype.clear = function () {
|
|
13
|
+
this.cache = {};
|
|
14
|
+
this.changeNumber = -1;
|
|
15
|
+
this.segmentsCount = 0;
|
|
16
|
+
};
|
|
17
|
+
RBSegmentsCacheInMemory.prototype.update = function (toAdd, toRemove, changeNumber) {
|
|
18
|
+
var _this = this;
|
|
19
|
+
this.changeNumber = changeNumber;
|
|
20
|
+
var updated = toAdd.map(function (toAdd) { return _this.add(toAdd); }).some(function (result) { return result; });
|
|
21
|
+
return toRemove.map(function (toRemove) { return _this.remove(toRemove.name); }).some(function (result) { return result; }) || updated;
|
|
22
|
+
};
|
|
23
|
+
RBSegmentsCacheInMemory.prototype.add = function (rbSegment) {
|
|
24
|
+
var name = rbSegment.name;
|
|
25
|
+
var previous = this.get(name);
|
|
26
|
+
if (previous && (0, AbstractSplitsCacheSync_1.usesSegments)(previous))
|
|
27
|
+
this.segmentsCount--;
|
|
28
|
+
this.cache[name] = rbSegment;
|
|
29
|
+
if ((0, AbstractSplitsCacheSync_1.usesSegments)(rbSegment))
|
|
30
|
+
this.segmentsCount++;
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
|
+
RBSegmentsCacheInMemory.prototype.remove = function (name) {
|
|
34
|
+
var rbSegment = this.get(name);
|
|
35
|
+
if (!rbSegment)
|
|
36
|
+
return false;
|
|
37
|
+
delete this.cache[name];
|
|
38
|
+
if ((0, AbstractSplitsCacheSync_1.usesSegments)(rbSegment))
|
|
39
|
+
this.segmentsCount--;
|
|
40
|
+
return true;
|
|
41
|
+
};
|
|
42
|
+
RBSegmentsCacheInMemory.prototype.getNames = function () {
|
|
43
|
+
return Object.keys(this.cache);
|
|
44
|
+
};
|
|
45
|
+
RBSegmentsCacheInMemory.prototype.get = function (name) {
|
|
46
|
+
return this.cache[name] || null;
|
|
47
|
+
};
|
|
48
|
+
RBSegmentsCacheInMemory.prototype.contains = function (names) {
|
|
49
|
+
var namesArray = (0, sets_1.setToArray)(names);
|
|
50
|
+
var namesInStorage = this.getNames();
|
|
51
|
+
return namesArray.every(function (name) { return namesInStorage.indexOf(name) !== -1; });
|
|
52
|
+
};
|
|
53
|
+
RBSegmentsCacheInMemory.prototype.getChangeNumber = function () {
|
|
54
|
+
return this.changeNumber;
|
|
55
|
+
};
|
|
56
|
+
RBSegmentsCacheInMemory.prototype.usesSegments = function () {
|
|
57
|
+
return this.segmentsCount > 0;
|
|
58
|
+
};
|
|
59
|
+
return RBSegmentsCacheInMemory;
|
|
60
|
+
}());
|
|
61
|
+
exports.RBSegmentsCacheInMemory = RBSegmentsCacheInMemory;
|
|
@@ -25,7 +25,8 @@ var SplitsCacheInMemory = /** @class */ (function (_super) {
|
|
|
25
25
|
this.changeNumber = -1;
|
|
26
26
|
this.segmentsCount = 0;
|
|
27
27
|
};
|
|
28
|
-
SplitsCacheInMemory.prototype.addSplit = function (
|
|
28
|
+
SplitsCacheInMemory.prototype.addSplit = function (split) {
|
|
29
|
+
var name = split.name;
|
|
29
30
|
var previousSplit = this.getSplit(name);
|
|
30
31
|
if (previousSplit) { // We had this Split already
|
|
31
32
|
var previousTtName = previousSplit.trafficTypeName;
|
|
@@ -37,40 +38,32 @@ var SplitsCacheInMemory = /** @class */ (function (_super) {
|
|
|
37
38
|
if ((0, AbstractSplitsCacheSync_1.usesSegments)(previousSplit))
|
|
38
39
|
this.segmentsCount--;
|
|
39
40
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
41
|
+
// Store the Split.
|
|
42
|
+
this.splitsCache[name] = split;
|
|
43
|
+
// Update TT cache
|
|
44
|
+
var ttName = split.trafficTypeName;
|
|
45
|
+
this.ttCache[ttName] = (this.ttCache[ttName] || 0) + 1;
|
|
46
|
+
this.addToFlagSets(split);
|
|
47
|
+
// Add to segments count for the new version of the Split
|
|
48
|
+
if ((0, AbstractSplitsCacheSync_1.usesSegments)(split))
|
|
49
|
+
this.segmentsCount++;
|
|
50
|
+
return true;
|
|
55
51
|
};
|
|
56
52
|
SplitsCacheInMemory.prototype.removeSplit = function (name) {
|
|
57
53
|
var split = this.getSplit(name);
|
|
58
|
-
if (split)
|
|
59
|
-
// Delete the Split
|
|
60
|
-
delete this.splitsCache[name];
|
|
61
|
-
var ttName = split.trafficTypeName;
|
|
62
|
-
this.ttCache[ttName]--; // Update tt cache
|
|
63
|
-
if (!this.ttCache[ttName])
|
|
64
|
-
delete this.ttCache[ttName];
|
|
65
|
-
this.removeFromFlagSets(split.name, split.sets);
|
|
66
|
-
// Update the segments count.
|
|
67
|
-
if ((0, AbstractSplitsCacheSync_1.usesSegments)(split))
|
|
68
|
-
this.segmentsCount--;
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
54
|
+
if (!split)
|
|
72
55
|
return false;
|
|
73
|
-
|
|
56
|
+
// Delete the Split
|
|
57
|
+
delete this.splitsCache[name];
|
|
58
|
+
var ttName = split.trafficTypeName;
|
|
59
|
+
this.ttCache[ttName]--; // Update tt cache
|
|
60
|
+
if (!this.ttCache[ttName])
|
|
61
|
+
delete this.ttCache[ttName];
|
|
62
|
+
this.removeFromFlagSets(split.name, split.sets);
|
|
63
|
+
// Update the segments count.
|
|
64
|
+
if ((0, AbstractSplitsCacheSync_1.usesSegments)(split))
|
|
65
|
+
this.segmentsCount--;
|
|
66
|
+
return true;
|
|
74
67
|
};
|
|
75
68
|
SplitsCacheInMemory.prototype.getSplit = function (name) {
|
|
76
69
|
return this.splitsCache[name] || null;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RBSegmentsCacheInRedis = void 0;
|
|
4
|
+
var lang_1 = require("../../utils/lang");
|
|
5
|
+
var constants_1 = require("./constants");
|
|
6
|
+
var sets_1 = require("../../utils/lang/sets");
|
|
7
|
+
var RBSegmentsCacheInRedis = /** @class */ (function () {
|
|
8
|
+
function RBSegmentsCacheInRedis(log, keys, redis) {
|
|
9
|
+
this.log = log;
|
|
10
|
+
this.keys = keys;
|
|
11
|
+
this.redis = redis;
|
|
12
|
+
}
|
|
13
|
+
RBSegmentsCacheInRedis.prototype.get = function (name) {
|
|
14
|
+
return this.redis.get(this.keys.buildRBSegmentKey(name))
|
|
15
|
+
.then(function (maybeRBSegment) { return maybeRBSegment && JSON.parse(maybeRBSegment); });
|
|
16
|
+
};
|
|
17
|
+
RBSegmentsCacheInRedis.prototype.getNames = function () {
|
|
18
|
+
var _this = this;
|
|
19
|
+
return this.redis.keys(this.keys.searchPatternForRBSegmentKeys()).then(function (listOfKeys) { return listOfKeys.map(_this.keys.extractKey); });
|
|
20
|
+
};
|
|
21
|
+
RBSegmentsCacheInRedis.prototype.contains = function (names) {
|
|
22
|
+
var namesArray = (0, sets_1.setToArray)(names);
|
|
23
|
+
return this.getNames().then(function (namesInStorage) {
|
|
24
|
+
return namesArray.every(function (name) { return namesInStorage.includes(name); });
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
RBSegmentsCacheInRedis.prototype.update = function (toAdd, toRemove, changeNumber) {
|
|
28
|
+
var _this = this;
|
|
29
|
+
return Promise.all([
|
|
30
|
+
this.setChangeNumber(changeNumber),
|
|
31
|
+
Promise.all(toAdd.map(function (toAdd) {
|
|
32
|
+
var key = _this.keys.buildRBSegmentKey(toAdd.name);
|
|
33
|
+
var stringifiedNewRBSegment = JSON.stringify(toAdd);
|
|
34
|
+
return _this.redis.set(key, stringifiedNewRBSegment).then(function () { return true; });
|
|
35
|
+
})),
|
|
36
|
+
Promise.all(toRemove.map(function (toRemove) {
|
|
37
|
+
var key = _this.keys.buildRBSegmentKey(toRemove.name);
|
|
38
|
+
return _this.redis.del(key).then(function (status) { return status === 1; });
|
|
39
|
+
}))
|
|
40
|
+
]).then(function (_a) {
|
|
41
|
+
var added = _a[1], removed = _a[2];
|
|
42
|
+
return added.some(function (result) { return result; }) || removed.some(function (result) { return result; });
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
RBSegmentsCacheInRedis.prototype.setChangeNumber = function (changeNumber) {
|
|
46
|
+
return this.redis.set(this.keys.buildRBSegmentsTillKey(), changeNumber + '').then(function (status) { return status === 'OK'; });
|
|
47
|
+
};
|
|
48
|
+
RBSegmentsCacheInRedis.prototype.getChangeNumber = function () {
|
|
49
|
+
var _this = this;
|
|
50
|
+
return this.redis.get(this.keys.buildRBSegmentsTillKey()).then(function (value) {
|
|
51
|
+
var i = parseInt(value, 10);
|
|
52
|
+
return (0, lang_1.isNaNNumber)(i) ? -1 : i;
|
|
53
|
+
}).catch(function (e) {
|
|
54
|
+
_this.log.error(constants_1.LOG_PREFIX + 'Could not retrieve changeNumber from storage. Error: ' + e);
|
|
55
|
+
return -1;
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
// @TODO implement if required by DataLoader or producer mode
|
|
59
|
+
RBSegmentsCacheInRedis.prototype.clear = function () {
|
|
60
|
+
return Promise.resolve();
|
|
61
|
+
};
|
|
62
|
+
return RBSegmentsCacheInRedis;
|
|
63
|
+
}());
|
|
64
|
+
exports.RBSegmentsCacheInRedis = RBSegmentsCacheInRedis;
|
|
@@ -67,8 +67,9 @@ var SplitsCacheInRedis = /** @class */ (function (_super) {
|
|
|
67
67
|
* The returned promise is resolved when the operation success
|
|
68
68
|
* or rejected if it fails (e.g., redis operation fails)
|
|
69
69
|
*/
|
|
70
|
-
SplitsCacheInRedis.prototype.addSplit = function (
|
|
70
|
+
SplitsCacheInRedis.prototype.addSplit = function (split) {
|
|
71
71
|
var _this = this;
|
|
72
|
+
var name = split.name;
|
|
72
73
|
var splitKey = this.keys.buildSplitKey(name);
|
|
73
74
|
return this.redis.get(splitKey).then(function (splitFromStorage) {
|
|
74
75
|
// handling parsing error
|
|
@@ -92,18 +93,9 @@ var SplitsCacheInRedis = /** @class */ (function (_super) {
|
|
|
92
93
|
}).then(function () { return _this._updateFlagSets(name, parsedPreviousSplit && parsedPreviousSplit.sets, split.sets); });
|
|
93
94
|
}).then(function () { return true; });
|
|
94
95
|
};
|
|
95
|
-
/**
|
|
96
|
-
* Add a list of splits.
|
|
97
|
-
* The returned promise is resolved when the operation success
|
|
98
|
-
* or rejected if it fails (e.g., redis operation fails)
|
|
99
|
-
*/
|
|
100
|
-
SplitsCacheInRedis.prototype.addSplits = function (entries) {
|
|
101
|
-
var _this = this;
|
|
102
|
-
return Promise.all(entries.map(function (keyValuePair) { return _this.addSplit(keyValuePair[0], keyValuePair[1]); }));
|
|
103
|
-
};
|
|
104
96
|
/**
|
|
105
97
|
* Remove a given split.
|
|
106
|
-
* The returned promise is resolved when the operation success, with
|
|
98
|
+
* The returned promise is resolved when the operation success, with true or false indicating if the split existed (and was removed) or not.
|
|
107
99
|
* or rejected if it fails (e.g., redis operation fails).
|
|
108
100
|
*/
|
|
109
101
|
SplitsCacheInRedis.prototype.removeSplit = function (name) {
|
|
@@ -113,18 +105,9 @@ var SplitsCacheInRedis = /** @class */ (function (_super) {
|
|
|
113
105
|
return _this._decrementCounts(split).then(function () { return _this._updateFlagSets(name, split.sets); });
|
|
114
106
|
}
|
|
115
107
|
}).then(function () {
|
|
116
|
-
return _this.redis.del(_this.keys.buildSplitKey(name));
|
|
108
|
+
return _this.redis.del(_this.keys.buildSplitKey(name)).then(function (status) { return status === 1; });
|
|
117
109
|
});
|
|
118
110
|
};
|
|
119
|
-
/**
|
|
120
|
-
* Remove a list of splits.
|
|
121
|
-
* The returned promise is resolved when the operation success,
|
|
122
|
-
* or rejected if it fails (e.g., redis operation fails).
|
|
123
|
-
*/
|
|
124
|
-
SplitsCacheInRedis.prototype.removeSplits = function (names) {
|
|
125
|
-
var _this = this;
|
|
126
|
-
return Promise.all(names.map(function (name) { return _this.removeSplit(name); }));
|
|
127
|
-
};
|
|
128
111
|
/**
|
|
129
112
|
* Get split definition or null if it's not defined.
|
|
130
113
|
* Returned promise is rejected if redis operation fails.
|
|
@@ -12,6 +12,7 @@ var TelemetryCacheInRedis_1 = require("./TelemetryCacheInRedis");
|
|
|
12
12
|
var UniqueKeysCacheInRedis_1 = require("./UniqueKeysCacheInRedis");
|
|
13
13
|
var ImpressionCountsCacheInRedis_1 = require("./ImpressionCountsCacheInRedis");
|
|
14
14
|
var utils_1 = require("../utils");
|
|
15
|
+
var RBSegmentsCacheInRedis_1 = require("./RBSegmentsCacheInRedis");
|
|
15
16
|
/**
|
|
16
17
|
* InRedis storage factory for consumer server-side SplitFactory, that uses `Ioredis` Redis client for Node.js
|
|
17
18
|
* @see {@link https://www.npmjs.com/package/ioredis}
|
|
@@ -40,6 +41,7 @@ function InRedisStorage(options) {
|
|
|
40
41
|
});
|
|
41
42
|
return {
|
|
42
43
|
splits: new SplitsCacheInRedis_1.SplitsCacheInRedis(log, keys, redisClient, settings.sync.__splitFiltersValidation),
|
|
44
|
+
rbSegments: new RBSegmentsCacheInRedis_1.RBSegmentsCacheInRedis(log, keys, redisClient),
|
|
43
45
|
segments: new SegmentsCacheInRedis_1.SegmentsCacheInRedis(log, keys, redisClient),
|
|
44
46
|
impressions: new ImpressionsCacheInRedis_1.ImpressionsCacheInRedis(log, keys.buildImpressionsKey(), redisClient, metadata),
|
|
45
47
|
impressionCounts: impressionCountsCache,
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RBSegmentsCachePluggable = void 0;
|
|
4
|
+
var lang_1 = require("../../utils/lang");
|
|
5
|
+
var constants_1 = require("./constants");
|
|
6
|
+
var sets_1 = require("../../utils/lang/sets");
|
|
7
|
+
var RBSegmentsCachePluggable = /** @class */ (function () {
|
|
8
|
+
function RBSegmentsCachePluggable(log, keys, wrapper) {
|
|
9
|
+
this.log = log;
|
|
10
|
+
this.keys = keys;
|
|
11
|
+
this.wrapper = wrapper;
|
|
12
|
+
}
|
|
13
|
+
RBSegmentsCachePluggable.prototype.get = function (name) {
|
|
14
|
+
return this.wrapper.get(this.keys.buildRBSegmentKey(name))
|
|
15
|
+
.then(function (maybeRBSegment) { return maybeRBSegment && JSON.parse(maybeRBSegment); });
|
|
16
|
+
};
|
|
17
|
+
RBSegmentsCachePluggable.prototype.getNames = function () {
|
|
18
|
+
var _this = this;
|
|
19
|
+
return this.wrapper.getKeysByPrefix(this.keys.buildRBSegmentKeyPrefix()).then(function (listOfKeys) { return listOfKeys.map(_this.keys.extractKey); });
|
|
20
|
+
};
|
|
21
|
+
RBSegmentsCachePluggable.prototype.contains = function (names) {
|
|
22
|
+
var namesArray = (0, sets_1.setToArray)(names);
|
|
23
|
+
return this.getNames().then(function (namesInStorage) {
|
|
24
|
+
return namesArray.every(function (name) { return namesInStorage.includes(name); });
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
RBSegmentsCachePluggable.prototype.update = function (toAdd, toRemove, changeNumber) {
|
|
28
|
+
var _this = this;
|
|
29
|
+
return Promise.all([
|
|
30
|
+
this.setChangeNumber(changeNumber),
|
|
31
|
+
Promise.all(toAdd.map(function (toAdd) {
|
|
32
|
+
var key = _this.keys.buildRBSegmentKey(toAdd.name);
|
|
33
|
+
var stringifiedNewRBSegment = JSON.stringify(toAdd);
|
|
34
|
+
return _this.wrapper.set(key, stringifiedNewRBSegment).then(function () { return true; });
|
|
35
|
+
})),
|
|
36
|
+
Promise.all(toRemove.map(function (toRemove) {
|
|
37
|
+
var key = _this.keys.buildRBSegmentKey(toRemove.name);
|
|
38
|
+
return _this.wrapper.del(key);
|
|
39
|
+
}))
|
|
40
|
+
]).then(function (_a) {
|
|
41
|
+
var added = _a[1], removed = _a[2];
|
|
42
|
+
return added.some(function (result) { return result; }) || removed.some(function (result) { return result; });
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
RBSegmentsCachePluggable.prototype.setChangeNumber = function (changeNumber) {
|
|
46
|
+
return this.wrapper.set(this.keys.buildRBSegmentsTillKey(), changeNumber + '');
|
|
47
|
+
};
|
|
48
|
+
RBSegmentsCachePluggable.prototype.getChangeNumber = function () {
|
|
49
|
+
var _this = this;
|
|
50
|
+
return this.wrapper.get(this.keys.buildRBSegmentsTillKey()).then(function (value) {
|
|
51
|
+
var i = parseInt(value, 10);
|
|
52
|
+
return (0, lang_1.isNaNNumber)(i) ? -1 : i;
|
|
53
|
+
}).catch(function (e) {
|
|
54
|
+
_this.log.error(constants_1.LOG_PREFIX + 'Could not retrieve changeNumber from storage. Error: ' + e);
|
|
55
|
+
return -1;
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
// @TODO implement if required by DataLoader or producer mode
|
|
59
|
+
RBSegmentsCachePluggable.prototype.clear = function () {
|
|
60
|
+
return Promise.resolve();
|
|
61
|
+
};
|
|
62
|
+
return RBSegmentsCachePluggable;
|
|
63
|
+
}());
|
|
64
|
+
exports.RBSegmentsCachePluggable = RBSegmentsCachePluggable;
|
|
@@ -54,8 +54,9 @@ var SplitsCachePluggable = /** @class */ (function (_super) {
|
|
|
54
54
|
* The returned promise is resolved when the operation success
|
|
55
55
|
* or rejected if it fails (e.g., wrapper operation fails)
|
|
56
56
|
*/
|
|
57
|
-
SplitsCachePluggable.prototype.addSplit = function (
|
|
57
|
+
SplitsCachePluggable.prototype.addSplit = function (split) {
|
|
58
58
|
var _this = this;
|
|
59
|
+
var name = split.name;
|
|
59
60
|
var splitKey = this.keys.buildSplitKey(name);
|
|
60
61
|
return this.wrapper.get(splitKey).then(function (splitFromStorage) {
|
|
61
62
|
// handling parsing error
|
|
@@ -79,15 +80,6 @@ var SplitsCachePluggable = /** @class */ (function (_super) {
|
|
|
79
80
|
}).then(function () { return _this._updateFlagSets(name, parsedPreviousSplit && parsedPreviousSplit.sets, split.sets); });
|
|
80
81
|
}).then(function () { return true; });
|
|
81
82
|
};
|
|
82
|
-
/**
|
|
83
|
-
* Add a list of splits.
|
|
84
|
-
* The returned promise is resolved when the operation success
|
|
85
|
-
* or rejected if it fails (e.g., wrapper operation fails)
|
|
86
|
-
*/
|
|
87
|
-
SplitsCachePluggable.prototype.addSplits = function (entries) {
|
|
88
|
-
var _this = this;
|
|
89
|
-
return Promise.all(entries.map(function (keyValuePair) { return _this.addSplit(keyValuePair[0], keyValuePair[1]); }));
|
|
90
|
-
};
|
|
91
83
|
/**
|
|
92
84
|
* Remove a given split.
|
|
93
85
|
* The returned promise is resolved when the operation success, with a boolean indicating if the split existed or not.
|
|
@@ -103,15 +95,6 @@ var SplitsCachePluggable = /** @class */ (function (_super) {
|
|
|
103
95
|
return _this.wrapper.del(_this.keys.buildSplitKey(name));
|
|
104
96
|
});
|
|
105
97
|
};
|
|
106
|
-
/**
|
|
107
|
-
* Remove a list of splits.
|
|
108
|
-
* The returned promise is resolved when the operation success, with a boolean array indicating if the splits existed or not.
|
|
109
|
-
* or rejected if it fails (e.g., wrapper operation fails).
|
|
110
|
-
*/
|
|
111
|
-
SplitsCachePluggable.prototype.removeSplits = function (names) {
|
|
112
|
-
var _this = this;
|
|
113
|
-
return Promise.all(names.map(function (name) { return _this.removeSplit(name); }));
|
|
114
|
-
};
|
|
115
98
|
/**
|
|
116
99
|
* Get split.
|
|
117
100
|
* The returned promise is resolved with the split definition or null if it's not defined,
|
|
@@ -22,6 +22,7 @@ var UniqueKeysCacheInMemory_1 = require("../inMemory/UniqueKeysCacheInMemory");
|
|
|
22
22
|
var UniqueKeysCacheInMemoryCS_1 = require("../inMemory/UniqueKeysCacheInMemoryCS");
|
|
23
23
|
var utils_1 = require("../utils");
|
|
24
24
|
var constants_2 = require("../pluggable/constants");
|
|
25
|
+
var RBSegmentsCachePluggable_1 = require("./RBSegmentsCachePluggable");
|
|
25
26
|
var NO_VALID_WRAPPER = 'Expecting pluggable storage `wrapper` in options, but no valid wrapper instance was provided.';
|
|
26
27
|
var NO_VALID_WRAPPER_INTERFACE = 'The provided wrapper instance doesn’t follow the expected interface. Check our docs.';
|
|
27
28
|
/**
|
|
@@ -104,6 +105,7 @@ function PluggableStorage(options) {
|
|
|
104
105
|
});
|
|
105
106
|
return {
|
|
106
107
|
splits: new SplitsCachePluggable_1.SplitsCachePluggable(log, keys, wrapper, settings.sync.__splitFiltersValidation),
|
|
108
|
+
rbSegments: new RBSegmentsCachePluggable_1.RBSegmentsCachePluggable(log, keys, wrapper),
|
|
107
109
|
segments: new SegmentsCachePluggable_1.SegmentsCachePluggable(log, keys, wrapper),
|
|
108
110
|
impressions: isPartialConsumer ? new ImpressionsCacheInMemory_1.ImpressionsCacheInMemory(impressionsQueueSize) : new ImpressionsCachePluggable_1.ImpressionsCachePluggable(log, keys.buildImpressionsKey(), wrapper, metadata),
|
|
109
111
|
impressionCounts: impressionCountsCache,
|
|
@@ -26,22 +26,21 @@ function fromObjectUpdaterFactory(splitsParser, storage, readiness, settings) {
|
|
|
26
26
|
if (!loadError && splitsMock) {
|
|
27
27
|
log.debug(constants_3.SYNC_OFFLINE_DATA, [JSON.stringify(splitsMock)]);
|
|
28
28
|
(0, lang_1.forOwn)(splitsMock, function (val, name) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
]);
|
|
29
|
+
// @ts-ignore Split changeNumber and seed is undefined in localhost mode
|
|
30
|
+
splits.push({
|
|
31
|
+
name: name,
|
|
32
|
+
status: 'ACTIVE',
|
|
33
|
+
killed: false,
|
|
34
|
+
trafficAllocation: 100,
|
|
35
|
+
defaultTreatment: constants_1.CONTROL,
|
|
36
|
+
conditions: val.conditions || [],
|
|
37
|
+
configurations: val.configurations,
|
|
38
|
+
trafficTypeName: val.trafficTypeName
|
|
39
|
+
});
|
|
41
40
|
});
|
|
42
41
|
return Promise.all([
|
|
43
42
|
splitsCache.clear(),
|
|
44
|
-
splitsCache.
|
|
43
|
+
splitsCache.update(splits, [], Date.now())
|
|
45
44
|
]).then(function () {
|
|
46
45
|
readiness.splits.emit(constants_2.SDK_SPLITS_ARRIVED);
|
|
47
46
|
if (startingUp) {
|
|
@@ -6,10 +6,10 @@ exports.splitChangesFetcherFactory = void 0;
|
|
|
6
6
|
* SplitChanges fetcher is a wrapper around `splitChanges` API service that parses the response and handle errors.
|
|
7
7
|
*/
|
|
8
8
|
function splitChangesFetcherFactory(fetchSplitChanges) {
|
|
9
|
-
return function splitChangesFetcher(since, noCache, till,
|
|
9
|
+
return function splitChangesFetcher(since, noCache, till, rbSince,
|
|
10
10
|
// Optional decorator for `fetchSplitChanges` promise, such as timeout or time tracker
|
|
11
11
|
decorator) {
|
|
12
|
-
var splitsPromise = fetchSplitChanges(since, noCache, till);
|
|
12
|
+
var splitsPromise = fetchSplitChanges(since, noCache, till, rbSince);
|
|
13
13
|
if (decorator)
|
|
14
14
|
splitsPromise = decorator(splitsPromise);
|
|
15
15
|
return splitsPromise.then(function (resp) { return resp.json(); });
|
|
@@ -34,10 +34,10 @@ function pollingManagerCSFactory(params) {
|
|
|
34
34
|
readiness.splits.on(constants_1.SDK_SPLITS_ARRIVED, function () {
|
|
35
35
|
if (!splitsSyncTask.isRunning())
|
|
36
36
|
return; // noop if not doing polling
|
|
37
|
-
var
|
|
38
|
-
if (
|
|
39
|
-
log.info(constants_2.POLLING_SMART_PAUSING, [
|
|
40
|
-
if (
|
|
37
|
+
var usingSegments = storage.splits.usesSegments() || storage.rbSegments.usesSegments();
|
|
38
|
+
if (usingSegments !== mySegmentsSyncTask.isRunning()) {
|
|
39
|
+
log.info(constants_2.POLLING_SMART_PAUSING, [usingSegments ? 'ON' : 'OFF']);
|
|
40
|
+
if (usingSegments) {
|
|
41
41
|
startMySegmentsSyncTasks();
|
|
42
42
|
}
|
|
43
43
|
else {
|
|
@@ -49,10 +49,10 @@ function pollingManagerCSFactory(params) {
|
|
|
49
49
|
var mySegmentsSyncTask = (0, mySegmentsSyncTask_1.mySegmentsSyncTaskFactory)(splitApi.fetchMemberships, storage, readiness, settings, matchingKey);
|
|
50
50
|
// smart ready
|
|
51
51
|
function smartReady() {
|
|
52
|
-
if (!readiness.isReady() && !storage.splits.usesSegments())
|
|
52
|
+
if (!readiness.isReady() && !storage.splits.usesSegments() && !storage.rbSegments.usesSegments())
|
|
53
53
|
readiness.segments.emit(constants_1.SDK_SEGMENTS_ARRIVED);
|
|
54
54
|
}
|
|
55
|
-
if (!storage.splits.usesSegments())
|
|
55
|
+
if (!storage.splits.usesSegments() && !storage.rbSegments.usesSegments())
|
|
56
56
|
setTimeout(smartReady, 0);
|
|
57
57
|
else
|
|
58
58
|
readiness.splits.once(constants_1.SDK_SPLITS_ARRIVED, smartReady);
|
|
@@ -66,7 +66,7 @@ function pollingManagerCSFactory(params) {
|
|
|
66
66
|
start: function () {
|
|
67
67
|
log.info(constants_2.POLLING_START);
|
|
68
68
|
splitsSyncTask.start();
|
|
69
|
-
if (storage.splits.usesSegments())
|
|
69
|
+
if (storage.splits.usesSegments() || storage.rbSegments.usesSegments())
|
|
70
70
|
startMySegmentsSyncTasks();
|
|
71
71
|
},
|
|
72
72
|
// Stop periodic fetching (polling)
|
|
@@ -8,6 +8,6 @@ var splitChangesUpdater_1 = require("../updaters/splitChangesUpdater");
|
|
|
8
8
|
* Creates a sync task that periodically executes a `splitChangesUpdater` task
|
|
9
9
|
*/
|
|
10
10
|
function splitsSyncTaskFactory(fetchSplitChanges, storage, readiness, settings, isClientSide) {
|
|
11
|
-
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, splitChangesUpdater_1.splitChangesUpdaterFactory)(settings.log, (0, splitChangesFetcher_1.splitChangesFetcherFactory)(fetchSplitChanges), storage
|
|
11
|
+
return (0, syncTask_1.syncTaskFactory)(settings.log, (0, splitChangesUpdater_1.splitChangesUpdaterFactory)(settings.log, (0, splitChangesFetcher_1.splitChangesFetcherFactory)(fetchSplitChanges), storage, settings.sync.__splitFiltersValidation, readiness.splits, settings.startup.requestTimeoutBeforeReady, settings.startup.retriesOnFailureBeforeReady, isClientSide), settings.scheduler.featuresRefreshRate, 'splitChangesUpdater');
|
|
12
12
|
}
|
|
13
13
|
exports.splitsSyncTaskFactory = splitsSyncTaskFactory;
|
|
@@ -12,7 +12,7 @@ var constants_3 = require("../../streaming/constants");
|
|
|
12
12
|
* - uses `segmentsEventEmitter` to emit events related to segments data updates
|
|
13
13
|
*/
|
|
14
14
|
function mySegmentsUpdaterFactory(log, mySegmentsFetcher, storage, segmentsEventEmitter, requestTimeoutBeforeReady, retriesOnFailureBeforeReady, matchingKey) {
|
|
15
|
-
var splits = storage.splits, segments = storage.segments, largeSegments = storage.largeSegments;
|
|
15
|
+
var splits = storage.splits, rbSegments = storage.rbSegments, segments = storage.segments, largeSegments = storage.largeSegments;
|
|
16
16
|
var readyOnAlreadyExistentState = true;
|
|
17
17
|
var startingUp = true;
|
|
18
18
|
/** timeout and telemetry decorator for `splitChangesFetcher` promise */
|
|
@@ -34,7 +34,7 @@ function mySegmentsUpdaterFactory(log, mySegmentsFetcher, storage, segmentsEvent
|
|
|
34
34
|
shouldNotifyUpdate = largeSegments.resetSegments(segmentsData.ls || {}) || shouldNotifyUpdate;
|
|
35
35
|
}
|
|
36
36
|
// Notify update if required
|
|
37
|
-
if (splits.usesSegments() && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
|
|
37
|
+
if ((splits.usesSegments() || rbSegments.usesSegments()) && (shouldNotifyUpdate || readyOnAlreadyExistentState)) {
|
|
38
38
|
readyOnAlreadyExistentState = false;
|
|
39
39
|
segmentsEventEmitter.emit(constants_1.SDK_SEGMENTS_ARRIVED);
|
|
40
40
|
}
|