From a55b676a429f8c2de4b9e7c917005f90acdfd642 Mon Sep 17 00:00:00 2001 From: Giuliano Mega Date: Tue, 25 Jun 2024 18:38:53 -0300 Subject: [PATCH] provisional fix so EC errors do not crash the node on download (#841) --- codex/node.nim | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/codex/node.nim b/codex/node.nim index e5156a69..15ca1466 100644 --- a/codex/node.nim +++ b/codex/node.nim @@ -240,14 +240,14 @@ proc streamEntireDataset( self: CodexNodeRef, manifest: Manifest, manifestCid: Cid, -): ?!LPStream = +): Future[?!LPStream] {.async.} = ## Streams the contents of the entire dataset described by the manifest. ## trace "Retrieving blocks from manifest", manifestCid if manifest.protected: # Retrieve, decode and save to the local store all EС groups - proc erasureJob(): Future[void] {.async.} = + proc erasureJob(): Future[?!void] {.async.} = try: # Spawn an erasure decoding job let @@ -258,10 +258,16 @@ proc streamEntireDataset( self.taskpool) without _ =? (await erasure.decode(manifest)), error: trace "Unable to erasure decode manifest", manifestCid, exc = error.msg - except CatchableError as exc: + # -------------------------------------------------------------------------- + # FIXME this is a HACK so that the node does not crash during the workshop. + # We should NOT catch Defect. + except Exception as exc: trace "Exception decoding manifest", manifestCid, exc = exc.msg + return failure(exc.msg) + # -------------------------------------------------------------------------- - asyncSpawn erasureJob() + if err =? (await erasureJob()).errorOption: + return failure(err) # Retrieve all blocks of the dataset sequentially from the local store or network trace "Creating store stream for manifest", manifestCid @@ -283,7 +289,7 @@ proc retrieve*( return await self.streamSingleBlock(cid) - self.streamEntireDataset(manifest, cid) + await self.streamEntireDataset(manifest, cid) proc store*( self: CodexNodeRef,