From 2b3e97f6cc8928d1583aea9c56bdf56a5faaf948 Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Wed, 2 Sep 2020 09:17:01 +1000 Subject: [PATCH] Tweak error handling --- .../src/Loki/API/Onion Requests/OnionRequestAPI.swift | 9 ++------- SignalServiceKit/src/Loki/API/SnodeAPI.swift | 5 +++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift b/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift index f0b90bac5..e9f2f9035 100644 --- a/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift +++ b/SignalServiceKit/src/Loki/API/Onion Requests/OnionRequestAPI.swift @@ -6,11 +6,6 @@ public enum OnionRequestAPI { public static var guardSnodes: Set = [] public static var paths: [Path] = [] // Not a set to ensure we consistently show the same path to the user - private static var snodePool: Set { - let unreliableSnodes = Set(SnodeAPI.snodeFailureCount.keys) - return SnodeAPI.snodePool.subtracting(unreliableSnodes) - } - // MARK: Settings /// The number of snodes (including the guard snode) in a path. private static let pathSize: UInt = 3 @@ -84,7 +79,7 @@ public enum OnionRequestAPI { } else { print("[Loki] [Onion Request API] Populating guard snode cache.") return SnodeAPI.getRandomSnode().then2 { _ -> Promise> in // Just used to populate the snode pool - var unusedSnodes = snodePool // Sync on LokiAPI.workQueue + var unusedSnodes = SnodeAPI.snodePool // Sync on LokiAPI.workQueue guard unusedSnodes.count >= guardSnodeCount else { throw Error.insufficientSnodes } func getGuardSnode() -> Promise { // randomElement() uses the system's default random generator, which is cryptographically secure @@ -115,7 +110,7 @@ public enum OnionRequestAPI { } return SnodeAPI.getRandomSnode().then2 { _ -> Promise<[Path]> in // Just used to populate the snode pool return getGuardSnodes().map2 { guardSnodes -> [Path] in - var unusedSnodes = snodePool.subtracting(guardSnodes) + var unusedSnodes = SnodeAPI.snodePool.subtracting(guardSnodes) let pathSnodeCount = guardSnodeCount * pathSize - guardSnodeCount guard unusedSnodes.count >= pathSnodeCount else { throw Error.insufficientSnodes } // Don't test path snodes as this would reveal the user's IP to them diff --git a/SignalServiceKit/src/Loki/API/SnodeAPI.swift b/SignalServiceKit/src/Loki/API/SnodeAPI.swift index 5c2255574..420a8aa22 100644 --- a/SignalServiceKit/src/Loki/API/SnodeAPI.swift +++ b/SignalServiceKit/src/Loki/API/SnodeAPI.swift @@ -15,10 +15,10 @@ public final class SnodeAPI : NSObject { // MARK: Settings private static let maxRetryCount: UInt = 4 - private static let minimumSnodePoolCount = 32 + private static let minimumSnodePoolCount = 64 private static let minimumSwarmSnodeCount = 2 private static let seedNodePool: Set = [ "https://storage.seed1.loki.network", "https://storage.seed3.loki.network", "https://public.loki.foundation" ] - private static let snodeFailureThreshold = 2 + private static let snodeFailureThreshold = 1 private static let targetSwarmSnodeCount = 2 internal static var powDifficulty: UInt = 1 @@ -311,6 +311,7 @@ public final class SnodeAPI : NSObject { SnodeAPI.dropSnodeFromSwarmIfNeeded(snode, publicKey: publicKey) } SnodeAPI.dropSnodeFromSnodePool(snode) + print("[Loki] Snode pool count: \(snodePool.count).") SnodeAPI.snodeFailureCount[snode] = 0 } }