Skip to content

Commit 2099bbe

Browse files
fix: replaced inefficient string logic for sync complete log (#425)
**Additional context** String creation of flag collection was happening regardless of logging level. This fix resolves the performance issue in a straightforward way while maintaining enough information to verify SDK is receiving flag data when debugging. --------- Co-authored-by: Matthew M. Keeler <[email protected]>
1 parent 6dde55c commit 2099bbe

File tree

4 files changed

+14
-16
lines changed

4 files changed

+14
-16
lines changed

LaunchDarkly/LaunchDarkly/LDClient.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ public class LDClient {
498498
- parameter handler: The closure the SDK will execute when the feature flag changes.
499499
*/
500500
public func observe(key: LDFlagKey, owner: LDObserverOwner, handler: @escaping LDFlagChangeHandler) {
501-
os_log("%s flagKey: %s owner: %s", log: config.logger, type: .debug, typeName(and: #function), key, String(describing: owner))
501+
os_log("%s called for flagKey: %s", log: config.logger, type: .debug, typeName(and: #function), key)
502502
flagChangeNotifier.addFlagChangeObserver(FlagChangeObserver(key: key, owner: owner, flagChangeHandler: handler))
503503
}
504504

@@ -526,7 +526,7 @@ public class LDClient {
526526
- parameter handler: The LDFlagCollectionChangeHandler the SDK will execute 1 time when any of the observed feature flags change.
527527
*/
528528
public func observe(keys: [LDFlagKey], owner: LDObserverOwner, handler: @escaping LDFlagCollectionChangeHandler) {
529-
os_log("%s flagKeys: %s owner: %s", log: config.logger, type: .debug, typeName(and: #function), String(describing: keys), String(describing: owner))
529+
os_log("%s called for flagKeys: %s", log: config.logger, type: .debug, typeName(and: #function), String(describing: keys))
530530
flagChangeNotifier.addFlagChangeObserver(FlagChangeObserver(keys: keys, owner: owner, flagCollectionChangeHandler: handler))
531531
}
532532

@@ -553,7 +553,7 @@ public class LDClient {
553553
- parameter handler: The LDFlagCollectionChangeHandler the SDK will execute 1 time when any of the observed feature flags change.
554554
*/
555555
public func observeAll(owner: LDObserverOwner, handler: @escaping LDFlagCollectionChangeHandler) {
556-
os_log("%s owner: %s", log: config.logger, type: .debug, typeName(and: #function), String(describing: owner))
556+
os_log("%s called.", log: config.logger, type: .debug, typeName(and: #function))
557557
flagChangeNotifier.addFlagChangeObserver(FlagChangeObserver(keys: LDFlagKey.anyKey, owner: owner, flagCollectionChangeHandler: handler))
558558
}
559559

@@ -621,9 +621,9 @@ public class LDClient {
621621
}
622622

623623
private func onFlagSyncComplete(result: FlagSyncResult) {
624-
os_log("%s result: %s", log: config.logger, type: .debug, typeName(and: #function), String(describing: result))
625624
switch result {
626625
case let .flagCollection((flagCollection, etag)):
626+
os_log("%s: got flag collection with %d flags.", log: config.logger, type: .debug, typeName(and: #function), flagCollection.flags.count)
627627
let oldStoredItems = flagStore.storedItems
628628
connectionInformation = ConnectionInformation.checkEstablishingStreaming(connectionInformation: connectionInformation)
629629
flagStore.replaceStore(newStoredItems: StoredItems(items: flagCollection.flags))

LaunchDarkly/LaunchDarkly/Models/FeatureFlag/FlagRequestTracker.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@ struct FlagRequestTracker {
1818
else { return }
1919
flagCounter.trackRequest(reportedValue: reportedValue, featureFlag: featureFlag, context: context)
2020

21-
os_log("%s \n\tflagKey: %s\n\treportedValue: %s\n\tvariation: %s\n\tversion: %s\n\tdefaultValue: %s", log: logger, type: .debug,
21+
os_log("%s \n\tflagKey: %s\n\tvariation: %s\n\tversion: %s", log: logger, type: .debug,
2222
typeName(and: #function),
2323
flagKey,
24-
String(describing: reportedValue),
2524
String(describing: featureFlag?.variation),
26-
String(describing: featureFlag?.flagVersion ?? featureFlag?.version),
27-
String(describing: defaultValue))
25+
String(describing: featureFlag?.flagVersion ?? featureFlag?.version))
2826
}
2927

3028
var hasLoggedRequests: Bool { !flagCounters.isEmpty }

LaunchDarkly/LaunchDarkly/ServiceObjects/FlagChangeNotifier.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,23 @@ final class FlagChangeNotifier: FlagChangeNotifying {
2727
}
2828

2929
func addFlagChangeObserver(_ observer: FlagChangeObserver) {
30-
os_log("%s observer: %s", log: logger, type: .debug, typeName(and: #function), String(describing: observer))
30+
os_log("%s called for keys %s", log: logger, type: .debug, typeName(and: #function), String(describing: observer.flagKeys))
3131
flagChangeQueue.sync { flagChangeObservers.append(observer) }
3232
}
3333

3434
func addFlagsUnchangedObserver(_ observer: FlagsUnchangedObserver) {
35-
os_log("%s observer: %s", log: logger, type: .debug, typeName(and: #function), String(describing: observer))
35+
os_log("%s called.", log: logger, type: .debug, typeName(and: #function))
3636
flagsUnchangedQueue.sync { flagsUnchangedObservers.append(observer) }
3737
}
3838

3939
func addConnectionModeChangedObserver(_ observer: ConnectionModeChangedObserver) {
40-
os_log("%s observer: %s", log: logger, type: .debug, typeName(and: #function), String(describing: observer))
40+
os_log("%s called.", log: logger, type: .debug, typeName(and: #function))
4141
connectionModeChangedQueue.sync { connectionModeChangedObservers.append(observer) }
4242
}
4343

4444
/// Removes all change handling closures from owner
4545
func removeObserver(owner: LDObserverOwner) {
46-
os_log("%s owner: %s", log: logger, type: .debug, typeName(and: #function), String(describing: owner))
46+
os_log("%s called.", log: logger, type: .debug, typeName(and: #function))
4747
flagChangeQueue.sync { flagChangeObservers.removeAll { $0.owner === owner } }
4848
flagsUnchangedQueue.sync { flagsUnchangedObservers.removeAll { $0.owner === owner } }
4949
connectionModeChangedQueue.sync { connectionModeChangedObservers.removeAll { $0.owner === owner } }

LaunchDarkly/LaunchDarkly/ServiceObjects/FlagStore.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ final class FlagStore: FlagMaintaining {
8989
init(logger: OSLog, storedItems: StoredItems) {
9090
self.logger = logger
9191
self._storedItems = storedItems
92-
os_log("%s storedItems:", log: logger, type: .debug, typeName(and: #function), String(describing: storedItems))
92+
os_log("%s with %d items", log: logger, type: .debug, typeName(and: #function), storedItems.count)
9393
}
9494

9595
func replaceStore(newStoredItems: StoredItems) {
96-
os_log("%s newFlags: ", log: logger, type: .debug, typeName(and: #function), String(describing: newStoredItems))
96+
os_log("%s replacing %d items", log: logger, type: .debug, typeName(and: #function), newStoredItems.count)
9797
flagQueue.sync(flags: .barrier) {
9898
self._storedItems = newStoredItems
9999
}
@@ -107,7 +107,7 @@ final class FlagStore: FlagMaintaining {
107107
return
108108
}
109109

110-
os_log("%s succeeded. new flag: %s prior flag: %s", log: logger, type: .debug, typeName(and: #function), String(describing: updatedFlag), String(describing: self._storedItems[updatedFlag.flagKey]))
110+
os_log("%s updated flag %s", log: logger, type: .debug, typeName(and: #function), updatedFlag.flagKey)
111111
self._storedItems.updateValue(StorageItem.item(updatedFlag), forKey: updatedFlag.flagKey)
112112
}
113113
}
@@ -120,7 +120,7 @@ final class FlagStore: FlagMaintaining {
120120
return
121121
}
122122

123-
os_log("%s deleted flag with key: %s", log: logger, type: .debug, typeName(and: #function), deleteResponse.key)
123+
os_log("%s deleted flag %s", log: logger, type: .debug, typeName(and: #function), deleteResponse.key)
124124
self._storedItems.updateValue(StorageItem.tombstone(deleteResponse.version ?? 0), forKey: deleteResponse.key)
125125
}
126126
}

0 commit comments

Comments
 (0)