From f681d1b0b0b2eb8d611a96285fc0e66594ec0ef8 Mon Sep 17 00:00:00 2001 From: Gaston Thea Date: Wed, 6 Nov 2024 18:36:44 -0300 Subject: [PATCH] Test --- .github/workflows/test_ios_ut_4.yaml | 1 + .../Streaming/SyncSegmentsUpdateWorker.swift | 33 ++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/.github/workflows/test_ios_ut_4.yaml b/.github/workflows/test_ios_ut_4.yaml index 35af937d..f11b3b3c 100644 --- a/.github/workflows/test_ios_ut_4.yaml +++ b/.github/workflows/test_ios_ut_4.yaml @@ -4,6 +4,7 @@ on: push: branches: - master + - SDKS-8989 pull_request: branches: - master diff --git a/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift b/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift index c8ec78ae..7ca13be2 100644 --- a/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift +++ b/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift @@ -15,6 +15,7 @@ class SegmentsUpdateWorker: UpdateWorker { private let payloadDecoder: SegmentsPayloadDecoder private let telemetryProducer: TelemetryRuntimeProducer? private let resource: TelemetryUpdatesFromSseType + private let syncQueue: DispatchQueue // Visible for testing var decomProvider: CompressionProvider = DefaultDecompressionProvider() @@ -29,6 +30,7 @@ class SegmentsUpdateWorker: UpdateWorker { self.payloadDecoder = payloadDecoder self.telemetryProducer = telemetryProducer self.resource = resource + self.syncQueue = DispatchQueue(label: "split-segments-worker") super.init(queueName: "split-segments-fetcher") } @@ -119,23 +121,24 @@ class SegmentsUpdateWorker: UpdateWorker { let jsonKeyList = try payloadDecoder.decodeAsString(payload: encodedkeyList, compressionUtil: compressionUtil) let keyList = try payloadDecoder.parseKeyList(jsonString: jsonKeyList) - - doForAllUserKeys { userKey in - let keyHash = payloadDecoder.hashKey(userKey) - if keyList.added.contains(keyHash) { - let oldSegments = mySegmentsStorage.getAll(forKey: userKey) - let newSegments = oldSegments.union(segments) - if oldSegments.count < newSegments.count { - mySegmentsStorage.set(SegmentChange(segments: newSegments.asArray()), - forKey: userKey) - synchronizer.notifyUpdate(forKey: userKey) - telemetryProducer?.recordUpdatesFromSse(type: .mySegments) + syncQueue.sync { + doForAllUserKeys { userKey in + let keyHash = payloadDecoder.hashKey(userKey) + if keyList.added.contains(keyHash) { + let oldSegments = mySegmentsStorage.getAll(forKey: userKey) + let newSegments = oldSegments.union(segments) + if oldSegments.count < newSegments.count { + mySegmentsStorage.set(SegmentChange(segments: newSegments.asArray()), + forKey: userKey) + synchronizer.notifyUpdate(forKey: userKey) + telemetryProducer?.recordUpdatesFromSse(type: .mySegments) + } + return } - return - } - if keyList.removed.contains(keyHash) { - remove(segments: segments, forKey: userKey) + if keyList.removed.contains(keyHash) { + remove(segments: segments, forKey: userKey) + } } } }