Skip to content

Commit 6675bcb

Browse files
committed
pipeline the initialisation queries
1 parent 41ca767 commit 6675bcb

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

  • cardano-db-sync/src/Cardano/DbSync

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ import Cardano.DbSync.Ledger.Types (HasLedgerEnv (..), LedgerStateFile (..), Sna
9191
import Cardano.DbSync.LocalStateQuery
9292
import Cardano.DbSync.Types
9393
import Cardano.DbSync.Util
94+
import qualified Hasql.Pipeline as HsqlP
95+
import qualified Hasql.Session as HsqlSes
9496

9597
setConsistentLevel :: SyncEnv -> ConsistentLevel -> IO ()
9698
setConsistentLevel env cst = do
@@ -256,7 +258,7 @@ hasLedgerState syncEnv =
256258
getDbLatestBlockInfo :: DB.DbEnv -> IO (Maybe TipInfo)
257259
getDbLatestBlockInfo dbEnv = do
258260
runMaybeT $ do
259-
block <- MaybeT $ DB.runDbDirectSilent dbEnv DB.queryLatestBlock
261+
block <- MaybeT $ DB.runDbTransSilent dbEnv (Just DB.ReadCommitted) DB.queryLatestBlock
260262
-- The EpochNo, SlotNo and BlockNo can only be zero for the Byron
261263
-- era, but we need to make the types match, hence `fromMaybe`.
262264
pure $
@@ -267,6 +269,19 @@ getDbLatestBlockInfo dbEnv = do
267269
, bBlockNo = BlockNo . fromMaybe 0 $ DB.blockBlockNo block
268270
}
269271

272+
-- | Pipeline block and points queries in a single transaction for better performance
273+
loadBlockAndPointsData :: DB.DbEnv -> IO (Maybe DB.Block, [(Maybe Word64, ByteString)])
274+
loadBlockAndPointsData dbEnv =
275+
DB.runDbTransSilent dbEnv (Just DB.ReadCommitted) $ do
276+
(mBlockEntity, points) <- DB.runSession DB.mkDbCallStack $
277+
HsqlSes.pipeline $ do
278+
blk <- HsqlP.statement () DB.queryLatestBlockStmt
279+
pts <- HsqlP.statement () DB.queryLatestPointsStmt
280+
pure (blk, pts)
281+
282+
let mBlock = DB.entityVal <$> mBlockEntity
283+
pure (mBlock, points)
284+
270285
getDbTipBlockNo :: SyncEnv -> IO (Point.WithOrigin BlockNo)
271286
getDbTipBlockNo env = do
272287
mblk <- getDbLatestBlockInfo (envDbEnv env)

0 commit comments

Comments
 (0)