Просмотр исходного кода

parallelize async purge functions

polscm32 aka Marvout 1 год назад
Родитель
Сommit
6ab55f0dea
1 измененных файлов с 31 добавлено и 15 удалено
  1. 31 15
      FreeAPS/Sources/Application/FreeAPSApp.swift

+ 31 - 15
FreeAPS/Sources/Application/FreeAPSApp.swift

@@ -97,43 +97,59 @@ import Swinject
 
     private func cleanupOldData() {
         Task {
-            await coreDataStack.cleanupPersistentHistoryTokens(before: Date.oneWeekAgo)
-            try await purgeOldNSManagedObjects()
+            async let cleanupTokens: () = coreDataStack.cleanupPersistentHistoryTokens(before: Date.oneWeekAgo)
+            async let purgeData: () = purgeOldNSManagedObjects()
+
+            await cleanupTokens
+            try await purgeData
         }
     }
 
     private func purgeOldNSManagedObjects() async throws {
-        try await coreDataStack.batchDeleteOlderThan(GlucoseStored.self, dateKey: "date", days: 90)
-        try await coreDataStack.batchDeleteOlderThan(PumpEventStored.self, dateKey: "timestamp", days: 90)
-        try await coreDataStack.batchDeleteOlderThan(
+        async let glucoseDeletion: () = coreDataStack.batchDeleteOlderThan(GlucoseStored.self, dateKey: "date", days: 90)
+        async let pumpEventDeletion: () = coreDataStack.batchDeleteOlderThan(PumpEventStored.self, dateKey: "timestamp", days: 90)
+        async let bolusDeletion: () = coreDataStack.batchDeleteOlderThan(
             parentType: PumpEventStored.self,
             childType: BolusStored.self,
             dateKey: "timestamp",
             days: 90,
             relationshipKey: "pumpEvent"
         )
-        try await coreDataStack.batchDeleteOlderThan(
+        async let tempBasalDeletion: () = coreDataStack.batchDeleteOlderThan(
             parentType: PumpEventStored.self,
             childType: TempBasalStored.self,
             dateKey: "timestamp",
             days: 90,
             relationshipKey: "pumpEvent"
         )
-        try await coreDataStack.batchDeleteOlderThan(OrefDetermination.self, dateKey: "deliverAt", days: 90)
-        try await coreDataStack.batchDeleteOlderThan(OpenAPS_Battery.self, dateKey: "date", days: 90)
-        try await coreDataStack.batchDeleteOlderThan(CarbEntryStored.self, dateKey: "date", days: 90)
-        try await coreDataStack.batchDeleteOlderThan(Forecast.self, dateKey: "date", days: 2)
-        try await coreDataStack.batchDeleteOlderThan(
+        async let determinationDeletion: () = coreDataStack
+            .batchDeleteOlderThan(OrefDetermination.self, dateKey: "deliverAt", days: 90)
+        async let batteryDeletion: () = coreDataStack.batchDeleteOlderThan(OpenAPS_Battery.self, dateKey: "date", days: 90)
+        async let carbEntryDeletion: () = coreDataStack.batchDeleteOlderThan(CarbEntryStored.self, dateKey: "date", days: 90)
+        async let forecastDeletion: () = coreDataStack.batchDeleteOlderThan(Forecast.self, dateKey: "date", days: 2)
+        async let forecastValueDeletion: () = coreDataStack.batchDeleteOlderThan(
             parentType: Forecast.self,
             childType: ForecastValue.self,
             dateKey: "date",
             days: 2,
             relationshipKey: "forecast"
         )
-        try await coreDataStack.batchDeleteOlderThan(OverrideStored.self, dateKey: "date", days: 3)
-        try await coreDataStack.batchDeleteOlderThan(OverrideRunStored.self, dateKey: "startDate", days: 3)
-
-        // TODO: - Purge Data of other (future) entities as well
+        async let overrideDeletion: () = coreDataStack.batchDeleteOlderThan(OverrideStored.self, dateKey: "date", days: 3)
+        async let overrideRunDeletion: () = coreDataStack
+            .batchDeleteOlderThan(OverrideRunStored.self, dateKey: "startDate", days: 3)
+
+        // Await each task to ensure they are all completed
+        try await glucoseDeletion
+        try await pumpEventDeletion
+        try await bolusDeletion
+        try await tempBasalDeletion
+        try await determinationDeletion
+        try await batteryDeletion
+        try await carbEntryDeletion
+        try await forecastDeletion
+        try await forecastValueDeletion
+        try await overrideDeletion
+        try await overrideRunDeletion
     }
 
     private func handleURL(_ url: URL) {