From 1b6376b843f5b9ae19d300be1ffc54224d1fe6ea Mon Sep 17 00:00:00 2001 From: Arnaud Date: Thu, 16 Apr 2026 14:52:57 +0400 Subject: [PATCH] Update to 2.2.8 --- .github/workflows/ci.yml | 22 ++-- codexdht.nimble | 4 +- .../p2p/discoveryv5/providers/maintenance.nim | 87 ++++++++------- .../eth/p2p/discoveryv5/providers/manager.nim | 101 +++++++++++------- 4 files changed, 122 insertions(+), 92 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5995d77..168e326 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,16 +7,16 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - nim: [2.2.4] + nim: [2.2.8] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - name: Checkout - uses: actions/checkout@v4 - - uses: jiro4989/setup-nim-action@v2 - with: - nim-version: ${{matrix.nim}} - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Build - run: nimble install -y - - name: Test - run: nimble test -y \ No newline at end of file + - name: Checkout + uses: actions/checkout@v4 + - uses: jiro4989/setup-nim-action@v2 + with: + nim-version: ${{matrix.nim}} + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Build + run: nimble install -y + - name: Test + run: nimble test -y diff --git a/codexdht.nimble b/codexdht.nimble index 1742ada..3ff1bf5 100644 --- a/codexdht.nimble +++ b/codexdht.nimble @@ -7,11 +7,11 @@ license = "MIT" skipDirs = @["tests"] # Dependencies -requires "nim >= 2.2.4 & < 3.0.0" +requires "nim >= 2.2.8 & < 3.0.0" requires "secp256k1 >= 0.6.0 & < 0.7.0" requires "nimcrypto >= 0.6.2 & < 0.8.0" requires "bearssl >= 0.2.5 & < 0.3.0" -requires "chronicles >= 0.11.2 & < 0.13.0" +requires "chronicles >= 0.12.3 & < 0.13.0" requires "chronos >= 4.0.4 & < 4.1.0" requires "libp2p >= 1.14.1 & < 2.0.0" requires "metrics >= 0.1.0 & < 0.2.0" diff --git a/codexdht/private/eth/p2p/discoveryv5/providers/maintenance.nim b/codexdht/private/eth/p2p/discoveryv5/providers/maintenance.nim index 1fc5ecb..3297fbf 100644 --- a/codexdht/private/eth/p2p/discoveryv5/providers/maintenance.nim +++ b/codexdht/private/eth/p2p/discoveryv5/providers/maintenance.nim @@ -50,19 +50,23 @@ proc cleanupExpired*( now = times.now().utc().toTime().toUnix() for item in iter: - if (maybeKey, data) =? (await item) and key =? maybeKey: - let - expired = endians2.fromBytesBE(uint64, data).int64 + let res = await item + if res.isOk: + let (maybeKey, data) = res.value + if maybeKey.isSome: + let key = maybeKey.get() + let + expired = endians2.fromBytesBE(uint64, data).int64 - if now >= expired: - trace "Found expired record", key - keys.add(key) - without pairs =? key.fromCidKey(), err: - trace "Error extracting parts from cid key", key - continue + if now >= expired: + trace "Found expired record", key + keys.add(key) + without pairs =? key.fromCidKey(), err: + trace "Error extracting parts from cid key", key + continue - if keys.len >= batchSize: - break + if keys.len >= batchSize: + break if err =? (await store.delete(keys)).errorOption: trace "Error cleaning up batch, records left intact!", size = keys.len, err = err.msg @@ -93,37 +97,44 @@ proc cleanupOrphaned*( trace "Batch cleaned up", size = batchSize count.inc - if (maybeKey, _) =? (await item) and key =? maybeKey: - without peerId =? key.fromProvKey(), err: - trace "Error extracting parts from cid key", key - continue + let res = await item + if res.isOk: + let (maybeKey, _) = res.value + if maybeKey.isSome: + let key = maybeKey.get() + without peerId =? key.fromProvKey(), err: + trace "Error extracting parts from cid key", key + continue - without cidKey =? (CidKey / "*" / $peerId), err: - trace "Error building cid key", err = err.msg - continue + without cidKey =? (CidKey / "*" / $peerId), err: + trace "Error building cid key", err = err.msg + continue - without cidIter =? (await store.query(Query.init(cidKey, limit = 1, value = false))), err: - trace "Error querying key", cidKey, err = err.msg - continue + without cidIter =? (await store.query(Query.init(cidKey, limit = 1, value = false))), err: + trace "Error querying key", cidKey, err = err.msg + continue - let - res = block: - var count = 0 - for item in cidIter: - if (key, _) =? (await item) and key.isSome: - count.inc - count + let + res = block: + var count = 0 + for item in cidIter: + let res = await item + if res.isOk: + let (key,_) = res.value + if key.isSome: + count.inc + count - if not isNil(cidIter): - trace "Disposing cid iter" - discard (await cidIter.dispose()) + if not isNil(cidIter): + trace "Disposing cid iter" + discard (await cidIter.dispose()) - if res > 0: - trace "Peer not orphaned, skipping", peerId - continue + if res > 0: + trace "Peer not orphaned, skipping", peerId + continue - if err =? (await store.delete(key)).errorOption: - trace "Error deleting orphaned peer", err = err.msg - continue + if err =? (await store.delete(key)).errorOption: + trace "Error deleting orphaned peer", err = err.msg + continue - trace "Cleaned up orphaned peer", peerId + trace "Cleaned up orphaned peer", peerId diff --git a/codexdht/private/eth/p2p/discoveryv5/providers/manager.nim b/codexdht/private/eth/p2p/discoveryv5/providers/manager.nim index 4f3bd89..e4fa2f8 100644 --- a/codexdht/private/eth/p2p/discoveryv5/providers/manager.nim +++ b/codexdht/private/eth/p2p/discoveryv5/providers/manager.nim @@ -139,32 +139,37 @@ proc get*( var keys: seq[Key] for item in cidIter: - # TODO: =? doesn't support tuples - if (maybeKey, val) =? (await item) and key =? maybeKey: - without pairs =? key.fromCidKey() and - provKey =? makeProviderKey(pairs.peerId), err: - trace "Error creating key from provider record", err = err.msg - continue + let res = await item + if res.isOk: + let (maybeKey, val) = res.value + if maybeKey.isSome: + let key = maybeKey.get() + without pairs =? key.fromCidKey() and + provKey =? makeProviderKey(pairs.peerId), err: + trace "Error creating key from provider record", err = err.msg + continue - trace "Querying provider key", key = provKey - without data =? (await self.store.get(provKey)): - trace "Error getting provider", key = provKey - keys.add(key) - continue + trace "Querying provider key", key = provKey + without data =? (await self.store.get(provKey)): + trace "Error getting provider", key = provKey + keys.add(key) + continue - without provider =? SignedPeerRecord.decode(data).mapErr(mapFailure), err: - trace "Unable to decode provider from store", err = err.msg - keys.add(key) - continue + without provider =? SignedPeerRecord.decode(data).mapErr(mapFailure), err: + trace "Unable to decode provider from store", err = err.msg + keys.add(key) + continue - trace "Retrieved provider with key", key = provKey - providers.add(provider) - self.cache.add(id, provider) + trace "Retrieved provider with key", key = provKey + providers.add(provider) + self.cache.add(id, provider) trace "Deleting keys without provider from store", len = keys.len - if keys.len > 0 and err =? (await self.store.delete(keys)).errorOption: - trace "Error deleting records from persistent store", err = err.msg - return failure err + if keys.len > 0: + let res = await self.store.delete(keys) + if res.isErr: + trace "Error deleting records from persistent store", err = res.error.msg + return failure res.error trace "Retrieved providers from persistent store", id = id, len = providers.len return success providers @@ -202,8 +207,11 @@ proc contains*(self: ProvidersManager, id: NodeId): Future[bool] {.async.} = discard (await iter.dispose()) for item in iter: - if (key, _) =? (await item) and key.isSome: - return true + let res = await item + if res.isOk: + let (key, _) = res.value + if key.isSome: + return true return false @@ -230,19 +238,24 @@ proc remove*(self: ProvidersManager, id: NodeId): Future[?!void] {.async.} = keys: seq[Key] for item in iter: - if (maybeKey, _) =? (await item) and key =? maybeKey: + let res = await item + if res.isOk: + let (maybeKey, _) = res.value + if maybeKey.isSome: + let key = maybeKey.get() + keys.add(key) + without pairs =? key.fromCidKey, err: + trace "Unable to parse peer id from key", key + return failure err - keys.add(key) - without pairs =? key.fromCidKey, err: - trace "Unable to parse peer id from key", key - return failure err + self.cache.remove(id, pairs.peerId) + trace "Deleted record from store", key - self.cache.remove(id, pairs.peerId) - trace "Deleted record from store", key - - if keys.len > 0 and err =? (await self.store.delete(keys)).errorOption: - trace "Error deleting record from persistent store", err = err.msg - return failure err + if keys.len > 0: + let res = await self.store.delete(keys) + if res.isErr: + trace "Error deleting record from persistent store", err = res.error() + return failure res.error() return success() @@ -272,15 +285,21 @@ proc remove*( keys: seq[Key] for item in iter: - if (maybeKey, _) =? (await item) and key =? maybeKey: - keys.add(key) + let res = await item + if res.isOk: + let (maybeKey, _) = res.value + if maybeKey.isSome: + let key = maybeKey.get() + keys.add(key) - let - parts = key.id.split(datastore.Separator) + let + parts = key.id.split(datastore.Separator) - if keys.len > 0 and err =? (await self.store.delete(keys)).errorOption: - trace "Error deleting record from persistent store", err = err.msg - return failure err + if keys.len > 0: + let res = await self.store.delete(keys) + if res.isErr: + trace "Error deleting record from persistent store", err = res.error() + return failure res.error() trace "Deleted records from store"