1+ {-# LANGUAGE ApplicativeDo #-}
12{-# LANGUAGE BangPatterns #-}
23{-# LANGUAGE FlexibleContexts #-}
34{-# LANGUAGE GADTs #-}
@@ -43,6 +44,7 @@ module Cardano.DbSync.Api (
4344 generateNewEpochEvents ,
4445 logDbState ,
4546 convertToPoint ,
47+ determineIsolationLevel ,
4648)
4749where
4850
@@ -91,8 +93,6 @@ import Cardano.DbSync.Ledger.Types (HasLedgerEnv (..), LedgerStateFile (..), Sna
9193import Cardano.DbSync.LocalStateQuery
9294import Cardano.DbSync.Types
9395import Cardano.DbSync.Util
94- import qualified Hasql.Pipeline as HsqlP
95- import qualified Hasql.Session as HsqlSes
9696
9797setConsistentLevel :: SyncEnv -> ConsistentLevel -> IO ()
9898setConsistentLevel env cst = do
@@ -247,7 +247,7 @@ getInsertOptions :: SyncEnv -> InsertOptions
247247getInsertOptions = soptInsertOptions . envOptions
248248
249249getSlotHash :: DB. DbEnv -> SlotNo -> IO [(SlotNo , ByteString )]
250- getSlotHash backend = DB. runDbDirectSilent backend . DB. querySlotHash
250+ getSlotHash backend slotNo = DB. runDbTransSilent backend ( Just DB. ReadCommitted ) ( DB. querySlotHash slotNo)
251251
252252hasLedgerState :: SyncEnv -> Bool
253253hasLedgerState syncEnv =
@@ -269,18 +269,13 @@ getDbLatestBlockInfo dbEnv = do
269269 , bBlockNo = BlockNo . fromMaybe 0 $ DB. blockBlockNo block
270270 }
271271
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)
272+ -- | Determine isolation level based on sync state
273+ determineIsolationLevel :: SyncEnv -> IO (Maybe DB. IsolationLevel )
274+ determineIsolationLevel syncEnv = do
275+ syncState <- readTVarIO (envDbIsolationState syncEnv)
276+ pure $ case syncState of
277+ DB. SyncLagging -> Just DB. ReadCommitted
278+ DB. SyncFollowing -> Nothing
284279
285280getDbTipBlockNo :: SyncEnv -> IO (Point. WithOrigin BlockNo )
286281getDbTipBlockNo env = do
@@ -329,7 +324,7 @@ mkSyncEnv ::
329324 Bool ->
330325 IO SyncEnv
331326mkSyncEnv metricSetters trce dbEnv syncOptions protoInfo nw maxLovelaceSupply nwMagic systemStart syncNodeConfigFromFile syncNP runNearTipMigrationFnc isJsonbInSchema = do
332- dbCNamesVar <- newTVarIO =<< DB. runDbDirectSilent dbEnv DB. queryRewardAndEpochStakeConstraints
327+ dbCNamesVar <- newTVarIO =<< DB. runDbTransSilent dbEnv ( Just DB. ReadCommitted ) DB. queryRewardAndEpochStakeConstraints
333328 cache <-
334329 if soptCache syncOptions
335330 then
@@ -466,7 +461,7 @@ getLatestPoints env = do
466461 verifySnapshotPoint env snapshotPoints
467462 NoLedger _ -> do
468463 -- Brings the 5 latest.
469- lastPoints <- DB. runDbDirectSilent (envDbEnv env) DB. queryLatestPoints
464+ lastPoints <- DB. runDbTransSilent (envDbEnv env) ( Just DB. ReadCommitted ) DB. queryLatestPoints
470465 pure $ mapMaybe convert lastPoints
471466 where
472467 convert (Nothing , _) = Nothing
@@ -521,7 +516,7 @@ getBootstrapInProgress ::
521516 DB. DbEnv ->
522517 IO Bool
523518getBootstrapInProgress trce bootstrapFlag dbEnv = do
524- DB. runDbDirectSilent dbEnv $ do
519+ DB. runDbTransSilent dbEnv ( Just DB. ReadCommitted ) $ do
525520 ems <- DB. queryAllExtraMigrations
526521 let btsState = DB. bootstrapState ems
527522 case (bootstrapFlag, btsState) of
0 commit comments