Skip to content

Commit 66b9ea5

Browse files
committed
more functionality
1 parent 53035ee commit 66b9ea5

File tree

27 files changed

+557
-314
lines changed

27 files changed

+557
-314
lines changed

cardano-chain-gen/test/Test/Cardano/Db/Mock/Config.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ queryDBSync env = DB.runWithConnectionNoLogging (getDBSyncPGPass env)
234234
getPoolLayer :: DBSyncEnv -> IO PoolDataLayer
235235
getPoolLayer env = do
236236
pgconfig <- runOrThrowIO $ DB.readPGPass (enpPGPassSource $ dbSyncParams env)
237-
pool <- runNoLoggingT $ createPostgresqlPool (DB.toConnectionString pgconfig) 1 -- Pool size of 1 for tests
237+
pool <- runNoLoggingT $ createPostgresqlPool (DB.toConnectionSetting pgconfig) 1 -- Pool size of 1 for tests
238238
pure $
239239
postgresqlPoolDataLayer
240240
nullTracer

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import Ouroboros.Network.NodeToClient (IOManager, withIOManager)
5757
import Paths_cardano_db_sync (version)
5858
import System.Directory (createDirectoryIfMissing)
5959
import Prelude (id)
60+
import Hasql.Connection as HC
6061

6162
runDbSyncNode :: MetricSetters -> [(Text, Text)] -> SyncNodeParams -> SyncNodeConfig -> IO ()
6263
runDbSyncNode metricsSetters knownMigrations params syncNodeConfigFromFile =
@@ -115,7 +116,7 @@ runDbSync metricsSetters knownMigrations iomgr trce params syncNodeConfigFromFil
115116
then logInfo trce "All user indexes were created"
116117
else logInfo trce "New user indexes were not created. They may be created later if necessary."
117118

118-
let connectionString = Db.toConnectionString pgConfig
119+
let setting = Db.toConnectionSetting pgConfig
119120

120121
-- For testing and debugging.
121122
whenJust (enpMaybeRollback params) $ \slotNo ->
@@ -124,7 +125,7 @@ runDbSync metricsSetters knownMigrations iomgr trce params syncNodeConfigFromFil
124125
metricsSetters
125126
trce
126127
iomgr
127-
connectionString
128+
connectionSetting
128129
ranMigrations
129130
(void . runMigration)
130131
syncNodeConfigFromFile
@@ -152,7 +153,7 @@ runSyncNode ::
152153
MetricSetters ->
153154
Trace IO Text ->
154155
IOManager ->
155-
ConnectionString ->
156+
Setting ->
156157
-- | migrations were ran on startup
157158
Bool ->
158159
-- | run migration function
@@ -161,7 +162,7 @@ runSyncNode ::
161162
SyncNodeParams ->
162163
SyncOptions ->
163164
IO ()
164-
runSyncNode metricsSetters trce iomgr dbConnString ranMigrations runMigrationFnc syncNodeConfigFromFile syncNodeParams syncOptions = do
165+
runSyncNode metricsSetters trce iomgr connSetting ranMigrations runMigrationFnc syncNodeConfigFromFile syncNodeParams syncOptions = do
165166
whenJust maybeLedgerDir $
166167
\enpLedgerStateDir -> do
167168
createDirectoryIfMissing True (unLedgerStateDir enpLedgerStateDir)
@@ -170,20 +171,21 @@ runSyncNode metricsSetters trce iomgr dbConnString ranMigrations runMigrationFnc
170171
logInfo trce $ "Using alonzo genesis file from: " <> (show . unGenesisFile $ dncAlonzoGenesisFile syncNodeConfigFromFile)
171172

