Skip to content

Commit ed8a586

Browse files
committed
Regroup modules
1 parent e7e0f4b commit ed8a586

File tree

9 files changed

+183
-165
lines changed

9 files changed

+183
-165
lines changed

cardano-db-sync/cardano-db-sync.cabal

+4-3
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ library
5454
Cardano.DbSync.Config.Node
5555
Cardano.DbSync.Config.Shelley
5656
Cardano.DbSync.Config.Types
57-
Cardano.DbSync.Database
5857
Cardano.DbSync.DbAction
5958
Cardano.DbSync.Error
6059

@@ -110,14 +109,14 @@ library
110109

111110
Cardano.DbSync.Metrics
112111

112+
Cardano.DbSync.Block
113113
Cardano.DbSync.Cache
114114
Cardano.DbSync.Cache.Epoch
115115
Cardano.DbSync.Cache.FIFO
116116
Cardano.DbSync.Cache.LRU
117117
Cardano.DbSync.Cache.Stake
118118
Cardano.DbSync.Cache.Types
119119
Cardano.DbSync.Cache.Util
120-
Cardano.DbSync.Default
121120
Cardano.DbSync.Epoch
122121

123122
Cardano.DbSync.Rollback
@@ -133,7 +132,9 @@ library
133132
Cardano.DbSync.LocalStateQuery
134133
Cardano.DbSync.StateQuery
135134
Cardano.DbSync.Sync
136-
Cardano.DbSync.Threads
135+
Cardano.DbSync.Threads.Database
136+
Cardano.DbSync.Threads.EpochStake
137+
Cardano.DbSync.Threads.Stake
137138
Cardano.DbSync.Tracing.ToObjectOrphans
138139
Cardano.DbSync.Types
139140

cardano-db-sync/src/Cardano/DbSync.hs

