@@ -15,9 +15,9 @@ import Cardano.Tools.DBAnalyser.HasAnalysis
1515import Cardano.Tools.DBAnalyser.Types
1616import Control.ResourceRegistry
1717import Control.Tracer (Tracer (.. ), nullTracer )
18+ import Data.Functor.Contravariant ((>$<) )
1819import qualified Data.SOP.Dict as Dict
1920import Data.Singletons (Sing , SingI (.. ))
20- import Data.Void
2121import qualified Debug.Trace as Debug
2222import Ouroboros.Consensus.Block
2323import Ouroboros.Consensus.Config
@@ -35,19 +35,24 @@ import qualified Ouroboros.Consensus.Storage.ChainDB as ChainDB
3535import qualified Ouroboros.Consensus.Storage.ChainDB.Impl.Args as ChainDB
3636import qualified Ouroboros.Consensus.Storage.ImmutableDB as ImmutableDB
3737import qualified Ouroboros.Consensus.Storage.ImmutableDB.Stream as ImmutableDB
38+ import Ouroboros.Consensus.Storage.LedgerDB (TraceEvent (.. ))
3839import qualified Ouroboros.Consensus.Storage.LedgerDB as LedgerDB
3940import qualified Ouroboros.Consensus.Storage.LedgerDB.V1 as LedgerDB.V1
4041import qualified Ouroboros.Consensus.Storage.LedgerDB.V1.Args as LedgerDB.V1
4142import qualified Ouroboros.Consensus.Storage.LedgerDB.V1.BackingStore.Impl.LMDB as LMDB
42- import qualified Ouroboros.Consensus.Storage.LedgerDB.V1.Snapshots as LedgerDB. V1
43+ import qualified Ouroboros.Consensus.Storage.LedgerDB.V1.Snapshots as V1
4344import qualified Ouroboros.Consensus.Storage.LedgerDB.V2 as LedgerDB.V2
4445import qualified Ouroboros.Consensus.Storage.LedgerDB.V2.Args as LedgerDB.V2
46+ import qualified Ouroboros.Consensus.Storage.LedgerDB.V2.Args as V2
4547import qualified Ouroboros.Consensus.Storage.LedgerDB.V2.InMemory as InMemory
48+ import qualified Ouroboros.Consensus.Storage.LedgerDB.V2.LSM as LSM
4649import Ouroboros.Consensus.Util.Args
4750import Ouroboros.Consensus.Util.IOLike
4851import Ouroboros.Consensus.Util.Orphans ()
4952import Ouroboros.Network.Block (genesisPoint )
53+ import System.FS.API
5054import System.IO
55+ import System.Random
5156import Text.Printf (printf )
5257
5358{- ------------------------------------------------------------------------------
@@ -66,7 +71,7 @@ openLedgerDB ::
6671 , LedgerDB. TestInternals' IO blk
6772 )
6873openLedgerDB lgrDbArgs@ LedgerDB. LedgerDbArgs {LedgerDB. lgrFlavorArgs = LedgerDB. LedgerDbFlavorArgsV1 bss} = do
69- let snapManager = LedgerDB. V1. snapshotManager lgrDbArgs
74+ let snapManager = V1. snapshotManager lgrDbArgs
7075 (ledgerDB, _, intLedgerDB) <-
7176 LedgerDB. openDBInternal
7277 lgrDbArgs
@@ -82,8 +87,27 @@ openLedgerDB
[email protected] {LedgerDB.lgrFlavorArgs = LedgerDB.L
8287 pure (ledgerDB, intLedgerDB)
8388openLedgerDB lgrDbArgs@ LedgerDB. LedgerDbArgs {LedgerDB. lgrFlavorArgs = LedgerDB. LedgerDbFlavorArgsV2 args} = do
8489 (snapManager, bss') <- case args of
85- LedgerDB.V2. V2Args LedgerDB.V2. InMemoryHandleArgs -> pure (InMemory. snapshotManager lgrDbArgs, LedgerDB.V2. InMemoryHandleEnv )
86- LedgerDB.V2. V2Args (LedgerDB.V2. LSMHandleArgs (LedgerDB.V2. LSMArgs x)) -> absurd x
90+ V2. V2Args V2. InMemoryHandleArgs -> pure (InMemory. snapshotManager lgrDbArgs, V2. InMemoryHandleEnv )
91+ V2. V2Args (V2. LSMHandleArgs (V2. LSMArgs path salt mkFS)) -> do
92+ (rk1, V2. SomeHasFSAndBlockIO fs' blockio) <- mkFS (LedgerDB. lgrRegistry lgrDbArgs)
93+ session <-
94+ allocate
95+ (LedgerDB. lgrRegistry lgrDbArgs)
96+ ( \ _ ->
97+ LSM. openSession
98+ ( LedgerDBFlavorImplEvent . LedgerDB. FlavorImplSpecificTraceV2 . V2. LSMTrace
99+ >$< LedgerDB. lgrTracer lgrDbArgs
100+ )
101+ fs'
102+ blockio
103+ salt
104+ path
105+ )
106+ LSM. closeSession
107+ pure
108+ ( LSM. snapshotManager (snd session) lgrDbArgs
109+ , V2. LSMHandleEnv (V2. LSMResources (fst session) (snd session) rk1)
110+ )
87111 (ledgerDB, _, intLedgerDB) <-
88112 LedgerDB. openDBInternal
89113 lgrDbArgs
@@ -126,6 +150,7 @@ analyse dbaConfig args =
126150 lock <- newMVar ()
127151 chainDBTracer <- mkTracer lock verbose
128152 analysisTracer <- mkTracer lock True
153+ lsmSalt <- fst . genWord64 <$> newStdGen
129154 ProtocolInfo {pInfoInitLedger = genesisLedger, pInfoConfig = cfg} <-
130155 mkProtocolInfo args
131156 let shfs = Node. stdMkChainDbHasFS dbDir
@@ -150,6 +175,13 @@ analyse dbaConfig args =
150175 V2InMem ->
151176 LedgerDB. LedgerDbFlavorArgsV2
152177 (LedgerDB.V2. V2Args LedgerDB.V2. InMemoryHandleArgs )
178+ V2LSM ->
179+ LedgerDB. LedgerDbFlavorArgsV2
180+ ( LedgerDB.V2. V2Args
181+ ( LedgerDB.V2. LSMHandleArgs
182+ (LedgerDB.V2. LSMArgs (mkFsPath [" lsm" ]) lsmSalt (LSM. stdMkBlockIOFS dbDir))
183+ )
184+ )
153185 args' =
154186 ChainDB. completeChainDbArgs
155187 registry
0 commit comments