From 0f0eb2a494c5dbade5fc206eea745c37e9c8af0b Mon Sep 17 00:00:00 2001 From: Dmitry Zuikov Date: Fri, 20 Oct 2023 06:37:23 +0300 Subject: [PATCH] fix(?) findMissedBlocks --- hbs2-core/lib/HBS2/Storage/Operations/Missed.hs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/hbs2-core/lib/HBS2/Storage/Operations/Missed.hs b/hbs2-core/lib/HBS2/Storage/Operations/Missed.hs index a71ae4b9..6fd1c802 100644 --- a/hbs2-core/lib/HBS2/Storage/Operations/Missed.hs +++ b/hbs2-core/lib/HBS2/Storage/Operations/Missed.hs @@ -17,6 +17,8 @@ import Data.Maybe -- TODO: slow-dangerous findMissedBlocks :: (MonadIO m) => AnyStorage -> HashRef -> m [HashRef] findMissedBlocks sto href = do + -- TODO: limit-recursion-depth? + -- TODO: cache-results-limit-calls-freq -- trace $ "findMissedBlocks" <+> pretty href @@ -38,7 +40,16 @@ findMissedBlocks sto href = do let w = tryDetect (fromHashRef hx) bs r <- case w of Merkle{} -> lift $ lift $ findMissedBlocks sto hx - MerkleAnn{} -> lift $ lift $ findMissedBlocks sto hx + MerkleAnn t -> lift $ lift do + -- FIXME: make-tail-recursive + + b0 <- case _mtaMeta t of + AnnHashRef hm -> findMissedBlocks sto (HashRef hm) + _ -> pure mempty + + b1 <- findMissedBlocks sto hx + pure (b0 <> b1) + _ -> pure mempty lift $ mapM_ S.yield r