6565 switch: Switch
6666 networkId: PeerId
6767 networkStore: NetworkStore
68+ maintenance: DatasetMaintainer
6869 engine: BlockExcEngine
6970 prover: ? Prover
7071 discovery: Discovery
@@ -155,17 +156,8 @@ proc updateExpiry*(
155156 trace " Unable to fetch manifest for cid" , manifestCid
156157 return failure (error)
157158
158- try :
159- let
160- ensuringFutures = Iter [int ].new (0 ..< manifest.blocksCount)
161- .mapIt (self.networkStore.localStore.ensureExpiry ( manifest.treeCid, it, expiry ))
162- await allFuturesThrowing (ensuringFutures)
163- except CancelledError as exc:
164- raise exc
165- except CatchableError as exc:
166- return failure (exc.msg)
159+ await self.maintenance.ensureExpiry (manifest.treeCid, expiry)
167160
168- return success ()
169161
170162proc fetchBatched * (
171163 self: CodexNodeRef ,
@@ -274,6 +266,13 @@ proc streamEntireDataset(
274266
275267 # Retrieve all blocks of the dataset sequentially from the local store or network
276268 trace " Creating store stream for manifest" , manifestCid
269+
270+ if err =? (await self.maintenance.trackExpiry (
271+ manifest.treeCid,
272+ manifest.blocksCount,
273+ manifestsCids = @ [manifestCid])).errorOption:
274+ return failure (err)
275+
277276 LPStream (StoreStream .new (self.networkStore, manifest, pad = false )).success
278277
279278proc retrieve * (
@@ -361,6 +360,12 @@ proc store*(
361360 error " Unable to store manifest"
362361 return failure (err)
363362
363+ if err =? (await self.maintenance.trackExpiry (
364+ treeCid,
365+ manifest.blocksCount,
366+ manifestsCids = @ [manifestBlk.cid])).errorOption:
367+ return failure (err)
368+
364369 info " Stored data" , manifestCid = manifestBlk.cid,
365370 treeCid = treeCid,
366371 blocks = manifest.blocksCount,
@@ -566,18 +571,17 @@ proc onStore(
566571 trace " Slot index not in manifest" , slotIdx
567572 return failure (newException (CodexError , " Slot index not in manifest" ))
568573
569- proc updateExpiry (blocks: seq [bt.Block ]): Future [?! void ] {.async .} =
570- trace " Updating expiry for blocks" , blocks = blocks.len
571-
572- let ensureExpiryFutures = blocks.mapIt (self.networkStore.ensureExpiry (it.cid, expiry))
573- if updateExpiryErr =? (await allFutureResult (ensureExpiryFutures)).errorOption:
574- return failure (updateExpiryErr)
575-
576- if not blocksCb.isNil and err =? (await blocksCb (blocks)).errorOption:
577- trace " Unable to process blocks" , err = err.msg
578- return failure (err)
574+ proc onBatch (blocks: seq [bt.Block ]): Future [?! void ] {.async .} =
575+ if not blocksCb.isNil:
576+ await blocksCb (blocks)
577+ else :
578+ success ()
579579
580- return success ()
580+ if err =? (await self.maintenance.trackExpiry (
581+ manifest.treeCid,
582+ manifest.blocksCount,
583+ manifestsCids = @ [cid])).errorOption:
584+ return failure (err)
581585
582586 without indexer =? manifest.verifiableStrategy.init (
583587 0 , manifest.blocksCount - 1 , manifest.numSlots).catch, err:
@@ -591,7 +595,7 @@ proc onStore(
591595 if err =? (await self.fetchBatched (
592596 manifest.treeCid,
593597 blksIter,
594- onBatch = updateExpiry )).errorOption:
598+ onBatch = onBatch )).errorOption:
595599 trace " Unable to fetch blocks" , err = err.msg
596600 return failure (err)
597601
@@ -607,6 +611,11 @@ proc onStore(
607611
608612 trace " Slot successfully retrieved and reconstructed"
609613
614+ if err =? (await self.maintenance.ensureExpiry (
615+ manifest.treeCid,
616+ expiry)).errorOption:
617+ return failure (err)
618+
610619 return success ()
611620
612621proc onProve (
@@ -771,6 +780,7 @@ proc new*(
771780 T: type CodexNodeRef ,
772781 switch: Switch ,
773782 networkStore: NetworkStore ,
783+ maintenance: DatasetMaintainer ,
774784 engine: BlockExcEngine ,
775785 discovery: Discovery ,
776786 prover = Prover .none,
@@ -782,6 +792,7 @@ proc new*(
782792 CodexNodeRef (
783793 switch: switch,
784794 networkStore: networkStore,
795+ maintenance: maintenance,
785796 engine: engine,
786797 prover: prover,
787798 discovery: discovery,
0 commit comments