+3-2
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,16 @@ import Cardano.DbSync.Api.Types (InsertOptions (..), RunMigration, SyncEnv (..),
3333
import Cardano.DbSync.Config (configureLogging)
3434
import Cardano.DbSync.Config.Cardano
3535
import Cardano.DbSync.Config.Types
36-
import Cardano.DbSync.Database
3736
import Cardano.DbSync.DbAction
3837
import Cardano.DbSync.Era
3938
import Cardano.DbSync.Error
4039
import Cardano.DbSync.Ledger.State
4140
import Cardano.DbSync.OffChain (runFetchOffChainPoolThread, runFetchOffChainVoteThread)
4241
import Cardano.DbSync.Rollback (unsafeRollback)
4342
import Cardano.DbSync.Sync (runSyncNodeClient)
44-
import Cardano.DbSync.Threads
43+
import Cardano.DbSync.Threads.Database
44+
import Cardano.DbSync.Threads.EpochStake
45+
import Cardano.DbSync.Threads.Stake
4546
import Cardano.DbSync.Tracing.ToObjectOrphans ()
4647
import Cardano.DbSync.Types
4748
import Cardano.DbSync.Util.Constraint (queryIsJsonbInSchema)

cardano-db-sync/src/Cardano/DbSync/Api.hs

+4-116
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
{-# LANGUAGE GADTs #-}
44
{-# LANGUAGE OverloadedStrings #-}
55
{-# LANGUAGE ScopedTypeVariables #-}
6-
{-# LANGUAGE TupleSections #-}
7-
{-# LANGUAGE TypeApplications #-}
86
{-# LANGUAGE NoImplicitPrelude #-}
97

108
module Cardano.DbSync.Api (
@@ -29,20 +27,12 @@ module Cardano.DbSync.Api (
2927
getSkipTxIn,
3028
getPrunes,
3129
mkSyncEnvFromConfig,
32-
verifySnapshotPoint,
3330
getInsertOptions,
3431
getTrace,
3532
getTopLevelConfig,
3633
getNetwork,
3734
hasLedgerState,
38-
getLatestPoints,
39-
getSlotHash,
40-
getDbLatestBlockInfo,
41-
getDbTipBlockNo,
42-
getCurrentTipBlockNo,
4335
generateNewEpochEvents,
44-
logDbState,
45-
convertToPoint,
4636
) where
4737

4838
import Cardano.BM.Trace (Trace, logInfo, logWarning)
@@ -56,42 +46,34 @@ import Cardano.DbSync.Config.Shelley
5646
import Cardano.DbSync.Config.Types
5747
import Cardano.DbSync.Error
5848
import Cardano.DbSync.Ledger.Event (LedgerEvent (..))
59-
import Cardano.DbSync.Ledger.State (
60-
getHeaderHash,
61-
hashToAnnotation,
62-
listKnownSnapshots,
63-
mkHasLedgerEnv,
64-
)
65-
import Cardano.DbSync.Ledger.Types (HasLedgerEnv (..), LedgerStateFile (..), SnapshotPoint (..))
49+
import Cardano.DbSync.Ledger.State (mkHasLedgerEnv)
50+
import Cardano.DbSync.Ledger.Types (HasLedgerEnv (..))
6651
import Cardano.DbSync.LocalStateQuery
6752
import Cardano.DbSync.Types
6853
import Cardano.DbSync.Util
6954
import Cardano.DbSync.Util.Constraint (dbConstraintNamesExists)
7055
import qualified Cardano.Ledger.BaseTypes as Ledger
7156
import qualified Cardano.Ledger.Shelley.Genesis as Shelley
7257
import Cardano.Prelude
73-
import Cardano.Slotting.Slot (EpochNo (..), SlotNo (..), WithOrigin (..))
58+
import Cardano.Slotting.Slot (EpochNo (..))
7459
import Control.Concurrent.Class.MonadSTM.Strict (
7560
newTBQueueIO,
7661
newTVarIO,
7762
readTVar,
7863
readTVarIO,
7964
writeTVar,
8065
)
81-
import Control.Monad.Trans.Maybe (MaybeT (..))
8266
import qualified Data.Strict.Maybe as Strict
8367
import Data.Time.Clock (getCurrentTime)
8468
import Database.Persist.Postgresql (ConnectionString)
8569
import Database.Persist.Sql (SqlBackend)
86-
import Ouroboros.Consensus.Block.Abstract (BlockProtocol, HeaderHash, Point (..), fromRawHash)
70+
import Ouroboros.Consensus.Block.Abstract (BlockProtocol)
8771
import Ouroboros.Consensus.BlockchainTime.WallClock.Types (SystemStart (..))
8872
import Ouroboros.Consensus.Config (SecurityParam (..), TopLevelConfig, configSecurityParam)
8973
import Ouroboros.Consensus.Node.ProtocolInfo (ProtocolInfo (pInfoConfig))
9074
import qualified Ouroboros.Consensus.Node.ProtocolInfo as Consensus
9175
import Ouroboros.Consensus.Protocol.Abstract (ConsensusProtocol)
92-
import Ouroboros.Network.Block (BlockNo (..), Point (..))
9376
import Ouroboros.Network.Magic (NetworkMagic (..))
94-
import qualified Ouroboros.Network.Point as Point
9577

9678
setConsistentLevel :: SyncEnv -> ConsistentLevel -> IO ()
9779
setConsistentLevel env cst = do
@@ -243,60 +225,12 @@ getNetwork sEnv =
243225
getInsertOptions :: SyncEnv -> InsertOptions
244226
getInsertOptions = soptInsertOptions . envOptions
245227

246-
getSlotHash :: SqlBackend -> SlotNo -> IO [(SlotNo, ByteString)]
247-
getSlotHash backend = DB.runDbIohkNoLogging backend . DB.querySlotHash
248-
249228
hasLedgerState :: SyncEnv -> Bool
250229
hasLedgerState syncEnv =
251230
case envLedgerEnv syncEnv of
252231
HasLedger _ -> True
253232
NoLedger _ -> False
254233

255-
getDbLatestBlockInfo :: SqlBackend -> IO (Maybe TipInfo)
256-
getDbLatestBlockInfo backend = do
257-
runMaybeT $ do
258-
block <- MaybeT $ DB.runDbIohkNoLogging backend DB.queryLatestBlock
259-
-- The EpochNo, SlotNo and BlockNo can only be zero for the Byron
260-
-- era, but we need to make the types match, hence `fromMaybe`.
261-
pure $
262-
TipInfo
263-
{ bHash = DB.blockHash block
264-
, bEpochNo = EpochNo . fromMaybe 0 $ DB.blockEpochNo block
265-
, bSlotNo = SlotNo . fromMaybe 0 $ DB.blockSlotNo block
266-
, bBlockNo = BlockNo . fromMaybe 0 $ DB.blockBlockNo block
267-
}
268-
269-
getDbTipBlockNo :: SyncEnv -> IO (Point.WithOrigin BlockNo)
270-
getDbTipBlockNo env = do
271-
mblk <- getDbLatestBlockInfo (envBackend env)
272-
pure $ maybe Point.Origin (Point.At . bBlockNo) mblk
273-
274-
logDbState :: SyncEnv -> IO ()
275-
logDbState env = do
276-
mblk <- getDbLatestBlockInfo (envBackend env)
277-
case mblk of
278-
Nothing -> logInfo tracer "Database is empty"
279-
Just tip -> logInfo tracer $ mconcat ["Database tip is at ", showTip tip]
280-
where
281-
showTip :: TipInfo -> Text
282-
showTip tipInfo =
283-
mconcat
284-
[ "slot "
285-
, textShow (unSlotNo $ bSlotNo tipInfo)
286-
, ", block "
287-
, textShow (unBlockNo $ bBlockNo tipInfo)
288-
]
289-
290-
tracer :: Trace IO Text
291-
tracer = getTrace env
292-
293-
getCurrentTipBlockNo :: SyncEnv -> IO (WithOrigin BlockNo)
294-
getCurrentTipBlockNo env = do
295-
maybeTip <- getDbLatestBlockInfo (envBackend env)
296-
case maybeTip of
297-
Just tip -> pure $ At (bBlockNo tip)
298-
Nothing -> pure Origin
299-
300234
mkSyncEnv ::
301235
Trace IO Text ->
302236
SqlBackend ->
@@ -432,52 +366,6 @@ mkSyncEnvFromConfig trce backend connectionString syncOptions genCfg syncNodeCon
432366
syncNodeParams
433367
runMigrationFnc
434368

435-
-- | 'True' is for in memory points and 'False' for on disk
436-
getLatestPoints :: SyncEnv -> IO [(CardanoPoint, Bool)]
437-
getLatestPoints env = do
438-
case envLedgerEnv env of
439-
HasLedger hasLedgerEnv -> do
440-
snapshotPoints <- listKnownSnapshots hasLedgerEnv
441-
verifySnapshotPoint env snapshotPoints
442-
NoLedger _ -> do
443-
-- Brings the 5 latest.
444-
lastPoints <- DB.runDbIohkNoLogging (envBackend env) DB.queryLatestPoints
445-
pure $ mapMaybe convert lastPoints
446-
where
447-
convert (Nothing, _) = Nothing
448-
convert (Just slot, bs) = convertToDiskPoint (SlotNo slot) bs
449-
450-
verifySnapshotPoint :: SyncEnv -> [SnapshotPoint] -> IO [(CardanoPoint, Bool)]
451-
verifySnapshotPoint env snapPoints =
452-
catMaybes <$> mapM validLedgerFileToPoint snapPoints
453-
where
454-
validLedgerFileToPoint :: SnapshotPoint -> IO (Maybe (CardanoPoint, Bool))
455-
validLedgerFileToPoint (OnDisk lsf) = do
456-
hashes <- getSlotHash (envBackend env) (lsfSlotNo lsf)
457-
let valid = find (\(_, h) -> lsfHash lsf == hashToAnnotation h) hashes
458-
case valid of
459-
Just (slot, hash) | slot == lsfSlotNo lsf -> pure $ convertToDiskPoint slot hash
460-
_ -> pure Nothing
461-
validLedgerFileToPoint (InMemory pnt) = do
462-
case pnt of
463-
GenesisPoint -> pure Nothing
464-
BlockPoint slotNo hsh -> do
465-
hashes <- getSlotHash (envBackend env) slotNo
466-
let valid = find (\(_, dbHash) -> getHeaderHash hsh == dbHash) hashes
467-
case valid of
468-
Just (dbSlotNo, _) | slotNo == dbSlotNo -> pure $ Just (pnt, True)
469-
_ -> pure Nothing
470-
471-
convertToDiskPoint :: SlotNo -> ByteString -> Maybe (CardanoPoint, Bool)
472-
convertToDiskPoint slot hashBlob = (,False) <$> convertToPoint slot hashBlob
473-
474-
convertToPoint :: SlotNo -> ByteString -> Maybe CardanoPoint
475-
convertToPoint slot hashBlob =
476-
Point . Point.block slot <$> convertHashBlob hashBlob
477-
where
478-
convertHashBlob :: ByteString -> Maybe (HeaderHash CardanoBlock)
479-
convertHashBlob = Just . fromRawHash (Proxy @CardanoBlock)
480-
481369
getSecurityParam :: SyncEnv -> Word64
482370
getSecurityParam syncEnv =
483371
case envLedgerEnv syncEnv of

cardano-db-sync/src/Cardano/DbSync/Default.hs renamed to cardano-db-sync/src/Cardano/DbSync/Block.hs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
{-# LANGUAGE NoImplicitPrelude #-}
88
{-# OPTIONS_GHC -Wno-unused-matches #-}
99

10-
module Cardano.DbSync.Default (
10+
module Cardano.DbSync.Block (
1111
insertListBlocks,
1212
) where
1313

@@ -82,8 +82,8 @@ applyAndInsertBlockMaybe syncEnv tracer cblk = do
8282
, ". Time to restore consistency."
8383
]
8484
rollbackFromBlockNo syncEnv (blockNo cblk)
85-
insertBlock syncEnv cblk applyRes True tookSnapshot
8685
liftIO $ setConsistentLevel syncEnv Consistent
86+
insertBlock syncEnv cblk applyRes True tookSnapshot
8787
Right blockId | Just (adaPots, slotNo, epochNo) <- getAdaPots applyRes -> do
8888
replaced <- lift $ DB.replaceAdaPots blockId $ mkAdaPots blockId slotNo epochNo adaPots
8989
if replaced

cardano-db-sync/src/Cardano/DbSync/Cache/Stake.hs

+15
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,21 @@ import Data.Either.Combinators
2929
import qualified Data.Map.Strict as Map
3030
import Database.Persist.Postgresql (SqlBackend)
3131

32+
-- | TO be called only by the stake thread
33+
resolveInsertRewardAccount ::
34+
forall m.
35+
(MonadBaseControl IO m, MonadIO m) =>
36+
SyncEnv ->
37+
CacheAction ->
38+
RewAccount ->
39+
ReaderT SqlBackend m DB.StakeAddressId
40+
resolveInsertRewardAccount syncEnv cacheUA ra = do
41+
eiStakeId <- queryStakeAddrWithCacheRetBs syncEnv cacheUA False ra -- read only
42+
case eiStakeId of
43+
Right stakeId -> pure stakeId
44+
Left (_, bs) -> insertStakeAddress ra (Just bs)
45+
46+
-- | TO be called only by the stake thread
3247
-- If the address already exists in the table, it will not be inserted again (due to
3348
-- the uniqueness constraint) but the function will return the 'StakeAddressId'.
3449
insertStakeAddress ::

cardano-db-sync/src/Cardano/DbSync/Sync.hs

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import Cardano.Client.Subscription (subscribe)
3030
import Cardano.DbSync.Api
3131
import Cardano.DbSync.Api.Types (ConsistentLevel (..), LedgerEnv (..), SyncEnv (..), envLedgerEnv, envNetworkMagic, envOptions)
3232
import Cardano.DbSync.Config
33-
import Cardano.DbSync.Database
3433
import Cardano.DbSync.DbAction
3534
import Cardano.DbSync.LocalStateQuery
3635
import Cardano.DbSync.Metrics

0 commit comments

Comments
 (0)