diff --git a/app/src/main/java/com/futo/polycentric/core/AggregateException.kt b/app/src/main/java/com/futo/polycentric/core/AggregateException.kt new file mode 100644 index 0000000000000000000000000000000000000000..06cebb08e416ecae634842511389bec8d04f861b --- /dev/null +++ b/app/src/main/java/com/futo/polycentric/core/AggregateException.kt @@ -0,0 +1,6 @@ +package com.futo.polycentric.core + +class AggregateException( + val childExceptions: List<Throwable>, + message: String = "Multiple exceptions occurred.", +) : Throwable(message, childExceptions.firstOrNull()) \ No newline at end of file diff --git a/app/src/main/java/com/futo/polycentric/core/Synchronization.kt b/app/src/main/java/com/futo/polycentric/core/Synchronization.kt index 6d06862c747024ccd5ef7b24c0f1d70eb92d19cc..7a9b30ca9d83fe0de194e0b1e3f4d0c707f81bfc 100644 --- a/app/src/main/java/com/futo/polycentric/core/Synchronization.kt +++ b/app/src/main/java/com/futo/polycentric/core/Synchronization.kt @@ -92,6 +92,7 @@ class Synchronization { val systemProto = system.toProto() var progress = false + val exceptions = arrayListOf<Throwable>() for (server in systemState.servers) { try { val rangesForSystem = RangesForSystem.fromProto(ApiMethods.getRanges(server, systemProto)) @@ -108,11 +109,15 @@ class Synchronization { val processState = Store.instance.getProcessState(system, process) val serverNeeds = Ranges.subtract(processState.ranges, rangesForProcess) - if (serverNeeds.isEmpty()) { + Log.i(TAG, "There is nothing to backfill") break } + for (range in serverNeeds) { + Log.i(TAG, "Backfilling range ${range.low}-${range.high}") + } + val batch = Ranges.takeRangesMaxItems(serverNeeds, 10L) val events = loadRanges(system, process, batch) @@ -124,9 +129,17 @@ class Synchronization { } } catch (err: Throwable) { Log.e(TAG, "An error occurred while backfilling server", err) + exceptions.add(err) } } + if (exceptions.isNotEmpty()) { + if (exceptions.size == 1) + throw exceptions.first() + + throw AggregateException(exceptions) + } + return@withContext progress } }