Skip to content

Commit bc8970b

Browse files
fix: try to use cached config (if available) if identify user request fails for any reason (#235)
1 parent f0ce60c commit bc8970b

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

DevCycle/DevCycleClient.swift

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,16 +146,7 @@ public class DevCycleClient {
146146
}
147147
self.service = service
148148

149-
var cachedConfig: UserConfig?
150-
if let disableConfigCache = options?.disableConfigCache, !disableConfigCache {
151-
cachedConfig = cacheService.getConfig(user: user)
152-
}
153-
154-
if cachedConfig != nil {
155-
self.config?.userConfig = cachedConfig
156-
self.isConfigCached = true
157-
Log.debug("Loaded config from cache")
158-
}
149+
self.useCachedConfigForUser(user: user)
159150

160151
self.service?.getConfig(
161152
user: user, enableEdgeDB: self.enableEdgeDB, extraParams: nil,
@@ -425,8 +416,9 @@ public class DevCycleClient {
425416
completion: { [weak self] config, error in
426417
guard let self = self else { return }
427418
if let error = error {
428-
Log.error("Error getting config: \(error)", tags: ["identify"])
419+
Log.error("Error getting config: \(error) for user_id \(String(describing: updateUser.userId))", tags: ["identify"])
429420
self.cache = self.cacheService.load(user: updateUser)
421+
self.useCachedConfigForUser(user: updateUser)
430422
} else {
431423
if let config = config {
432424
Log.debug("Config: \(config)", tags: ["identify"])
@@ -435,7 +427,7 @@ public class DevCycleClient {
435427
self.isConfigCached = false
436428
}
437429
self.user = user
438-
callback?(error, config?.variables)
430+
callback?(error, self.config?.userConfig?.variables)
439431
})
440432
}
441433

@@ -451,6 +443,7 @@ public class DevCycleClient {
451443
}
452444
}
453445
} catch {
446+
Log.error("Error calling identifyUser for user_id \(String(describing: user.userId))", tags: ["identify"])
454447
continuation.resume(throwing: error)
455448
}
456449
}
@@ -676,6 +669,19 @@ public class DevCycleClient {
676669
self.inactivityWorkItem = work
677670
DispatchQueue.main.asyncAfter(deadline: .now() + Double(delay), execute: work)
678671
}
672+
673+
private func useCachedConfigForUser(user: DevCycleUser) {
674+
var cachedConfig: UserConfig?
675+
if let disableConfigCache = options?.disableConfigCache, !disableConfigCache {
676+
cachedConfig = cacheService.getConfig(user: user)
677+
}
678+
679+
if cachedConfig != nil {
680+
self.config?.userConfig = cachedConfig
681+
self.isConfigCached = true
682+
Log.debug("Loaded config from cache for user_id \(String(describing: user.userId))")
683+
}
684+
}
679685
}
680686

681687
@available(*, deprecated, message: "Use DevCycleClient")

DevCycleTests/Models/DevCycleClientTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ class DevCycleClientTest: XCTestCase {
635635
func testAsyncIdentifyUser() async throws {
636636
let client = try await self.builder.user(self.user).sdkKey("my_sdk_key").service(service)
637637
.build()
638-
client.config?.userConfig = self.userConfig
638+
client.config = DVCConfig(sdkKey: "my_sdk_key", user: self.user)
639639

640640
let variables = try await client.identifyUser(user: self.user)
641641
XCTAssertNotNil(variables)
@@ -646,7 +646,7 @@ class DevCycleClientTest: XCTestCase {
646646
func testAsyncResetUser() async throws {
647647
let client = try await self.builder.user(self.user).sdkKey("my_sdk_key").service(service)
648648
.build()
649-
client.config?.userConfig = self.userConfig
649+
client.config = DVCConfig(sdkKey: "my_sdk_key", user: self.user)
650650

651651
let variables = try await client.resetUser()
652652
XCTAssertNotNil(variables)

0 commit comments

Comments
 (0)