172173
let useLedger = shouldUseLedger (sioLedger $ dncInsertOptions syncNodeConfigFromFile)
173-
cPool <- createPool dbConnString
174+
-- Our main thread
174175
bracket
175-
cPool
176-
Pool.release
177-
(\pool -> do
176+
(runOrThrowIO $ HC.acquire [connSetting])
177+
release
178+
(\connection -> do
178179
runOrThrowIO $ runExceptT $ do
180+
let dbEnv = Db.DbEnv connection (dncEnableDbLogging syncNodeConfigFromFile)
179181
genCfg <- readCardanoGenesisConfig syncNodeConfigFromFile
180-
isJsonbInSchema <- queryIsJsonbInSchema pool
182+
isJsonbInSchema <- queryIsJsonbInSchema dbEnv
181183
logProtocolMagicId trce $ genesisProtocolMagicId genCfg
182184
syncEnv <-
183185
ExceptT $
184186
mkSyncEnvFromConfig
185187
trce
186-
pool
188+
dbEnv
187189
dbConnString
188190
syncOptions
189191
genCfg

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

Lines changed: 68 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ import Ouroboros.Consensus.Protocol.Abstract (ConsensusProtocol)
9898
import Ouroboros.Network.Block (BlockNo (..), Point (..))
9999
import Ouroboros.Network.Magic (NetworkMagic (..))
100100
import qualified Ouroboros.Network.Point as Point
101+
import qualified Hasql.Connection as HqlC
101102

102103
setConsistentLevel :: SyncEnv -> ConsistentLevel -> IO ()
103104
setConsistentLevel env cst = do
@@ -180,7 +181,7 @@ runExtraMigrationsMaybe syncEnv = do
180181
let pcm = getPruneConsume syncEnv
181182
txOutTableType = getTxOutTableType syncEnv
182183
logInfo (getTrace syncEnv) $ "runExtraMigrationsMaybe: " <> textShow pcm
183-
DB.runDbIohkNoLogging (envBackend syncEnv) $
184+
DB.runDbIohkNoLogging (envDbEnv syncEnv) $
184185
DB.runExtraMigrations
185186
(getTrace syncEnv)
186187
txOutTableType
@@ -189,11 +190,17 @@ runExtraMigrationsMaybe syncEnv = do
189190

190191
runAddJsonbToSchema :: SyncEnv -> IO ()
191192
runAddJsonbToSchema syncEnv =
192-
void $ DB.runDbIohkNoLogging (envBackend syncEnv) DB.enableJsonbInSchema
193-
194-
runRemoveJsonbFromSchema :: SyncEnv -> IO ()
195-
runRemoveJsonbFromSchema syncEnv =
196-
void $ DB.runDbIohkNoLogging (envBackend syncEnv) DB.disableJsonbInSchema
193+
void $ DB.runDbIohkNoLogging (envDbEnv syncEnv) DB.enableJsonbInSchema
194+
195+
runRemoveJsonbFromSchema
196+
:: (MonadIO m, AsDbError e)
197+
=> SyncEnv
198+
-> DbAction e m ()
199+
runRemoveJsonbFromSchema syncEnv = do
200+
DB.runDbTx DB.Write transx
201+
where
202+
dbEnv = envDbEnv syncEnv
203+
transx = mkDbTransaction "runRemoveJsonbFromSchema" mkCallSite (DB.disableJsonbInSchema (dbConnection dbEnv))
197204

198205
getSafeBlockNoDiff :: SyncEnv -> Word64
199206
getSafeBlockNoDiff syncEnv = 2 * getSecurityParam syncEnv
@@ -332,9 +339,61 @@ getCurrentTipBlockNo env = do
332339
Just tip -> pure $ At (bBlockNo tip)
333340
Nothing -> pure Origin
334341

342+
mkSyncEnvFromConfig ::
343+
Trace IO Text ->
344+
Db.DbEnv ->
345+
ConnectionString ->
346+
SyncOptions ->
347+
GenesisConfig ->
348+
SyncNodeConfig ->
349+
SyncNodeParams ->
350+
-- | migrations were ran on startup
351+
Bool ->
352+
-- | run migration function
353+
RunMigration ->
354+
IO (Either SyncNodeError SyncEnv)
355+
mkSyncEnvFromConfig trce dbEnv connectionString syncOptions genCfg syncNodeConfigFromFile syncNodeParams ranMigration runMigrationFnc =
356+
case genCfg of
357+
GenesisCardano _ bCfg sCfg _ _
358+
| unProtocolMagicId (Byron.configProtocolMagicId bCfg) /= Shelley.sgNetworkMagic (scConfig sCfg) ->
359+
pure
360+
. Left
361+
. SNErrCardanoConfig
362+
$ mconcat
363+
[ "ProtocolMagicId "
364+
, textShow (unProtocolMagicId $ Byron.configProtocolMagicId bCfg)
365+
, " /= "
366+
, textShow (Shelley.sgNetworkMagic $ scConfig sCfg)
367+
]
368+
| Byron.gdStartTime (Byron.configGenesisData bCfg) /= Shelley.sgSystemStart (scConfig sCfg) ->
369+
pure
370+
. Left
371+
. SNErrCardanoConfig
372+
$ mconcat
373+
[ "SystemStart "
374+
, textShow (Byron.gdStartTime $ Byron.configGenesisData bCfg)
375+
, " /= "
376+
, textShow (Shelley.sgSystemStart $ scConfig sCfg)
377+
]
378+
| otherwise ->
379+
Right
380+
<$> mkSyncEnv
381+
trce
382+
dbEnv
383+
connectionString
384+
syncOptions
385+
(fst $ mkProtocolInfoCardano genCfg [])
386+
(Shelley.sgNetworkId $ scConfig sCfg)
387+
(NetworkMagic . unProtocolMagicId $ Byron.configProtocolMagicId bCfg)
388+
(SystemStart . Byron.gdStartTime $ Byron.configGenesisData bCfg)
389+
syncNodeConfigFromFile
390+
syncNodeParams
391+
ranMigration
392+
runMigrationFnc
393+
335394
mkSyncEnv ::
336395
Trace IO Text ->
337-
Pool ->
396+
Db.DbEnv ->
338397
ConnectionString ->
339398
SyncOptions ->
340399
ProtocolInfo CardanoBlock ->
@@ -346,7 +405,7 @@ mkSyncEnv ::
346405
Bool ->
347406
RunMigration ->
348407
IO SyncEnv
349-
mkSyncEnv trce dbPool connectionString syncOptions protoInfo nw nwMagic systemStart syncNodeConfigFromFile syncNP ranMigrations runMigrationFnc = do
408+
mkSyncEnv trce dbEnv connectionString syncOptions protoInfo nw nwMagic systemStart syncNodeConfigFromFile syncNP ranMigrations runMigrationFnc = do
350409
dbCNamesVar <- newTVarIO =<< dbConstraintNamesExists backend
351410
cache <-
352411
if soptCache syncOptions
@@ -394,7 +453,7 @@ mkSyncEnv trce dbPool connectionString syncOptions protoInfo nw nwMagic systemSt
394453

395454
pure $
396455
SyncEnv
397-
{ envPool = dbPool
456+
{ envDbEnv = dbEnv
398457
, envBootstrap = bootstrapVar
399458
, envCache = cache
400459
, envConnectionString = connectionString
@@ -419,58 +478,6 @@ mkSyncEnv trce dbPool connectionString syncOptions protoInfo nw nwMagic systemSt
419478
hasLedger' = hasLedger . sioLedger . dncInsertOptions
420479
isTxOutConsumedBootstrap' = isTxOutConsumedBootstrap . sioTxOut . dncInsertOptions
421480

422-
mkSyncEnvFromConfig ::
423-
Trace IO Text ->
424-
Pool ->
425-
ConnectionString ->
426-
SyncOptions ->
427-
GenesisConfig ->
428-
SyncNodeConfig ->
429-
SyncNodeParams ->
430-
-- | migrations were ran on startup
431-
Bool ->
432-
-- | run migration function
433-
RunMigration ->
434-
IO (Either SyncNodeError SyncEnv)
435-
mkSyncEnvFromConfig trce dbPool connectionString syncOptions genCfg syncNodeConfigFromFile syncNodeParams ranMigration runMigrationFnc =
436-
case genCfg of
437-
GenesisCardano _ bCfg sCfg _ _
438-
| unProtocolMagicId (Byron.configProtocolMagicId bCfg) /= Shelley.sgNetworkMagic (scConfig sCfg) ->
439-
pure
440-
. Left
441-
. SNErrCardanoConfig
442-
$ mconcat
443-
[ "ProtocolMagicId "
444-
, textShow (unProtocolMagicId $ Byron.configProtocolMagicId bCfg)
445-
, " /= "
446-
, textShow (Shelley.sgNetworkMagic $ scConfig sCfg)
447-
]
448-
| Byron.gdStartTime (Byron.configGenesisData bCfg) /= Shelley.sgSystemStart (scConfig sCfg) ->
449-
pure
450-
. Left
451-
. SNErrCardanoConfig
452-
$ mconcat
453-
[ "SystemStart "
454-
, textShow (Byron.gdStartTime $ Byron.configGenesisData bCfg)
455-
, " /= "
456-
, textShow (Shelley.sgSystemStart $ scConfig sCfg)
457-
]
458-
| otherwise ->
459-
Right
460-
<$> mkSyncEnv
461-
trce
462-
dbPool
463-
connectionString
464-
syncOptions
465-
(fst $ mkProtocolInfoCardano genCfg [])
466-
(Shelley.sgNetworkId $ scConfig sCfg)
467-
(NetworkMagic . unProtocolMagicId $ Byron.configProtocolMagicId bCfg)
468-
(SystemStart . Byron.gdStartTime $ Byron.configGenesisData bCfg)
469-
syncNodeConfigFromFile
470-
syncNodeParams
471-
ranMigration
472-
runMigrationFnc
473-
474481
-- | 'True' is for in memory points and 'False' for on disk
475482
getLatestPoints :: SyncEnv -> IO [(CardanoPoint, Bool)]
476483
getLatestPoints env = do

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ import Database.Persist.Postgresql (ConnectionString)
3636
import Ouroboros.Consensus.BlockchainTime.WallClock.Types (SystemStart (..))
3737
import Ouroboros.Network.Magic (NetworkMagic (..))
3838

39+
3940
data SyncEnv = SyncEnv
40-
{ envPool :: !!Pool.Pool
41+
{ envDbEnv :: !!DB.DbEnv
4142
, envCache :: !CacheStatus
4243
, envConnectionString :: !ConnectionString
4344
, envConsistentLevel :: !(StrictTVar IO ConsistentLevel)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ coalesceConfig pcfg ncfg adjustGenesisPath = do
6767
, dncProtocol = ncProtocol ncfg
6868
, dncRequiresNetworkMagic = ncRequiresNetworkMagic ncfg
6969
, dncEnableLogging = pcEnableLogging pcfg
70+
, dncEnableDbLogging = pcEnableDbLogging pcfg
7071
, dncEnableMetrics = pcEnableMetrics pcfg
7172
, dncPrometheusPort = pcPrometheusPort pcfg
7273
, dncPBftSignatureThreshold = ncPBftSignatureThreshold ncfg

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ data SyncNodeConfig = SyncNodeConfig
125125
, dncProtocol :: !SyncProtocol
126126
, dncRequiresNetworkMagic :: !RequiresNetworkMagic
127127
, dncEnableLogging :: !Bool
128+
, dncEnableDbLogging :: !Bool
128129
, dncEnableMetrics :: !Bool
129130
, dncPrometheusPort :: !Int
130131
, dncPBftSignatureThreshold :: !(Maybe Double)
@@ -153,6 +154,7 @@ data SyncPreConfig = SyncPreConfig
153154
, pcNodeConfigFile :: !NodeConfigFile
154155
, pcEnableFutureGenesis :: !Bool
155156
, pcEnableLogging :: !Bool
157+
, pcEnableDbLogging :: !Bool
156158
, pcEnableMetrics :: !Bool
157159
, pcPrometheusPort :: !Int
158160
, pcInsertConfig :: !SyncInsertConfig
@@ -386,7 +388,7 @@ isPlutusEnabled PlutusDisable = False
386388
isPlutusEnabled PlutusEnable = True
387389
isPlutusEnabled (PlutusScripts _) = True
388390

389-
-- -------------------------------------------------------------------------------------------------
391+
---------------------------------------------------------------------------------------------------
390392

391393
instance FromJSON SyncPreConfig where
392394
parseJSON =
@@ -400,6 +402,7 @@ parseGenSyncNodeConfig o =
400402
<*> fmap NodeConfigFile (o .: "NodeConfigFile")
401403
<*> fmap (fromMaybe True) (o .:? "EnableFutureGenesis")
402404
<*> o .: "EnableLogging"
405+
<*> fmap (fromMaybe False) (o .:? "EnableDbLogging")
403406
<*> o .: "EnableLogMetrics"
404407
<*> fmap (fromMaybe 8080) (o .:? "PrometheusPort")
405408
<*> o .:? "insert_options" .!= def
@@ -453,6 +456,7 @@ parseOverrides obj baseOptions = do
453456
<*> obj .:? "pool_stat" .!= sioPoolStats baseOptions
454457
<*> obj .:? "json_type" .!= sioJsonType baseOptions
455458
<*> obj .:? "remove_jsonb_from_schema" .!= sioRemoveJsonbFromSchema baseOptions
459+
<*> obj .:? "db_debug" .!= sioDbDebug baseOptions
456460

457461
instance ToJSON SyncInsertConfig where
458462
toJSON (SyncInsertConfig preset options) =
@@ -474,6 +478,7 @@ optionsToList SyncInsertOptions {..} =
474478
, toJsonIfSet "pool_stat" sioPoolStats
475479
, toJsonIfSet "json_type" sioJsonType
476480
, toJsonIfSet "remove_jsonb_from_schema" sioRemoveJsonbFromSchema
481+
, toJsonIfSet "db_debug" sioDbDebug
477482
]
478483

479484
toJsonIfSet :: ToJSON a => Text -> a -> Maybe Pair
@@ -495,6 +500,7 @@ instance FromJSON SyncInsertOptions where
495500
<*> obj .:? "pool_stat" .!= sioPoolStats def
496501
<*> obj .:? "json_type" .!= sioJsonType def
497502
<*> obj .:? "remove_jsonb_from_schema" .!= sioRemoveJsonbFromSchema def
503+
<*> obj .:? "db_debug" .!= sioDbDebug def
498504

499505
instance ToJSON SyncInsertOptions where
500506
toJSON SyncInsertOptions {..} =
@@ -511,6 +517,7 @@ instance ToJSON SyncInsertOptions where
511517
, "pool_stat" .= sioPoolStats
512518
, "json_type" .= sioJsonType
513519
, "remove_jsonb_from_schema" .= sioRemoveJsonbFromSchema
520+
, "db_debug" .= sioDbDebug
514521
]
515522

516523
instance ToJSON RewardsConfig where

0 commit comments

Comments
 (0)