1
1
{-# LANGUAGE GADTs #-}
2
2
{-# LANGUAGE ScopedTypeVariables #-}
3
- {-# LANGUAGE NoImplicitPrelude #-}
4
3
5
4
module Cardano.DbSync.Api.Types (
6
5
SyncEnv (.. ),
@@ -10,34 +9,39 @@ module Cardano.DbSync.Api.Types (
10
9
RunMigration ,
11
10
ConsistentLevel (.. ),
12
11
CurrentEpochNo (.. ),
12
+ Prefetch (.. ),
13
+ PrefetchTxId (.. ),
14
+ newPrefetch ,
13
15
) where
14
16
15
17
import qualified Cardano.Db as DB
16
18
import Cardano.DbSync.Cache.Types (CacheStatus , StakeChannels )
17
19
import Cardano.DbSync.Config.Types (SyncNodeConfig )
20
+ import qualified Cardano.DbSync.Era.Shelley.Generic.Tx.Types as Generic
18
21
import Cardano.DbSync.Ledger.Types (HasLedgerEnv )
19
22
import Cardano.DbSync.LocalStateQuery (NoLedgerEnv )
20
23
import Cardano.DbSync.Types (
24
+ CardanoBlock ,
21
25
OffChainPoolResult ,
22
26
OffChainPoolWorkQueue ,
23
27
OffChainVoteResult ,
24
28
OffChainVoteWorkQueue ,
25
29
)
26
- import Cardano.Prelude (Bool , Eq , IO , Show , Word64 )
27
30
import Cardano.Slotting.Slot (EpochNo (.. ))
28
- import Control.Concurrent.Class.MonadSTM.Strict (
29
- StrictTVar ,
30
- )
31
+ import Control.Concurrent.Class.MonadSTM.Strict (StrictTVar , newTBQueueIO , newTVarIO )
31
32
import Control.Concurrent.Class.MonadSTM.Strict.TBQueue (StrictTBQueue )
33
+ import Data.Map (Map )
32
34
import qualified Data.Strict.Maybe as Strict
33
35
import Data.Time.Clock (UTCTime )
36
+ import Data.Word (Word64 )
34
37
import Database.Persist.Postgresql (ConnectionString )
35
38
import Database.Persist.Sql (SqlBackend )
36
39
import Ouroboros.Consensus.BlockchainTime.WallClock.Types (SystemStart (.. ))
37
40
import Ouroboros.Network.Magic (NetworkMagic (.. ))
38
41
39
42
data SyncEnv = SyncEnv
40
43
{ envBackend :: ! SqlBackend
44
+ , envPrefetch :: ! Prefetch
41
45
, envCache :: ! CacheStatus
42
46
, envConnectionString :: ! ConnectionString
43
47
, envConsistentLevel :: ! (StrictTVar IO ConsistentLevel )
@@ -101,3 +105,16 @@ data ConsistentLevel = Consistent | DBAheadOfLedger | Unchecked
101
105
newtype CurrentEpochNo = CurrentEpochNo
102
106
{ cenEpochNo :: Strict. Maybe EpochNo
103
107
}
108
+
109
+ data PrefetchTxId = PrefetchTxIdBlock CardanoBlock | PrefetchTxIdBlocks [CardanoBlock ]
110
+
111
+ data Prefetch = Prefetch
112
+ { pTxInQueue :: StrictTBQueue IO PrefetchTxId
113
+ , pTxIn :: StrictTVar IO (Map Generic. TxInKey (Maybe (DB. TxId , Either Generic. TxInKey DB. TxOutIdW , Maybe DB. DbLovelace )))
114
+ }
115
+
116
+ newPrefetch :: IO Prefetch
117
+ newPrefetch =
118
+ Prefetch
119
+ <$> newTBQueueIO 1000
120
+ <*> newTVarIO mempty
0 commit comments