From 2dd97631ed900a00e39c1466bce86813c262f96d Mon Sep 17 00:00:00 2001 From: Arnaud Date: Wed, 22 Apr 2026 17:57:14 +0400 Subject: [PATCH] chore: update nim 2.2.8 (#1424) Signed-off-by: Arnaud Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- Makefile | 2 +- .../requests/node_lifecycle_request.nim | 3 +- storage.nim | 4 ++- storage/conf.nim | 15 ++++---- storage/rest/api.nim | 2 +- storage/rest/coders.nim | 2 -- storage/rest/json.nim | 1 - storage/stores/repostore/store.nim | 3 +- storage/utils.nim | 19 ---------- storage/utils/json.nim | 1 - storage/utils/options.nim | 3 +- tests/helpers/trackers.nim | 30 ++++------------ tests/integration/storageprocess.nim | 2 +- tests/storage/helpers.nim | 2 +- tests/storage/node/helpers.nim | 2 +- tests/storage/node/testnode.nim | 1 - tests/storage/testasyncstreamwrapper.nim | 36 +++++++++++-------- tests/storage/testclock.nim | 1 - tests/storage/testsystemclock.nim | 1 - tests/storage/utils/testutils.nim | 18 ---------- vendor/asynctest | 2 +- vendor/logos-storage-nim-dht | 2 +- vendor/nim-bearssl | 2 +- vendor/nim-chronos | 2 +- vendor/nim-http-utils | 2 +- vendor/nim-libbacktrace | 2 +- vendor/nim-metrics | 2 +- vendor/nim-quic | 2 +- vendor/nim-secp256k1 | 2 +- vendor/nim-sqlite3-abi | 2 +- vendor/nim-testutils | 2 +- vendor/nim-unittest2 | 2 +- vendor/nimcrypto | 2 +- vendor/questionable | 2 +- 35 files changed, 65 insertions(+), 113 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2860b58d..2867ee55 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: env: cache_nonce: 0 # Allows for easily busting actions/cache caches - nim_version: v2.2.4 + nim_version: v2.2.8 concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} diff --git a/Makefile b/Makefile index 980b1750..cc9274e1 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ # # If NIM_COMMIT is set to "nimbusbuild", this will use the # version pinned by nimbus-build-system. -PINNED_NIM_VERSION := v2.2.4 +PINNED_NIM_VERSION := v2.2.8 ifeq ($(NIM_COMMIT),) NIM_COMMIT := $(PINNED_NIM_VERSION) diff --git a/library/storage_thread_requests/requests/node_lifecycle_request.nim b/library/storage_thread_requests/requests/node_lifecycle_request.nim index 146d12b9..34f7c726 100644 --- a/library/storage_thread_requests/requests/node_lifecycle_request.nim +++ b/library/storage_thread_requests/requests/node_lifecycle_request.nim @@ -115,7 +115,8 @@ proc createStorage( except ValueError as err: return err("Failed to create Storage: invalid value for log level: " & err.msg) - conf.setupMetrics() + if err =? conf.setupMetrics().errorOption: + return err("Failed to start metrics server: " & err.msg) if not (checkAndCreateDataDir((conf.dataDir).string)): # We are unable to access/create data folder or data folder's diff --git a/storage.nim b/storage.nim index 17ec3d2a..f1f4372a 100644 --- a/storage.nim +++ b/storage.nim @@ -65,7 +65,9 @@ when isMainModule: echo "Invalid value for --log-level. " & err.msg quit QuitFailure - config.setupMetrics() + if err =? config.setupMetrics().errorOption: + fatal "Failed to start metrics server", err = err.msg + quit QuitFailure if not (checkAndCreateDataDir((config.dataDir).string)): # We are unable to access/create data folder or data folder's diff --git a/storage/conf.nim b/storage/conf.nim index 47efdde8..3c93a9b6 100644 --- a/storage/conf.nim +++ b/storage/conf.nim @@ -617,14 +617,17 @@ proc setupLogging*(conf: StorageConf): Option[IoHandle] = return ioHandle -proc setupMetrics*(config: StorageConf) = +proc setupMetrics*(config: StorageConf): ?!void = if config.metricsEnabled: let metricsAddress = config.metricsAddress notice "Starting metrics HTTP server", url = "http://" & $metricsAddress & ":" & $config.metricsPort & "/metrics" + let server = MetricsHttpServerRef.new($metricsAddress, config.metricsPort).valueOr: + return failure($error) try: - startMetricsHttpServer($metricsAddress, config.metricsPort) - except CatchableError as exc: - raiseAssert exc.msg - except Exception as exc: - raiseAssert exc.msg # TODO fix metrics + waitFor server.start() + except MetricsError as exc: + return failure(exc.msg) + except CancelledError: + return failure("Metrics server start was cancelled") + success() diff --git a/storage/rest/api.nim b/storage/rest/api.nim index 7b686234..325efad4 100644 --- a/storage/rest/api.nim +++ b/storage/rest/api.nim @@ -119,7 +119,7 @@ proc retrieveCid( while not stream.atEof: var - buff = newSeqUninitialized[byte](DefaultBlockSize.int) + buff = newSeqUninit[byte](DefaultBlockSize.int) len = await stream.readOnce(addr buff[0], buff.len) buff.setLen(len) diff --git a/storage/rest/coders.nim b/storage/rest/coders.nim index 7db72ca9..f0ea34fd 100644 --- a/storage/rest/coders.nim +++ b/storage/rest/coders.nim @@ -7,8 +7,6 @@ ## This file may not be copied, modified, or distributed except according to ## those terms. -import std/sugar - import pkg/presto import pkg/chronos import pkg/libp2p diff --git a/storage/rest/json.nim b/storage/rest/json.nim index 86d84a32..6a65b7b3 100644 --- a/storage/rest/json.nim +++ b/storage/rest/json.nim @@ -1,5 +1,4 @@ import pkg/questionable -import pkg/stew/byteutils import pkg/libp2p import pkg/codexdht/discv5/node as dn import pkg/codexdht/discv5/routing_table as rt diff --git a/storage/stores/repostore/store.nim b/storage/stores/repostore/store.nim index f4cfa9e3..90bd6510 100644 --- a/storage/stores/repostore/store.nim +++ b/storage/stores/repostore/store.nim @@ -338,7 +338,8 @@ method listBlocks*( if queryIter.finished: iter.finish else: - if pair =? (await queryIter.next()) and cid =? pair.key: + let res = await queryIter.next() + if pair =? res and cid =? pair.key: doAssert pair.data.len == 0 trace "Retrieved record from repo", cid return Cid.init(cid.value).mapFailure diff --git a/storage/utils.nim b/storage/utils.nim index 618db055..c8aef334 100644 --- a/storage/utils.nim +++ b/storage/utils.nim @@ -10,7 +10,6 @@ {.push raises: [].} -import std/enumerate import std/parseutils import std/options @@ -41,24 +40,6 @@ func roundUp*[T](a, b: T): T = proc orElse*[A](a, b: Option[A]): Option[A] = if (a.isSome()): a else: b -template findIt*(s, pred: untyped): untyped = - ## Returns the index of the first object matching a predicate, or -1 if no - ## object matches it. - runnableExamples: - type MyType = object - att: int - - var s = @[MyType(att: 1), MyType(att: 2), MyType(att: 3)] - doAssert s.findIt(it.att == 2) == 1 - doAssert s.findIt(it.att == 4) == -1 - - var index = -1 - for i, it {.inject.} in enumerate(items(s)): - if pred: - index = i - break - index - when not declared(parseDuration): # Odd code formatting to minimize diff v. mainLine const Whitespace = {' ', '\t', '\v', '\r', '\l', '\f'} diff --git a/storage/utils/json.nim b/storage/utils/json.nim index a4aa3012..1ee7147c 100644 --- a/storage/utils/json.nim +++ b/storage/utils/json.nim @@ -1,4 +1,3 @@ -import std/options import std/typetraits from pkg/libp2p import Cid, PeerId, SignedPeerRecord, MultiAddress, AddressInfo, init, `$` diff --git a/storage/utils/options.nim b/storage/utils/options.nim index ad44a717..5df3f19f 100644 --- a/storage/utils/options.nim +++ b/storage/utils/options.nim @@ -15,8 +15,7 @@ proc `as`*[T](value: T, U: type): ?U = # In that case, we do not need to do anything, just return the value as it is. when value is Option[U]: return value - - when value is U: + elif value is U: return some value elif value is ref object: if value of U: diff --git a/tests/helpers/trackers.nim b/tests/helpers/trackers.nim index e0b72d09..818f80c8 100644 --- a/tests/helpers/trackers.nim +++ b/tests/helpers/trackers.nim @@ -1,31 +1,13 @@ import pkg/storage/streams/storestream import pkg/unittest2 -# From lip2p/tests/helpers const trackerNames = [StoreStreamTrackerName] -iterator testTrackers*(extras: openArray[string] = []): TrackerBase = - for name in trackerNames: - let t = getTracker(name) - if not isNil(t): - yield t - for name in extras: - let t = getTracker(name) - if not isNil(t): - yield t - -proc checkTracker*(name: string) = - var tracker = getTracker(name) - if tracker.isLeaked(): - checkpoint tracker.dump() - fail() - proc checkTrackers*() = - for tracker in testTrackers(): - if tracker.isLeaked(): - checkpoint tracker.dump() + for name in trackerNames: + let counter = getTrackerCounter(name) + if counter.opened != counter.closed: + # show how many streams were opened vs closed to help diagnose the leak + checkpoint name & ": opened=" & $counter.opened & ", closed=" & $counter.closed fail() - try: - GC_fullCollect() - except: - discard + GC_fullCollect() diff --git a/tests/integration/storageprocess.nim b/tests/integration/storageprocess.nim index ec58d273..26245169 100644 --- a/tests/integration/storageprocess.nim +++ b/tests/integration/storageprocess.nim @@ -106,7 +106,7 @@ method restart*(node: StorageProcess) {.async.} = await node.waitUntilStarted() trace "storage process restarted" -method stop*(node: StorageProcess) {.async: (raises: []).} = +method stop*(node: StorageProcess, expectedExitCode: int = 0) {.async: (raises: []).} = logScope: nodeName = node.name diff --git a/tests/storage/helpers.nim b/tests/storage/helpers.nim index 28932fd8..0661b792 100644 --- a/tests/storage/helpers.nim +++ b/tests/storage/helpers.nim @@ -43,7 +43,7 @@ proc lenPrefix*(msg: openArray[byte]): seq[byte] = ## let vbytes = PB.toBytes(msg.len().uint64) - var buf = newSeqUninitialized[byte](msg.len() + vbytes.len) + var buf = newSeqUninit[byte](msg.len() + vbytes.len) buf[0 ..< vbytes.len] = vbytes.toOpenArray() buf[vbytes.len ..< buf.len] = msg diff --git a/tests/storage/node/helpers.nim b/tests/storage/node/helpers.nim index 9c75f905..32038244 100644 --- a/tests/storage/node/helpers.nim +++ b/tests/storage/node/helpers.nim @@ -20,7 +20,7 @@ proc new*( method getBlock*( self: CountingStore, address: BlockAddress -): Future[?!Block] {.async.} = +): Future[?!Block] {.async: (raises: [CancelledError]).} = self.lookups.mgetOrPut(address.cid, 0).inc await procCall getBlock(NetworkStore(self), address) diff --git a/tests/storage/node/testnode.nim b/tests/storage/node/testnode.nim index 96d4b28a..eae80032 100644 --- a/tests/storage/node/testnode.nim +++ b/tests/storage/node/testnode.nim @@ -1,5 +1,4 @@ import std/os -import std/options import std/math import std/importutils diff --git a/tests/storage/testasyncstreamwrapper.nim b/tests/storage/testasyncstreamwrapper.nim index 63ff0b67..dbd117b9 100644 --- a/tests/storage/testasyncstreamwrapper.nim +++ b/tests/storage/testasyncstreamwrapper.nim @@ -12,23 +12,31 @@ asyncchecksuite "AsyncStreamWrapper": let data = "0123456789012345678901234567890123456789" let address = initTAddress("127.0.0.1:46001") - proc serveReadingClient(server: StreamServer, transp: StreamTransport) {.async.} = - var wstream = newAsyncStreamWriter(transp) - await wstream.write(data) - await wstream.finish() - await wstream.closeWait() - await transp.closeWait() - server.stop() - server.close() - - proc serveWritingClient(buf: pointer, bufLen: int): auto = - return proc(server: StreamServer, transp: StreamTransport) {.async.} = - var rstream = newAsyncStreamReader(transp) - discard await rstream.readOnce(buf, bufLen) - await rstream.closeWait() + proc serveReadingClient( + server: StreamServer, transp: StreamTransport + ) {.async: (raises: []).} = + try: + var wstream = newAsyncStreamWriter(transp) + await wstream.write(data) + await wstream.finish() + await wstream.closeWait() await transp.closeWait() server.stop() server.close() + except CatchableError as e: + raiseAssert e.msg + + proc serveWritingClient(buf: pointer, bufLen: int): auto = + return proc(server: StreamServer, transp: StreamTransport) {.async: (raises: []).} = + try: + var rstream = newAsyncStreamReader(transp) + discard await rstream.readOnce(buf, bufLen) + await rstream.closeWait() + await transp.closeWait() + server.stop() + server.close() + except CatchableError as e: + raiseAssert e.msg test "Read all data": var server = createStreamServer(address, serveReadingClient, {ReuseAddr}) diff --git a/tests/storage/testclock.nim b/tests/storage/testclock.nim index fdba653e..73895b4f 100644 --- a/tests/storage/testclock.nim +++ b/tests/storage/testclock.nim @@ -1,7 +1,6 @@ import pkg/unittest2 import storage/clock -import ./helpers suite "Clock": proc testConversion(seconds: SecondsSince1970) = diff --git a/tests/storage/testsystemclock.nim b/tests/storage/testsystemclock.nim index 4f701b98..2eea0471 100644 --- a/tests/storage/testsystemclock.nim +++ b/tests/storage/testsystemclock.nim @@ -2,7 +2,6 @@ import std/times import pkg/unittest2 import pkg/storage/systemclock -import ./helpers suite "SystemClock": test "Should get now": diff --git a/tests/storage/utils/testutils.nim b/tests/storage/utils/testutils.nim index 306dccbc..6af90f21 100644 --- a/tests/storage/utils/testutils.nim +++ b/tests/storage/utils/testutils.nim @@ -2,24 +2,6 @@ import pkg/unittest2 import pkg/storage/utils -suite "findIt": - setup: - type AnObject = object - attribute1*: int - - var objList = @[ - AnObject(attribute1: 1), - AnObject(attribute1: 3), - AnObject(attribute1: 5), - AnObject(attribute1: 3), - ] - - test "should retur index of first object matching predicate": - assert objList.findIt(it.attribute1 == 3) == 1 - - test "should return -1 when no object matches predicate": - assert objList.findIt(it.attribute1 == 15) == -1 - suite "parseDuration": test "should parse durations": var res: Duration # caller must still know if 'b' refers to bytes|bits diff --git a/vendor/asynctest b/vendor/asynctest index 73c08f77..572c897a 160000 --- a/vendor/asynctest +++ b/vendor/asynctest @@ -1 +1 @@ -Subproject commit 73c08f77afc5cc2a5628d00f915b97bf72f70c9b +Subproject commit 572c897a4e1177e905105a3bafe8c5573d9bae83 diff --git a/vendor/logos-storage-nim-dht b/vendor/logos-storage-nim-dht index 99884b59..67dbc3fe 160000 --- a/vendor/logos-storage-nim-dht +++ b/vendor/logos-storage-nim-dht @@ -1 +1 @@ -Subproject commit 99884b5971759a0da437db3d2e834b92a058527d +Subproject commit 67dbc3fe137144f07d6088c44906bf29fc317fae diff --git a/vendor/nim-bearssl b/vendor/nim-bearssl index f08d7220..22c6a76c 160000 --- a/vendor/nim-bearssl +++ b/vendor/nim-bearssl @@ -1 +1 @@ -Subproject commit f08d72203f9e110c099c6f393e1c0640fcbe176f +Subproject commit 22c6a76ce015bc07e011562bdcfc51d9446c1e82 diff --git a/vendor/nim-chronos b/vendor/nim-chronos index 0646c444..785fcf4d 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit 0646c444fce7c7ed08ef6f2c9a7abfd172ffe655 +Subproject commit 785fcf4ddec1101a3df1f044d6331504d7ab95c6 diff --git a/vendor/nim-http-utils b/vendor/nim-http-utils index c53852d9..f142cb2e 160000 --- a/vendor/nim-http-utils +++ b/vendor/nim-http-utils @@ -1 +1 @@ -Subproject commit c53852d9e24205b6363bba517fa8ee7bde823691 +Subproject commit f142cb2e8bd812dd002a6493b6082827bb248592 diff --git a/vendor/nim-libbacktrace b/vendor/nim-libbacktrace index 99bc2ba1..ebc972d9 160000 --- a/vendor/nim-libbacktrace +++ b/vendor/nim-libbacktrace @@ -1 +1 @@ -Subproject commit 99bc2ba16bc2d44f9a97e706304f64744d913d7f +Subproject commit ebc972d99769633b9ef3ee766778ee5aa1996499 diff --git a/vendor/nim-metrics b/vendor/nim-metrics index 9b9afee9..a1296caf 160000 --- a/vendor/nim-metrics +++ b/vendor/nim-metrics @@ -1 +1 @@ -Subproject commit 9b9afee96357ad82dabf4563cf292f89b50423df +Subproject commit a1296caf3ebb5f30f51a5feae7749a30df2824c2 diff --git a/vendor/nim-quic b/vendor/nim-quic index 525842ae..6d8678a1 160000 --- a/vendor/nim-quic +++ b/vendor/nim-quic @@ -1 +1 @@ -Subproject commit 525842aeca6111fd5035568d0f59aa2b338cc29d +Subproject commit 6d8678a159bfb902f9725f0081d542134cd93916 diff --git a/vendor/nim-secp256k1 b/vendor/nim-secp256k1 index f808ed5e..d8f1288b 160000 --- a/vendor/nim-secp256k1 +++ b/vendor/nim-secp256k1 @@ -1 +1 @@ -Subproject commit f808ed5e7a7bfc42204ec7830f14b7a42b63c284 +Subproject commit d8f1288b7c72f00be5fc2c5ea72bf5cae1eafb15 diff --git a/vendor/nim-sqlite3-abi b/vendor/nim-sqlite3-abi index 6797c318..8240e8e2 160000 --- a/vendor/nim-sqlite3-abi +++ b/vendor/nim-sqlite3-abi @@ -1 +1 @@ -Subproject commit 6797c31836bff377bf50f1ac7bf8122449bf99ba +Subproject commit 8240e8e2819dfce1b67fa2733135d01b5cc80ae0 diff --git a/vendor/nim-testutils b/vendor/nim-testutils index e4d37dc1..6ce5e5e2 160000 --- a/vendor/nim-testutils +++ b/vendor/nim-testutils @@ -1 +1 @@ -Subproject commit e4d37dc1652d5c63afb89907efb5a5e812261797 +Subproject commit 6ce5e5e2301ccbc04b09d27ff78741ff4d352b4d diff --git a/vendor/nim-unittest2 b/vendor/nim-unittest2 index 845b6af2..26f2ef3a 160000 --- a/vendor/nim-unittest2 +++ b/vendor/nim-unittest2 @@ -1 +1 @@ -Subproject commit 845b6af28b9f68f02d320e03ad18eccccea7ddb9 +Subproject commit 26f2ef3ae0ec72a2a75bfe557e02e88f6a31c189 diff --git a/vendor/nimcrypto b/vendor/nimcrypto index dc07e305..b3dbc9c4 160000 --- a/vendor/nimcrypto +++ b/vendor/nimcrypto @@ -1 +1 @@ -Subproject commit dc07e3058c6904eef965394493b6ea99aa2adefc +Subproject commit b3dbc9c4d08e58c5b7bfad6dc7ef2ee52f2f4c08 diff --git a/vendor/questionable b/vendor/questionable index 47692e0d..82d90b67 160000 --- a/vendor/questionable +++ b/vendor/questionable @@ -1 +1 @@ -Subproject commit 47692e0d923ada8f7f731275b2a87614c0150987 +Subproject commit 82d90b67bcfb7f2e918b61dace2ff1a4ced60935