From 8e5e5ac7fb145af10ce80d3454017575999c4f22 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Thu, 6 Jul 2023 15:05:11 +1000 Subject: [PATCH] fix on get expiration job to resolve the race condition --- .../Jobs/Types/GetExpirationJob.swift | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/SessionMessagingKit/Jobs/Types/GetExpirationJob.swift b/SessionMessagingKit/Jobs/Types/GetExpirationJob.swift index 6459d6a5b..df14fe965 100644 --- a/SessionMessagingKit/Jobs/Types/GetExpirationJob.swift +++ b/SessionMessagingKit/Jobs/Types/GetExpirationJob.swift @@ -10,7 +10,7 @@ public enum GetExpirationJob: JobExecutor { public static var maxFailureCount: Int = -1 public static var requiresThreadId: Bool = true public static var requiresInteractionId: Bool = false - private static let minRunFrequency: TimeInterval = 1 + private static let minRunFrequency: TimeInterval = 5 public static func run( _ job: SessionUtilitiesKit.Job, @@ -53,13 +53,13 @@ public enum GetExpirationJob: JobExecutor { receiveCompletion: { result in switch result { case .finished: - success(job, false) + break case .failure(let error): failure(job, error, true) } }, receiveValue: { response in - Storage.shared.writeAsync { db in + Storage.shared.write { db in try response.expiries.forEach { hash, expireAtMs in guard let expiresInSeconds: TimeInterval = expirationInfo[hash] else { return } let expiresStartedAtMs: TimeInterval = TimeInterval(expireAtMs - UInt64(expiresInSeconds * 1000)) @@ -84,14 +84,18 @@ public enum GetExpirationJob: JobExecutor { Interaction.Columns.expiresStartedAtMs.set(to: details.startedAtTimestampMs) ) } - - if !expirationInfo.isEmpty { - let updatedJob: Job? = try job + } + + if !expirationInfo.isEmpty { + let updatedJob: Job? = Storage.shared.write { db in + try job .with(nextRunTimestamp: Date().timeIntervalSince1970 + minRunFrequency) .saved(db) - - deferred(updatedJob ?? job) } + + deferred(updatedJob ?? job) + } else { + success(job, false) } } )