Skip to content

Commit 9cb9600

Browse files
authored
fix(ProjectConfig): remove sources of race conditions in ProjectConfig (#449)
This fixes a couple of possible sources of race conditions in ProjectConfig. - A logger is created thread-safe in a lazy mode. This fixes a bug that the reference for the logger instance was not fully protected in synchronization. - The static observer of {projectId, revision} changes in datafile is not necessary since the event-batcher checks them for batch boundaries. It's cleaned up in this fix since it becomes a source of tricky race conditions.
1 parent fe2c625 commit 9cb9600

File tree

22 files changed

+113
-277
lines changed

22 files changed

+113
-277
lines changed

DemoObjCApp/DemoObjcApp.xcodeproj/xcshareddata/xcschemes/DemoObjciOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

DemoObjCApp/DemoObjcApp.xcodeproj/xcshareddata/xcschemes/DemoObjctvOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

DemoSwiftApp/DemoSwiftApp.xcodeproj/xcshareddata/xcschemes/DemoSwiftiOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

DemoSwiftApp/DemoSwiftApp.xcodeproj/xcshareddata/xcschemes/DemoSwifttvOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

DemoSwiftApp/DemoSwiftApp.xcodeproj/xcshareddata/xcschemes/DemoSwiftwatchOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1240"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

OptimizelySwiftSDK.xcodeproj/project.pbxproj

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1723,6 +1723,22 @@
17231723
75C71A4625E454460084187E /* SDKVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E75167322C520D400B2B157 /* SDKVersion.swift */; };
17241724
75C71C3925E45A2B0084187E /* WatchBackgroundNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C71C3825E45A2B0084187E /* WatchBackgroundNotifier.swift */; };
17251725
7B4A4C11E9A503E68F2FCC69 /* libPods-OptimizelyTests-Common-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 33BE1D8564FE425132F728C0 /* libPods-OptimizelyTests-Common-iOS.a */; };
1726+
84E7ABBB27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1727+
84E7ABBC27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1728+
84E7ABBD27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1729+
84E7ABBE27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1730+
84E7ABBF27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1731+
84E7ABC027D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1732+
84E7ABC127D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1733+
84E7ABC227D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1734+
84E7ABC327D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1735+
84E7ABC427D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1736+
84E7ABC527D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1737+
84E7ABC627D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1738+
84E7ABC727D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1739+
84E7ABC827D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1740+
84E7ABC927D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
1741+
84E7ABCA27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */; };
17261742
BD1C3E8524E4399C0084B4DA /* SemanticVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B97DD93249D327F003DE606 /* SemanticVersion.swift */; };
17271743
BD64853C2491474500F30986 /* Optimizely.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E75167A22C520D400B2B157 /* Optimizely.h */; settings = {ATTRIBUTES = (Public, ); }; };
17281744
BD64853E2491474500F30986 /* Audience.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E75169822C520D400B2B157 /* Audience.swift */; };
@@ -2132,6 +2148,7 @@
21322148
6EF8DE3024BF7D69008B9488 /* DecisionReasons.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecisionReasons.swift; sourceTree = "<group>"; };
21332149
75C719BB25E4519B0084187E /* Optimizely.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Optimizely.framework; sourceTree = BUILT_PRODUCTS_DIR; };
21342150
75C71C3825E45A2B0084187E /* WatchBackgroundNotifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchBackgroundNotifier.swift; sourceTree = "<group>"; };
2151+
84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThreadSafeLogger.swift; sourceTree = "<group>"; };
21352152
BD6485812491474500F30986 /* Optimizely.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Optimizely.framework; sourceTree = BUILT_PRODUCTS_DIR; };
21362153
C78CAF572445AD8D009FE876 /* OptimizelyJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptimizelyJSON.swift; sourceTree = "<group>"; };
21372154
C78CAF652446DB91009FE876 /* OptimizelyClientTests_OptimizelyJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptimizelyClientTests_OptimizelyJSON.swift; sourceTree = "<group>"; };
@@ -2413,6 +2430,7 @@
24132430
6E75166E22C520D400B2B157 /* MurmurHash3.swift */,
24142431
6E75166F22C520D400B2B157 /* HandlerRegistryService.swift */,
24152432
6E75167022C520D400B2B157 /* LogMessage.swift */,
2433+
84E7ABBA27D2A1F100447CAE /* ThreadSafeLogger.swift */,
24162434
6E75167122C520D400B2B157 /* AtomicProperty.swift */,
24172435
6E424BDC263228E90081004A /* AtomicArray.swift */,
24182436
6E424BFB263228FD0081004A /* AtomicDictionary.swift */,
@@ -3106,7 +3124,7 @@
31063124
isa = PBXProject;
31073125
attributes = {
31083126
LastSwiftUpdateCheck = 1230;
3109-
LastUpgradeCheck = 1250;
3127+
LastUpgradeCheck = 1320;
31103128
ORGANIZATIONNAME = Optimizely;
31113129
TargetAttributes = {
31123130
6E14CD622423F80B00010234 = {
@@ -3761,6 +3779,7 @@
37613779
6E14CD732423F96F00010234 /* OptimizelyResult.swift in Sources */,
37623780
6E14CD7E2423F98D00010234 /* DefaultNotificationCenter.swift in Sources */,
37633781
6E14CD8B2423F9A100010234 /* UserAttribute.swift in Sources */,
3782+
84E7ABC227D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
37643783
6E14CD702423F94800010234 /* OptimizelyLogLevel.swift in Sources */,
37653784
6E14CD782423F97E00010234 /* DefaultEventDispatcher.swift in Sources */,
37663785
6E8A3D4B2637408500DAEA13 /* MockDatafileHandler.swift in Sources */,
@@ -3919,6 +3938,7 @@
39193938
6E424CBD26324B1D0081004A /* LogMessage.swift in Sources */,
39203939
6E424CBE26324B1D0081004A /* AtomicProperty.swift in Sources */,
39213940
6E2F8AFF26B22E8000DCEEB9 /* ConcurrencyTests_SingleClient.swift in Sources */,
3941+
84E7ABC127D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
39223942
6E424CBF26324B1D0081004A /* AtomicArray.swift in Sources */,
39233943
6E424CC026324B1D0081004A /* AtomicDictionary.swift in Sources */,
39243944
6E5D12212638DDF4000ABFC3 /* MockEventDispatcher.swift in Sources */,
@@ -3942,6 +3962,7 @@
39423962
6EF8DE3224BF7D69008B9488 /* DecisionReasons.swift in Sources */,
39433963
6E75192522C520D500B2B157 /* DataStoreQueueStack.swift in Sources */,
39443964
6E7516FB22C520D400B2B157 /* OptimizelyLogLevel.swift in Sources */,
3965+
84E7ABBC27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
39453966
6E75184D22C520D400B2B157 /* ProjectConfig.swift in Sources */,
39463967
6E623F03253F9045000617D0 /* DecisionInfo.swift in Sources */,
39473968
6E75171322C520D400B2B157 /* OptimizelyClient+ObjC.swift in Sources */,
@@ -4026,6 +4047,7 @@
40264047
6E75177A22C520D400B2B157 /* SDKVersion.swift in Sources */,
40274048
6E7516C622C520D400B2B157 /* DefaultEventDispatcher.swift in Sources */,
40284049
6E75189C22C520D400B2B157 /* Experiment.swift in Sources */,
4050+
84E7ABC727D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
40294051
6E75176222C520D400B2B157 /* AtomicProperty.swift in Sources */,
40304052
6E75180C22C520D400B2B157 /* DataStoreFile.swift in Sources */,
40314053
6E8A3D502637408500DAEA13 /* MockDatafileHandler.swift in Sources */,
@@ -4110,6 +4132,7 @@
41104132
6E7517CC22C520D400B2B157 /* DefaultBucketer.swift in Sources */,
41114133
6E75178E22C520D400B2B157 /* OptimizelyClient+Extension.swift in Sources */,
41124134
6E75172E22C520D400B2B157 /* Constants.swift in Sources */,
4135+
84E7ABC327D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
41134136
6E9B11E022C548A200C22D81 /* OptimizelyClientTests_Group.swift in Sources */,
41144137
6E75187422C520D400B2B157 /* Variation.swift in Sources */,
41154138
C78CAFA924486E0A009FE876 /* OptimizelyJSON+ObjC.swift in Sources */,
@@ -4216,6 +4239,7 @@
42164239
6E623F0B253F9045000617D0 /* DecisionInfo.swift in Sources */,
42174240
6E75193722C520D500B2B157 /* OPTDataStore.swift in Sources */,
42184241
6E75191322C520D500B2B157 /* BackgroundingCallbacks.swift in Sources */,
4242+
84E7ABC627D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
42194243
6E75172522C520D400B2B157 /* OptimizelyResult.swift in Sources */,
42204244
6E75173122C520D400B2B157 /* Constants.swift in Sources */,
42214245
6E75184722C520D400B2B157 /* Event.swift in Sources */,
@@ -4330,6 +4354,7 @@
43304354
6E7517C522C520D400B2B157 /* DefaultDatafileHandler.swift in Sources */,
43314355
6E75190922C520D500B2B157 /* Attribute.swift in Sources */,
43324356
6E75177B22C520D400B2B157 /* SDKVersion.swift in Sources */,
4357+
84E7ABC827D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
43334358
6E7E9B562523F8C6009E4426 /* OptimizelyUserContextTests_Decide_Legacy.swift in Sources */,
43344359
6EC6DD3C24ABF6990017D296 /* OptimizelyClient+Decide.swift in Sources */,
43354360
6E75192D22C520D500B2B157 /* DataStoreQueueStack.swift in Sources */,
@@ -4469,6 +4494,7 @@
44694494
6E75184A22C520D400B2B157 /* Event.swift in Sources */,
44704495
6E75191622C520D500B2B157 /* BackgroundingCallbacks.swift in Sources */,
44714496
6E9B11A522C5488300C22D81 /* ConditionHolderTests_Evaluate.swift in Sources */,
4497+
84E7ABC927D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
44724498
6E9B119122C5488300C22D81 /* EventForDispatchTests.swift in Sources */,
44734499
6E7517EA22C520D400B2B157 /* DefaultDecisionService.swift in Sources */,
44744500
6E75171C22C520D400B2B157 /* OptimizelyClient+ObjC.swift in Sources */,
@@ -4633,6 +4659,7 @@
46334659
6E9B115122C5486E00C22D81 /* NotificationCenterTests.swift in Sources */,
46344660
6E75184322C520D400B2B157 /* Event.swift in Sources */,
46354661
6E75193F22C520D500B2B157 /* OPTDecisionService.swift in Sources */,
4662+
84E7ABC027D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
46364663
6E7516CD22C520D400B2B157 /* OPTLogger.swift in Sources */,
46374664
6E7517FB22C520D400B2B157 /* DataStoreUserDefaults.swift in Sources */,
46384665
);
@@ -4699,6 +4726,7 @@
46994726
6E75184522C520D400B2B157 /* Event.swift in Sources */,
47004727
6E75191122C520D500B2B157 /* BackgroundingCallbacks.swift in Sources */,
47014728
6E9B118F22C5488100C22D81 /* ConditionHolderTests_Evaluate.swift in Sources */,
4729+
84E7ABC427D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
47024730
6E9B117B22C5488100C22D81 /* EventForDispatchTests.swift in Sources */,
47034731
6E7517E522C520D400B2B157 /* DefaultDecisionService.swift in Sources */,
47044732
6E75171722C520D400B2B157 /* OptimizelyClient+ObjC.swift in Sources */,
@@ -4805,6 +4833,7 @@
48054833
6E8A3D4E2637408500DAEA13 /* MockDatafileHandler.swift in Sources */,
48064834
6E9B11E222C548AF00C22D81 /* OtherTests.swift in Sources */,
48074835
6E75185E22C520D400B2B157 /* FeatureVariable.swift in Sources */,
4836+
84E7ABC527D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
48084837
6E7518BE22C520D400B2B157 /* Variable.swift in Sources */,
48094838
6E7518CA22C520D400B2B157 /* Audience.swift in Sources */,
48104839
6E75187622C520D400B2B157 /* Variation.swift in Sources */,
@@ -4893,6 +4922,7 @@
48934922
6E8A3D532637408500DAEA13 /* MockDatafileHandler.swift in Sources */,
48944923
6E9B11E422C548B100C22D81 /* OtherTests.swift in Sources */,
48954924
6E75186322C520D400B2B157 /* FeatureVariable.swift in Sources */,
4925+
84E7ABCA27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
48964926
6E7518C322C520D400B2B157 /* Variable.swift in Sources */,
48974927
6E7518CF22C520D400B2B157 /* Audience.swift in Sources */,
48984928
6E75187B22C520D400B2B157 /* Variation.swift in Sources */,
@@ -4937,6 +4967,7 @@
49374967
6EF8DE3124BF7D69008B9488 /* DecisionReasons.swift in Sources */,
49384968
6E7517BC22C520D400B2B157 /* DefaultDatafileHandler.swift in Sources */,
49394969
6E7516CA22C520D400B2B157 /* OPTLogger.swift in Sources */,
4970+
84E7ABBB27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
49404971
6E75182822C520D400B2B157 /* BatchEvent.swift in Sources */,
49414972
6E623F02253F9045000617D0 /* DecisionInfo.swift in Sources */,
49424973
6E75184022C520D400B2B157 /* Event.swift in Sources */,
@@ -5021,6 +5052,7 @@
50215052
6E75177422C520D400B2B157 /* SDKVersion.swift in Sources */,
50225053
6E7516C022C520D400B2B157 /* DefaultEventDispatcher.swift in Sources */,
50235054
6E75189622C520D400B2B157 /* Experiment.swift in Sources */,
5055+
84E7ABBF27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
50245056
6E75175C22C520D400B2B157 /* AtomicProperty.swift in Sources */,
50255057
6E75180622C520D400B2B157 /* DataStoreFile.swift in Sources */,
50265058
6E8A3D482637408500DAEA13 /* MockDatafileHandler.swift in Sources */,
@@ -5169,6 +5201,7 @@
51695201
75C71A4225E454460084187E /* HandlerRegistryService.swift in Sources */,
51705202
75C71A4325E454460084187E /* LogMessage.swift in Sources */,
51715203
75C71A4425E454460084187E /* AtomicProperty.swift in Sources */,
5204+
84E7ABBE27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
51725205
75C71A4525E454460084187E /* Utils.swift in Sources */,
51735206
75C71A4625E454460084187E /* SDKVersion.swift in Sources */,
51745207
);
@@ -5187,6 +5220,7 @@
51875220
6EF8DE3324BF7D69008B9488 /* DecisionReasons.swift in Sources */,
51885221
BD6485432491474500F30986 /* DefaultDatafileHandler.swift in Sources */,
51895222
BD6485442491474500F30986 /* OPTLogger.swift in Sources */,
5223+
84E7ABBD27D2A1F100447CAE /* ThreadSafeLogger.swift in Sources */,
51905224
BD6485452491474500F30986 /* BatchEvent.swift in Sources */,
51915225
6E623F04253F9045000617D0 /* DecisionInfo.swift in Sources */,
51925226
BD6485462491474500F30986 /* Event.swift in Sources */,

OptimizelySwiftSDK.xcodeproj/xcshareddata/xcschemes/OptimizelySwiftSDK-iOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

OptimizelySwiftSDK.xcodeproj/xcshareddata/xcschemes/OptimizelySwiftSDK-macOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

OptimizelySwiftSDK.xcodeproj/xcshareddata/xcschemes/OptimizelySwiftSDK-tvOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

OptimizelySwiftSDK.xcodeproj/xcshareddata/xcschemes/OptimizelySwiftSDK-watchOS.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1320"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

Sources/Customization/DefaultDatafileHandler.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright 2019-2021, Optimizely, Inc. and contributors
2+
// Copyright 2019-2022, Optimizely, Inc. and contributors
33
//
44
// Licensed under the Apache License, Version 2.0 (the "License");
55
// you may not use this file except in compliance with the License.
@@ -21,11 +21,11 @@ open class DefaultDatafileHandler: OPTDatafileHandler {
2121
public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
2222

2323
// thread-safe lazy logger load (after HandlerRegisterService ready)
24-
private var loggerInstance: OPTLogger?
24+
private let threadSafeLogger = ThreadSafeLogger()
2525
var logger: OPTLogger {
26-
return OPTLoggerFactory.getLoggerThreadSafe(&loggerInstance)
26+
return threadSafeLogger.logger
2727
}
28-
28+
2929
// the timers for all sdk keys are atomic to allow for thread access.
3030
var timers = AtomicProperty(property: [String: (timer: Timer?, interval: Int)]())
3131

Sources/Customization/DefaultEventDispatcher.swift

Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright 2019, 2021, Optimizely, Inc. and contributors
2+
// Copyright 2019, 2021-2022, Optimizely, Inc. and contributors
33
//
44
// Licensed under the Apache License, Version 2.0 (the "License");
55
// you may not use this file except in compliance with the License.
@@ -38,9 +38,9 @@ open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
3838
}
3939

4040
// thread-safe lazy logger load (after HandlerRegisterService ready)
41-
private var loggerInstance: OPTLogger?
41+
private let threadSafeLogger = ThreadSafeLogger()
4242
var logger: OPTLogger {
43-
return OPTLoggerFactory.getLoggerThreadSafe(&loggerInstance)
43+
return threadSafeLogger.logger
4444
}
4545

4646
// for dispatching events
@@ -49,7 +49,6 @@ open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
4949
let eventQueue: DataStoreQueueStackImpl<EventForDispatch>
5050
// timer as a atomic property.
5151
var timer = AtomicProperty<Timer>()
52-
var observers = [NSObjectProtocol]()
5352

5453
// network reachability
5554
let reachability = NetworkReachability(maxContiguousFails: 1)
@@ -79,17 +78,12 @@ open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
7978
self.logger.e(.eventDispatcherConfigError("batchSize cannot be bigger than maxQueueSize"))
8079
self.maxQueueSize = self.batchSize
8180
}
82-
83-
addProjectChangeNotificationObservers()
84-
81+
8582
subscribe()
8683
}
8784

