17
17
module Ouroboros.Consensus.Storage.LedgerDB.V2 (mkInitDb ) where
18
18
19
19
import Control.Arrow ((>>>) )
20
- import qualified Control.Monad as Monad (void , (>=>) )
20
+ import qualified Control.Monad as Monad (join , void )
21
21
import Control.Monad.Except
22
22
import Control.RAWLock
23
23
import qualified Control.RAWLock as RAWLock
24
24
import Control.ResourceRegistry
25
25
import Control.Tracer
26
- import Data.Foldable (traverse_ )
27
26
import qualified Data.Foldable as Foldable
28
27
import Data.Functor.Contravariant ((>$<) )
29
28
import Data.Kind (Type )
@@ -151,7 +150,8 @@ mkInitDb args bss getBlock snapManager =
151
150
InMemoryHandleEnv -> InMemory. newInMemoryLedgerTablesHandle v2Tracer lgrHasFS
152
151
LSMHandleEnv lsmRes ->
153
152
\ values -> do
154
- table <- LSM. tableFromValuesMK lgrRegistry (sessionResource lsmRes) (forgetLedgerTables st) values
153
+ table <-
154
+ LSM. tableFromValuesMK v2Tracer lgrRegistry (sessionResource lsmRes) (forgetLedgerTables st) values
155
155
LSM. newLSMLedgerTablesHandle v2Tracer lgrRegistry table
156
156
157
157
loadSnapshot ::
@@ -562,13 +562,14 @@ getEnvSTM (LDBHandle varState) f =
562
562
getStateRef ::
563
563
(IOLike m , Traversable t ) =>
564
564
LedgerDBEnv m l blk ->
565
+ ResourceRegistry m ->
565
566
(LedgerSeq m l -> t (StateRef m l )) ->
566
567
m (t (StateRef m l ))
567
- getStateRef ldbEnv project =
568
+ getStateRef ldbEnv reg project =
568
569
RAWLock. withReadAccess (ldbOpenHandlesLock ldbEnv) $ \ () -> do
569
570
tst <- project <$> readTVarIO (ldbSeq ldbEnv)
570
571
for tst $ \ st -> do
571
- tables' <- duplicate $ tables st
572
+ (_, tables') <- allocate reg ( \ _ -> duplicate $ tables st) close
572
573
pure st{tables = tables'}
573
574
574
575
-- | Like 'StateRef', but takes care of closing the handle when the given action
@@ -579,8 +580,8 @@ withStateRef ::
579
580
(LedgerSeq m l -> t (StateRef m l )) ->
580
581
(t (StateRef m l ) -> m a ) ->
581
582
m a
582
- withStateRef ldbEnv project =
583
- bracket ( getStateRef ldbEnv project) (traverse_ (close . tables))
583
+ withStateRef ldbEnv project f =
584
+ withRegistry $ \ reg -> getStateRef ldbEnv reg project >>= f
584
585
585
586
acquireAtTarget ::
586
587
( HeaderHash l ~ HeaderHash blk
@@ -591,9 +592,10 @@ acquireAtTarget ::
591
592
) =>
592
593
LedgerDBEnv m l blk ->
593
594
Either Word64 (Target (Point blk )) ->
595
+ ResourceRegistry m ->
594
596
m (Either GetForkerError (StateRef m l ))
595
- acquireAtTarget ldbEnv target =
596
- getStateRef ldbEnv $ \ l -> case target of
597
+ acquireAtTarget ldbEnv target reg =
598
+ getStateRef ldbEnv reg $ \ l -> case target of
597
599
Right VolatileTip -> pure $ currentHandle l
598
600
Right ImmutableTip -> pure $ anchorHandle l
599
601
Right (SpecificPoint pt) -> do
@@ -627,7 +629,7 @@ newForkerAtTarget ::
627
629
Target (Point blk ) ->
628
630
m (Either GetForkerError (Forker m l blk ))
629
631
newForkerAtTarget h rr pt = getEnv h $ \ ldbEnv ->
630
- acquireAtTarget ldbEnv (Right pt) >>= traverse (newForker h ldbEnv rr)
632
+ acquireAtTarget ldbEnv (Right pt) rr >>= traverse (newForker h ldbEnv rr)
631
633
632
634
newForkerByRollback ::
633
635
( HeaderHash l ~ HeaderHash blk
@@ -642,14 +644,14 @@ newForkerByRollback ::
642
644
Word64 ->
643
645
m (Either GetForkerError (Forker m l blk ))
644
646
newForkerByRollback h rr n = getEnv h $ \ ldbEnv ->
645
- acquireAtTarget ldbEnv (Left n) >>= traverse (newForker h ldbEnv rr)
647
+ acquireAtTarget ldbEnv (Left n) rr >>= traverse (newForker h ldbEnv rr)
646
648
647
649
closeForkerEnv ::
648
650
IOLike m => ForkerEnv m l blk -> m ()
649
651
closeForkerEnv ForkerEnv {foeResourcesToRelease = (lock, key, toRelease)} =
650
652
RAWLock. withWriteAccess lock $
651
653
const $ do
652
- id =<< atomically (swapTVar toRelease (pure () ))
654
+ Monad. join $ atomically (swapTVar toRelease (pure () ))
653
655
_ <- release key
654
656
pure (() , () )
655
657
@@ -746,7 +748,7 @@ newForker h ldbEnv rr st = do
746
748
let tr = LedgerDBForkerEvent . TraceForkerEventWithKey forkerKey >$< ldbTracer ldbEnv
747
749
traceWith tr ForkerOpen
748
750
lseqVar <- newTVarIO . LedgerSeq . AS. Empty $ st
749
- (k, toRelease) <- allocate rr (\ _ -> newTVarIO (pure ( ) )) (readTVarIO Monad. >=> id )
751
+ (k, toRelease) <- allocate rr (\ _ -> newTVarIO (close (tables st ))) (Monad. join . readTVarIO )
750
752
let forkerEnv =
751
753
ForkerEnv
752
754
{ foeLedgerSeq = lseqVar
0 commit comments