Skip to content

[FME-4401] - Pausing - E2E Test 3 #707

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 127 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
9c0815f
Initial commit
MartinCardozo-SDK Jul 11, 2025
f620cf9
Feature working. Remove unnecessary access points and logs
MartinCardozo-SDK Jul 14, 2025
f722570
Tests added
MartinCardozo-SDK Jul 14, 2025
70e21de
Cleanup
MartinCardozo-SDK Jul 14, 2025
a7e30c2
Cleanup
MartinCardozo-SDK Jul 14, 2025
ca9db35
Cleanup
MartinCardozo-SDK Jul 14, 2025
157a04d
Cleanup
MartinCardozo-SDK Jul 14, 2025
454c86f
Cleanup
MartinCardozo-SDK Jul 14, 2025
84dfbd2
Merge pull request #698 from splitio/FME-4396-Pausing-GeneralInfo
MartinCardozo-SDK Jul 14, 2025
b9dd22a
Initial Commit
MartinCardozo-SDK Jul 14, 2025
ddd823e
Typo
MartinCardozo-SDK Jul 14, 2025
16fcbc4
Test added
MartinCardozo-SDK Jul 15, 2025
ba2fa90
Cleanup
MartinCardozo-SDK Jul 15, 2025
e566468
Minor optimization
MartinCardozo-SDK Jul 15, 2025
cd95cf0
Improved notation for safety
MartinCardozo-SDK Jul 15, 2025
fbb28b6
Update RuleBasedSegmentsStorage.swift
MartinCardozo-SDK Jul 15, 2025
602016f
Update SplitsStorage.swift
MartinCardozo-SDK Jul 15, 2025
3f264fd
Merge branch 'FME-4396-Pausing-DetectSegments' into FME-4398-Pausing-…
MartinCardozo-SDK Jul 15, 2025
386b99c
Tests added
MartinCardozo-SDK Jul 15, 2025
e3543d8
Update PersistentRuleBasedSegmentsStorage.swift
MartinCardozo-SDK Jul 15, 2025
9211ff7
Update PersistentRuleBasedSegmentStorageTest.swift
MartinCardozo-SDK Jul 15, 2025
9bf84db
Update RuleBasedSegmentStorageTest.swift
MartinCardozo-SDK Jul 15, 2025
649b1a5
Update SplitsStorage.swift
MartinCardozo-SDK Jul 15, 2025
670136a
Tests restored
MartinCardozo-SDK Jul 15, 2025
8728b0d
Merge branch 'FME-4396-Pausing-DetectSegments' into FME-4398-Pausing-…
MartinCardozo-SDK Jul 15, 2025
dcd5314
Abstracted filtering method. New helper
MartinCardozo-SDK Jul 15, 2025
6b0522a
Test improved
MartinCardozo-SDK Jul 15, 2025
b6f3ef9
Minor improvement on test
MartinCardozo-SDK Jul 15, 2025
afd7be9
Merge branch 'FME-4396-Pausing-DetectSegments' into FME-4398-Pausing-…
MartinCardozo-SDK Jul 15, 2025
ac9edb1
Code improved
MartinCardozo-SDK Jul 15, 2025
da18453
Update SplitTests/Storage/RuleBasedSegmentStorageTest.swift
MartinCardozo-SDK Jul 15, 2025
f17dc95
Test fixed
MartinCardozo-SDK Jul 15, 2025
26c86c7
Merge branch 'FME-439push-Pausing-DetectRBS' of github.com:splitio/io…
MartinCardozo-SDK Jul 15, 2025
4637345
Test fixed
MartinCardozo-SDK Jul 15, 2025
750c455
Update RuleBasedSegmentsStorageStub.swift
MartinCardozo-SDK Jul 16, 2025
4c0b2da
Update RuleBasedSegmentsStorage.swift
MartinCardozo-SDK Jul 16, 2025
22e63ef
Update RuleBasedSegmentsStorage.swift
MartinCardozo-SDK Jul 16, 2025
22f9515
Update RuleBasedSegmentStorageTest.swift
MartinCardozo-SDK Jul 16, 2025
6e9902a
Update RuleBasedSegmentsStorage.swift
MartinCardozo-SDK Jul 16, 2025
e9e913e
Update RuleBasedSegmentsStorageStub.swift
MartinCardozo-SDK Jul 16, 2025
9b01de6
Update RuleBasedSegmentStorageTest.swift
MartinCardozo-SDK Jul 16, 2025
85ff0d8
Merge pull request #701 from splitio/FME-4398-Pausing-DetectRBS
MartinCardozo-SDK Jul 16, 2025
d0a32a0
Merge pull request #699 from splitio/FME-4396-Pausing-DetectSegments
MartinCardozo-SDK Jul 16, 2025
3719afd
Initial commit
MartinCardozo-SDK Jul 17, 2025
c61301d
Changing branch
MartinCardozo-SDK Jul 17, 2025
a3c7d27
New flag for fecthing segments in MySegmentsSynchronizer, based on se…
MartinCardozo-SDK Jul 23, 2025
5135069
Some tests failing
MartinCardozo-SDK Jul 23, 2025
4e6ae92
Removed unused methods
MartinCardozo-SDK Jul 23, 2025
a963445
Update SplitsStorage.swift
MartinCardozo-SDK Jul 23, 2025
a8d5c52
Update EmptyMySegmentsStorage.swift
MartinCardozo-SDK Jul 23, 2025
189db16
Update RuleBasedSegmentsStorage.swift
MartinCardozo-SDK Jul 23, 2025
926828c
Update Synchronizer.swift
MartinCardozo-SDK Jul 23, 2025
f5841cf
Update ByKeyMySegmentsStorage.swift
MartinCardozo-SDK Jul 23, 2025
0854d4f
Update MyLargeSegmentsStorage.swift
MartinCardozo-SDK Jul 23, 2025
f92d74b
Segments counting logic fixed
MartinCardozo-SDK Jul 24, 2025
d7b43d3
Merge branch 'FME-4400-Pausing-PauseResume' of github.com:splitio/ios…
MartinCardozo-SDK Jul 24, 2025
98c22e0
Feature access point changed
MartinCardozo-SDK Jul 24, 2025
1c4ed06
Update PeriodicSyncWorker.swift
MartinCardozo-SDK Jul 24, 2025
2703b94
Update FeatureFlagsSynchronizer.swift
MartinCardozo-SDK Jul 24, 2025
fccd171
Update MySegmentsSynchronizer.swift
MartinCardozo-SDK Jul 24, 2025
261d024
Update Synchronizer.swift
MartinCardozo-SDK Jul 24, 2025
86d2ed0
Update SplitEventsManager.swift
MartinCardozo-SDK Jul 24, 2025
9583dfe
Update SplitEventsManager.swift
MartinCardozo-SDK Jul 24, 2025
7d52b16
Update SplitEventsManager.swift
MartinCardozo-SDK Jul 24, 2025
612efe7
Update MySegmentsSynchronizer.swift
MartinCardozo-SDK Jul 24, 2025
38dde91
Update MySegmentsSynchronizer.swift
MartinCardozo-SDK Jul 24, 2025
4428a5c
Update MySegmentsSynchronizer.swift
MartinCardozo-SDK Jul 24, 2025
359b1b9
Update InstantFeatureFlagsUpdateTest.swift
MartinCardozo-SDK Jul 24, 2025
1ffaa6d
Tests added
MartinCardozo-SDK Jul 24, 2025
014b34d
Merge branch 'FME-4400-Pausing-PauseResume' of github.com:splitio/ios…
MartinCardozo-SDK Jul 24, 2025
5a2b338
Initial commit
MartinCardozo-SDK Jul 25, 2025
4f23610
Test upgraded
MartinCardozo-SDK Jul 25, 2025
7345175
Tests passing
MartinCardozo-SDK Jul 25, 2025
0b44b57
Removed duplicated test
MartinCardozo-SDK Jul 25, 2025
5b27f74
Removed unnecessary code
MartinCardozo-SDK Jul 25, 2025
6f57d3b
Update MySegmentUpdateTest.swift
MartinCardozo-SDK Jul 25, 2025
d648562
Test passing
MartinCardozo-SDK Jul 25, 2025
1676525
Typo
MartinCardozo-SDK Jul 25, 2025
f3879ce
Merge branch 'FME-6992-Pausing-E2E1' into FME-4401-Pausing-E2E2
MartinCardozo-SDK Jul 25, 2025
54876da
Removed unnecessary code
MartinCardozo-SDK Jul 25, 2025
a0d34ca
Merge pull request #703 from splitio/FME-4400-Pausing-PauseResume
MartinCardozo-SDK Jul 25, 2025
2c75360
Merge pull request #704 from splitio/FME-6992-Pausing-E2E1
MartinCardozo-SDK Jul 25, 2025
7ca6a6a
Merge pull request #705 from splitio/FME-4401-Pausing-E2E2
MartinCardozo-SDK Jul 25, 2025
d2bee23
Test added
MartinCardozo-SDK Jul 28, 2025
2f148be
Test added
MartinCardozo-SDK Jul 28, 2025
0897ca5
Test fixed
MartinCardozo-SDK Jul 28, 2025
adf788f
Tests fixed
MartinCardozo-SDK Jul 28, 2025
606c54b
Update MySegmentUpdateTest.swift
MartinCardozo-SDK Jul 29, 2025
4ff7ead
Update MySegmentUpdateTest.swift
MartinCardozo-SDK Jul 29, 2025
36aae93
Update MySegmentUpdateTest.swift
MartinCardozo-SDK Jul 29, 2025
b298f1a
Initial commit
MartinCardozo-SDK Jul 29, 2025
500b3b9
Typo
MartinCardozo-SDK Jul 29, 2025
7701ed5
Merge branch 'FME-6994-Pausing-E2E4' into FME-6993-Pausing-E2E5
MartinCardozo-SDK Jul 29, 2025
6e689a6
Test added
MartinCardozo-SDK Jul 29, 2025
27039db
Merge branch 'FME-4401-Pausing-E2E3' into FME-6994-Pausing-E2E4
MartinCardozo-SDK Jul 29, 2025
0f72887
Merge branch 'FME-6994-Pausing-E2E4' into FME-6993-Pausing-E2E5
MartinCardozo-SDK Jul 29, 2025
4c39693
Flags renamed
MartinCardozo-SDK Jul 29, 2025
9c2a6fa
Merge pull request #710 from splitio/FME-6993-Pausing-E2E5
MartinCardozo-SDK Jul 29, 2025
0f2ce61
Update MySegmentUpdateTest.swift
MartinCardozo-SDK Jul 30, 2025
90afd27
Merge pull request #709 from splitio/FME-6994-Pausing-E2E4
MartinCardozo-SDK Jul 30, 2025
a7e5fc3
Reparsing for SplitStorage working and tested
MartinCardozo-SDK Jul 30, 2025
78522b8
Stable point. RBS flow pending.
MartinCardozo-SDK Jul 30, 2025
016e4b5
Cleanup
MartinCardozo-SDK Jul 30, 2025
30662ef
RBS now updates from cache
MartinCardozo-SDK Jul 30, 2025
dac901e
Persistence fixed
MartinCardozo-SDK Jul 30, 2025
0c214be
Comments removed
MartinCardozo-SDK Jul 31, 2025
20878d5
Merge branch 'development' into FME-4396-baseline
MartinCardozo-SDK Jul 31, 2025
4e07818
Merge branch 'FME-4396-baseline' into FME-4401-Pausing-E2E3
MartinCardozo-SDK Jul 31, 2025
688be26
Merge branch 'FME-4401-Pausing-E2E3' into FME-8288-Pausing-ReParsing
MartinCardozo-SDK Jul 31, 2025
7b602d5
Moved reparsing logic one level up
MartinCardozo-SDK Jul 31, 2025
59f8302
Test fixed
MartinCardozo-SDK Jul 31, 2025
cb43feb
Test fixed
MartinCardozo-SDK Jul 31, 2025
b6e27c9
Merge branch 'FME-4401-Pausing-E2E3' into FME-8288-Pausing-ReParsing
MartinCardozo-SDK Jul 31, 2025
0669783
Merge branch 'FME-4396-baseline' into FME-4401-Pausing-E2E3
MartinCardozo-SDK Jul 31, 2025
b2e02d2
Typo
MartinCardozo-SDK Jul 31, 2025
2ea1ffd
Update MySegmentUpdateTest.swift
MartinCardozo-SDK Jul 31, 2025
b2497e7
Update SplitTests/Integration/Api/SplitIntegrationTest.swift
MartinCardozo-SDK Jul 31, 2025
9a3cad9
Force pushed argument removed
MartinCardozo-SDK Aug 4, 2025
8347d0c
RBS Updated
MartinCardozo-SDK Aug 4, 2025
3697022
RBS working and tested
MartinCardozo-SDK Aug 4, 2025
d24eed8
Update RolloutCacheManager.swift
MartinCardozo-SDK Aug 4, 2025
c9216dc
Update RuleBasedSegmentsStorage.swift
MartinCardozo-SDK Aug 4, 2025
2c51ebb
Update RuleBasedSegmentsStorage.swift
MartinCardozo-SDK Aug 4, 2025
2ee9d5d
Update SplitsStorage.swift
MartinCardozo-SDK Aug 4, 2025
b40c3ca
Lazy parsing tested
MartinCardozo-SDK Aug 4, 2025
0b84e65
Restored private modifier for inMemorySplits and inMemorySegments
MartinCardozo-SDK Aug 5, 2025
008667a
Merge pull request #711 from splitio/FME-8288-Pausing-ReParsing
MartinCardozo-SDK Aug 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions Split.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,9 @@
59FB7C35220329B900ECC96A /* SplitFactoryBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59FB7C34220329B900ECC96A /* SplitFactoryBuilderTests.swift */; };
59FB7C3C2203795F00ECC96A /* LocalhostSplitsParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59FB7C3B2203795F00ECC96A /* LocalhostSplitsParser.swift */; };
59FB7C3E22037B9400ECC96A /* SpaceDelimitedLocalhostSplitsParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59FB7C3D22037B9400ECC96A /* SpaceDelimitedLocalhostSplitsParser.swift */; };
5B279CF92E340FC600B73A36 /* splitschanges_no_segments.json in Resources */ = {isa = PBXBuildFile; fileRef = 5B279CF82E340FB900B73A36 /* splitschanges_no_segments.json */; };
5B343EAD2E26E93B006BEBE7 /* StorageHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B343EAC2E26E937006BEBE7 /* StorageHelper.swift */; };
5B343EAE2E26E93B006BEBE7 /* StorageHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B343EAC2E26E937006BEBE7 /* StorageHelper.swift */; };
5B48D8172DEA2CED00351925 /* PrerequisitesMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF52DF52DE0B60300FEDAFE /* PrerequisitesMatcher.swift */; };
5B91B8392DDE4A3B000510F0 /* SplitDTOTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B91B8382DDE4A30000510F0 /* SplitDTOTests.swift */; };
5BF52DF72DE0B60700FEDAFE /* PrerequisitesMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF52DF52DE0B60300FEDAFE /* PrerequisitesMatcher.swift */; };
Expand Down Expand Up @@ -1557,6 +1560,8 @@
59FB7C34220329B900ECC96A /* SplitFactoryBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitFactoryBuilderTests.swift; sourceTree = "<group>"; };
59FB7C3B2203795F00ECC96A /* LocalhostSplitsParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalhostSplitsParser.swift; sourceTree = "<group>"; };
59FB7C3D22037B9400ECC96A /* SpaceDelimitedLocalhostSplitsParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceDelimitedLocalhostSplitsParser.swift; sourceTree = "<group>"; };
5B279CF82E340FB900B73A36 /* splitschanges_no_segments.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = splitschanges_no_segments.json; sourceTree = "<group>"; };
5B343EAC2E26E937006BEBE7 /* StorageHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageHelper.swift; sourceTree = "<group>"; };
5B91B8382DDE4A30000510F0 /* SplitDTOTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitDTOTests.swift; sourceTree = "<group>"; };
5BF52DF52DE0B60300FEDAFE /* PrerequisitesMatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrerequisitesMatcher.swift; sourceTree = "<group>"; };
5BF52DF82DE4B8CA00FEDAFE /* PrerequisitesMatcherTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrerequisitesMatcherTest.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2620,6 +2625,7 @@
5905D4DD2559C950006DA3B1 /* MySegments */,
3B6DEF0920EA6AE40067435E /* DefaultFileStorage.swift */,
5912D1462194715500BC698C /* FileStorage.swift */,
5B343EAC2E26E937006BEBE7 /* StorageHelper.swift */,
59E6A38825557C8D005DE642 /* split_cache.xcdatamodeld */,
5905D4D72555FE74006DA3B1 /* SplitDatabase.swift */,
955892AA25C187EA00F67FBA /* CoreDataContextBuilder.swift */,
Expand Down Expand Up @@ -2939,6 +2945,7 @@
592C6ADB211CBB86002D120C /* Resources */ = {
isa = PBXGroup;
children = (
5B279CF82E340FB900B73A36 /* splitschanges_no_segments.json */,
C5A7D5562DDBD4280081D190 /* split_changes_rbs.json */,
95F7BBD32C1A273900C5F2E4 /* Cert */,
C5977C052BF273A3003E293A /* between_semver.csv */,
Expand Down Expand Up @@ -3987,6 +3994,7 @@
95F7BBDE2C1A27C200C5F2E4 /* rsa_3072_public_01.pem in Resources */,
C5BD1E522D130FB6008EF198 /* splitchanges_toggle.json in Resources */,
95F7BBDA2C1A27C200C5F2E4 /* rsa_2048_public_01.pem in Resources */,
5B279CF92E340FC600B73A36 /* splitschanges_no_segments.json in Resources */,
592C6AED211CBBB0002D120C /* splitchanges_2.json in Resources */,
950F72FF292E8D6C008A0040 /* SplitiOSFull.xctestplan in Resources */,
59FB7C2A2202463000ECC96A /* localhost_1.splits in Resources */,
Expand Down Expand Up @@ -4241,6 +4249,7 @@
59F4AA9B24FE93E300A1C69A /* NotificationManagerKeeper.swift in Sources */,
95C1600D27D28CF4008562E3 /* PersistentAttributesStorage.swift in Sources */,
95726075262F548500350CCA /* SplitBgSynchronizer.swift in Sources */,
5B343EAE2E26E93B006BEBE7 /* StorageHelper.swift in Sources */,
95C1600B27D28CB8008562E3 /* OneKeyPersistentAttributesStorage.swift in Sources */,
5BF52DF72DE0B60700FEDAFE /* PrerequisitesMatcher.swift in Sources */,
9519A91127D6935700278AEC /* ByKeyAttributesStorage.swift in Sources */,
Expand Down Expand Up @@ -4802,6 +4811,7 @@
958FD8A12C51318B00E5609B /* PublicKeyHeaders.swift in Sources */,
956A7E17297043130080D53C /* ImpressionsStorage.swift in Sources */,
95B02DCD28D0BDE20030EC8B /* split_cache.xcdatamodeld in Sources */,
5B343EAD2E26E93B006BEBE7 /* StorageHelper.swift in Sources */,
95F0569129B63C61009F5A68 /* Cipher.swift in Sources */,
95B02CAB28D0BDC10030EC8B /* Yaml.swift in Sources */,
95B02CAC28D0BDC10030EC8B /* YAMLOperators.swift in Sources */,
Expand Down
15 changes: 8 additions & 7 deletions Split/Api/SplitDatabaseHelper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,11 @@ struct SplitDatabaseHelper {

let persistentEventsStorage = openPersistentEventsStorage(database: splitDatabase)
let eventsStorage = openEventsStorage(persistentStorage: persistentEventsStorage)

let generalInfoStorage = openGeneralInfoStorage(database: splitDatabase)

let mySegmentsStorage = openMySegmentsStorage(database: splitDatabase)
let myLargeSegmentsStorage = openMyLargeSegmentsStorage(database: splitDatabase)
let mySegmentsStorage = openMySegmentsStorage(database: splitDatabase, generalInfoStorage: generalInfoStorage)
let myLargeSegmentsStorage = openMyLargeSegmentsStorage(database: splitDatabase, generalInfoStorage: generalInfoStorage)
let attributesStorage = openAttributesStorage(database: splitDatabase,
splitClientConfig: splitClientConfig)

Expand All @@ -125,7 +127,6 @@ struct SplitDatabaseHelper {
let hashedImpressionsStorage = DefaultHashedImpressionsStorage(
cache: LRUCache(capacity: ServiceConstants.lastSeenImpressionCachSize),
persistentStorage: persistentHashedImpressionsStorage)
let generalInfoStorage = openGeneralInfoStorage(database: splitDatabase)

let persistentRuleBasedSegmentsStorage = DefaultPersistentRuleBasedSegmentsStorage(
database: splitDatabase,
Expand Down Expand Up @@ -187,14 +188,14 @@ struct SplitDatabaseHelper {
return DefaultPersistentMyLargeSegmentsStorage(database: database)
}

static func openMySegmentsStorage(database: SplitDatabase) -> MySegmentsStorage {
static func openMySegmentsStorage(database: SplitDatabase, generalInfoStorage: GeneralInfoStorage) -> MySegmentsStorage {
let persistentMySegmentsStorage = openPersistentMySegmentsStorage(database: database)
return DefaultMySegmentsStorage(persistentMySegmentsStorage: persistentMySegmentsStorage)
return DefaultMySegmentsStorage(persistentMySegmentsStorage: persistentMySegmentsStorage, generalInfoStorage: generalInfoStorage)
}

static func openMyLargeSegmentsStorage(database: SplitDatabase) -> MySegmentsStorage {
static func openMyLargeSegmentsStorage(database: SplitDatabase, generalInfoStorage: GeneralInfoStorage) -> MySegmentsStorage {
let persistentMyLargeSegmentsStorage = openPersistentMyLargeSegmentsStorage(database: database)
return MyLargeSegmentsStorage(persistentStorage: persistentMyLargeSegmentsStorage)
return MyLargeSegmentsStorage(persistentStorage: persistentMyLargeSegmentsStorage, generalInfoStorage: generalInfoStorage)
}

static func openPersistentAttributesStorage(database: SplitDatabase) -> PersistentAttributesStorage {
Expand Down
1 change: 0 additions & 1 deletion Split/Events/SplitEventsManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ class DefaultSplitEventsManager: SplitEventsManager {
self.eventsQueue.stop()
self.eventsQueue.stop()
}

}
}

Expand Down
4 changes: 4 additions & 0 deletions Split/FetcherEngine/Refresh/EmptyMySegmentsStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,8 @@ class EmptyMySegmentsStorage: MySegmentsStorage {

func clear() {
}

func isUsingSegments() -> Bool {
false
}
}
5 changes: 3 additions & 2 deletions Split/FetcherEngine/Refresh/PeriodicSyncWorker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,9 @@ class PeriodicMySegmentsSyncWorker: BasePeriodicSyncWorker {
}

override func fetchFromRemote() {
// Polling should be done once sdk ready is fired in initial sync
if !isSdkReadyFired() {
// Polling should be done once sdk ready is fired in initial sync, and if there are Segments in use.
// Both storages read the same value so we can use any of them (using myLargeSegmentsStorage).
if !isSdkReadyFired() || !(myLargeSegmentsStorage.isUsingSegments()) {
return
}

Expand Down
5 changes: 5 additions & 0 deletions Split/Localhost/LocalhostSplitsStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class LocalhostSplitsStorage: SplitsStorage {
var updateTimestamp: Int64 = 1
var splitsFilterQueryString: String = ""
var flagsSpec: String = ""
internal var segmentsInUse: Int64 = 0

private let inMemorySplits = ConcurrentDictionary<String, Split>()

Expand Down Expand Up @@ -75,4 +76,8 @@ class LocalhostSplitsStorage: SplitsStorage {
func destroy() {
inMemorySplits.removeAll()
}

func forceParsing() {

}
}
17 changes: 15 additions & 2 deletions Split/Network/Sync/FeatureFlagsSynchronizer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,26 @@ class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
return
}

let splitsStorage = self.storageContainer.splitsStorage
let splitsStorage = storageContainer.splitsStorage
let ruleBasedSegmentsStorage = storageContainer.ruleBasedSegmentsStorage
DispatchQueue.general.async {

DispatchQueue.general.async { [weak self] in
guard let self = self else { return }

let start = Date.nowMillis()
self.filterSplitsInCache()

// Part of /memberships hits optimization
if self.storageContainer.generalInfoStorage.getSegmentsInUse() == nil {
splitsStorage.forceParsing()
ruleBasedSegmentsStorage.forceParsing()
}

// Load local
splitsStorage.loadLocal()
ruleBasedSegmentsStorage.loadLocal()

// Events & Logs
if splitsStorage.getAll().count > 0 {
self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
}
Expand Down
8 changes: 2 additions & 6 deletions Split/Network/Sync/MySegmentsSynchronizer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ protocol MySegmentsSynchronizer {
func destroy()
}

// One instance per client
class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {

private let mySegmentsStorage: ByKeyMySegmentsStorage
Expand Down Expand Up @@ -98,6 +99,7 @@ class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
mySegmentsSyncWorker.start()
}

// Used for streaming
func forceMySegmentsSync(changeNumbers: SegmentsChangeNumber, delay: Int64) {
if isDestroyed.value {
return
Expand Down Expand Up @@ -149,12 +151,6 @@ class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
return
}

syncChangeNumbers?.mutate {
if $0.msChangeNumber <= changeNumbers.msChangeNumber,
changeNumbers.mlsChangeNumber <= changeNumbers.mlsChangeNumber {
}
}

if timerManager?.isScheduled(timer: .syncSegments) ?? false {
return
}
Expand Down
1 change: 1 addition & 0 deletions Split/Storage/GeneralInfo/GeneralInfoDao.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ enum GeneralInfo: String {
case rolloutCacheLastClearTimestamp = "rolloutCacheLastClearTimestamp"
case ruleBasedSegmentsChangeNumber = "ruleBasedSegmentsChangeNumber"
case lastProxyUpdateTimestamp = "lastProxyCheckTimestamp"
case segmentsInUse = "segmentsInUse"
}

protocol GeneralInfoDao {
Expand Down
12 changes: 12 additions & 0 deletions Split/Storage/GeneralInfo/GeneralInfoStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ protocol GeneralInfoStorage {
// Proxy handling methods
func getLastProxyUpdateTimestamp() -> Int64
func setLastProxyUpdateTimestamp(_ timestamp: Int64)

// Segments in use (for /memberships optimization)
func getSegmentsInUse() -> Int64?
func setSegmentsInUse(_ count: Int64)
}

class DefaultGeneralInfoStorage: GeneralInfoStorage {
Expand Down Expand Up @@ -78,4 +82,12 @@ class DefaultGeneralInfoStorage: GeneralInfoStorage {
func setLastProxyUpdateTimestamp(_ timestamp: Int64) {
generalInfoDao.update(info: .lastProxyUpdateTimestamp, longValue: timestamp)
}

func getSegmentsInUse() -> Int64? {
generalInfoDao.longValue(info: .segmentsInUse)
}

func setSegmentsInUse(_ count: Int64) {
generalInfoDao.update(info: .segmentsInUse, longValue: count)
}
}
8 changes: 7 additions & 1 deletion Split/Storage/MySegments/ByKeyMySegmentsStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@

import Foundation

protocol ByKeyMySegmentsStorage {
protocol ByKeyMySegmentsStorage: SegmentsChecker {
var changeNumber: Int64 { get }
func loadLocal()
func getAll() -> Set<String>
func set(_ change: SegmentChange)
func getCount() -> Int
}

// One instance per client
class DefaultByKeyMySegmentsStorage: ByKeyMySegmentsStorage {

private let mySegmentsStorage: MySegmentsStorage
Expand Down Expand Up @@ -48,4 +49,9 @@ class DefaultByKeyMySegmentsStorage: ByKeyMySegmentsStorage {
func getCount() -> Int {
return mySegmentsStorage.getCount(forKey: userKey)
}

// MARK: For Network Traffic Optimization
func isUsingSegments() -> Bool {
mySegmentsStorage.isUsingSegments()
}
}
9 changes: 8 additions & 1 deletion Split/Storage/MySegments/MyLargeSegmentsStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@ class MyLargeSegmentsStorage: MySegmentsStorage {
private let defaultChangeNumber = ServiceConstants.defaultSegmentsChangeNumber
private let syncQueue: DispatchQueue
private let syncQueueKey = DispatchSpecificKey<Void>()
private let generalInfoStorage: GeneralInfoStorage

var keys: Set<String> {
return inMemorySegments.keys
}

init(persistentStorage: PersistentMySegmentsStorage) {
init(persistentStorage: PersistentMySegmentsStorage, generalInfoStorage: GeneralInfoStorage) {
self.persistentStorage = persistentStorage
self.generalInfoStorage = generalInfoStorage
self.syncQueue = DispatchQueue(label: "split-large-segments-storage")
syncQueue.setSpecific(key: syncQueueKey, value: ())
}
Expand Down Expand Up @@ -92,4 +94,9 @@ class MyLargeSegmentsStorage: MySegmentsStorage {
return syncQueue.sync(execute: block)
}
}

// MARK: For Network Traffic Optimization
func isUsingSegments() -> Bool {
(generalInfoStorage.getSegmentsInUse() ?? 0) > 0
}
}
16 changes: 14 additions & 2 deletions Split/Storage/MySegments/MySegmentsStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import Foundation

protocol MySegmentsStorage: RolloutDefinitionsCache {
protocol MySegmentsStorage: RolloutDefinitionsCache, SegmentsChecker {
var keys: Set<String> { get }
func loadLocal(forKey key: String)
func changeNumber(forKey key: String) -> Int64?
Expand All @@ -21,17 +21,24 @@ protocol MySegmentsStorage: RolloutDefinitionsCache {
func getCount() -> Int
}

protocol SegmentsChecker {
func isUsingSegments() -> Bool
}

// One instance per factory
class DefaultMySegmentsStorage: MySegmentsStorage {

private var inMemoryMySegments: SynchronizedDictionarySet<String, String> = SynchronizedDictionarySet()
private let persistenStorage: PersistentMySegmentsStorage
private let generalInfoStorage: GeneralInfoStorage

var keys: Set<String> {
return inMemoryMySegments.keys
}

init(persistentMySegmentsStorage: PersistentMySegmentsStorage) {
init(persistentMySegmentsStorage: PersistentMySegmentsStorage, generalInfoStorage: GeneralInfoStorage) {
persistenStorage = persistentMySegmentsStorage
self.generalInfoStorage = generalInfoStorage
}

func loadLocal(forKey key: String) {
Expand Down Expand Up @@ -83,4 +90,9 @@ class DefaultMySegmentsStorage: MySegmentsStorage {
inMemoryMySegments.removeAll()
persistenStorage.deleteAll()
}

// MARK: For Network Traffic Optimization
func isUsingSegments() -> Bool {
(generalInfoStorage.getSegmentsInUse() ?? 0) > 0
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ protocol PersistentRuleBasedSegmentsStorage {
func update(toAdd: Set<RuleBasedSegment>, toRemove: Set<RuleBasedSegment>, changeNumber: Int64)
func clear()
func getChangeNumber() -> Int64

func getSegmentsInUse() -> Int64?
func setSegmentsInUse(_ segmentsInUse: Int64)
}

class DefaultPersistentRuleBasedSegmentsStorage: PersistentRuleBasedSegmentsStorage {
Expand Down Expand Up @@ -55,4 +58,12 @@ class DefaultPersistentRuleBasedSegmentsStorage: PersistentRuleBasedSegmentsStor
func getChangeNumber() -> Int64 {
return generalInfoStorage.getRuleBasedSegmentsChangeNumber()
}

func getSegmentsInUse() -> Int64? {
generalInfoStorage.getSegmentsInUse()
}

func setSegmentsInUse(_ segmentsInUse: Int64) {
generalInfoStorage.setSegmentsInUse(segmentsInUse)
}
}
Loading