From 195b5a81a6f16f845a51a1548d29e272c7ed00a7 Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Wed, 8 Nov 2023 15:20:58 +0100 Subject: [PATCH] erasure: removing MDS assumption from decode decode was only retrieving ecK pieces, which is OK with MDS, but not working with 2D RS and other non MDS codes. Signed-off-by: Csaba Kiraly --- codex/erasure/erasure.nim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/codex/erasure/erasure.nim b/codex/erasure/erasure.nim index fb0a8f28..677286ef 100644 --- a/codex/erasure/erasure.nim +++ b/codex/erasure/erasure.nim @@ -154,13 +154,15 @@ proc encode*( proc decode*( self: Erasure, - encoded: Manifest): Future[?!Manifest] {.async.} = + encoded: Manifest, + needed: int = encoded.ecK): Future[?!Manifest] {.async.} = ## Decode a protected manifest into it's original ## manifest ## ## `encoded` - the encoded (protected) manifest to ## be recovered - ## + ## `needed` - number of pieces to retrieve before attempting decode. + ## Defaults to MDS ecK. logScope: steps = encoded.steps @@ -197,7 +199,7 @@ proc decode*( while true: # Continue to receive blocks until we have just enough for decoding # or no more blocks can arrive - if (resolved >= encoded.ecK) or (idxPendingBlocks.len == 0): + if (resolved >= needed) or (idxPendingBlocks.len == 0): break let