Update to 2.2.8

This commit is contained in:
Arnaud 2026-04-16 14:52:57 +04:00
parent 754765ba31
commit 1b6376b843
No known key found for this signature in database
GPG Key ID: A6C7C781817146FA
4 changed files with 122 additions and 92 deletions

View File

@ -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
- 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

View File

@ -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"

View File

@ -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

View File

@ -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"