8885
deinit {
8986
stopTimer()
90-
91-
removeProjectChangeNotificationObservers()
92-
9387
unsubscribe()
9488
}
9589

@@ -272,31 +266,3 @@ extension DefaultEventDispatcher {
272266
}
273267

274268
}
275-
276-
// MARK: - Notification Observers
277-
278-
extension DefaultEventDispatcher {
279-
280-
func addProjectChangeNotificationObservers() {
281-
observers.append(
282-
NotificationCenter.default.addObserver(forName: .didReceiveOptimizelyProjectIdChange, object: nil, queue: nil) { [weak self] _ in
283-
self?.logger.d("Event flush triggered by datafile projectId change")
284-
self?.flushEvents()
285-
}
286-
)
287-
288-
observers.append(
289-
NotificationCenter.default.addObserver(forName: .didReceiveOptimizelyRevisionChange, object: nil, queue: nil) { [weak self] _ in
290-
self?.logger.d("Event flush triggered by datafile revision change")
291-
self?.flushEvents()
292-
}
293-
)
294-
}
295-
296-
func removeProjectChangeNotificationObservers() {
297-
observers.forEach {
298-
NotificationCenter.default.removeObserver($0)
299-
}
300-
}
301-
302-
}

Sources/Customization/Protocols/OPTLogger.swift

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// Copyright 2019, 2021, Optimizely, Inc. and contributors
2+
// Copyright 2019, 2021-2022, Optimizely, Inc. and contributors
33
//
44
// Licensed under the Apache License, Version 2.0 (the "License");
55
// you may not use this file except in compliance with the License.
@@ -86,22 +86,4 @@ extension OPTLogger {
8686
return DefaultLogger()
8787
}
8888

89-
// thread-safe lazy logger load (after HandlerRegisterService ready)
90-
// - "lazy var" is not thread-safe
91-
// - call this thread-safe version for types that can be initialized before (for customiziation) or at the same time with OptimizelyClient (so HandlerRegisterService is not ready yet).
92-
// - DefaultDatafileHandler, DefaultEventDispatcher, DefaultDecisionService, DefaultBucketer
93-
94-
static let lock = DispatchQueue(label: "logger")
95-
96-
class func getLoggerThreadSafe(_ instance: inout OPTLogger?) -> OPTLogger {
97-
var result: OPTLogger?
98-
lock.sync {
99-
if instance == nil {
100-
instance = OPTLoggerFactory.getLogger()
101-
}
102-
result = instance!
103-
}
104-
return result!
105-
}
106-
10789
}

0 commit comments

Comments
 (0)