@@ -28,6 +28,7 @@ module Cardano.Node.Configuration.POM
2828where
2929
3030import Cardano.Crypto (RequiresNetworkMagic (.. ))
31+ import Cardano.Ledger.BaseTypes
3132import Cardano.Logging.Types
3233import Cardano.Network.ConsensusMode (ConsensusMode (.. ), defaultConsensusMode )
3334import qualified Cardano.Network.Diffusion.Configuration as Cardano
@@ -48,7 +49,9 @@ import Ouroboros.Consensus.Node.Genesis (GenesisConfig, GenesisConfigF
4849 defaultGenesisConfigFlags , mkGenesisConfig )
4950import Ouroboros.Consensus.Storage.LedgerDB.Args (QueryBatchSize (.. ))
5051import Ouroboros.Consensus.Storage.LedgerDB.Snapshots (NumOfDiskSnapshots (.. ),
51- SnapshotInterval (.. ))
52+ SnapshotDelayRange (.. ), SnapshotFrequency (.. ), SnapshotFrequencyArgs (.. ),
53+ SnapshotPolicyArgs (.. ), defaultSnapshotPolicyArgs )
54+ import Ouroboros.Consensus.Util.Args (OverrideOrDefault (.. ))
5255import Ouroboros.Consensus.Storage.LedgerDB.V1.Args (FlushFrequency (.. ))
5356import Ouroboros.Network.Diffusion.Configuration as Configuration
5457import qualified Ouroboros.Network.Diffusion.Configuration as Ouroboros
@@ -510,8 +513,14 @@ instance FromJSON PartialNodeConfiguration where
510513 Nothing -> return Nothing
511514
512515 parseLedgerDbConfig v = do
513- let snapInterval x = fmap (RequestedSnapshotInterval . secondsToDiffTime) <$> x .:? " SnapshotInterval"
514- snapNum x = fmap RequestedNumOfDiskSnapshots <$> x .:? " NumOfDiskSnapshots"
516+ -- TODO maybe don't silently convert old format (which was in seconds)
517+ -- to new format (which is in slots), despite these being the same on
518+ -- mainnet?
519+ let snapInterval x = do
520+ si <- x .:? " SnapshotInterval"
521+ when (any (<= 0 ) si) $ fail $ " Non-positive SnapshotInterval: " <> show si
522+ pure $ Override . SlotNo <$> si
523+ snapNum x = fmap (Override . NumOfDiskSnapshots ) <$> x .:? " NumOfDiskSnapshots"
515524
516525 mTopLevelSnapInterval <- snapInterval v
517526 mTopLevelSnapNum <- snapNum v
@@ -525,12 +534,32 @@ instance FromJSON PartialNodeConfiguration where
525534 mLedgerDB <- v .:? " LedgerDB"
526535 case mLedgerDB of
527536 Nothing -> do
528- let si = fromMaybe DefaultSnapshotInterval mTopLevelSnapInterval
529- sn = fromMaybe DefaultNumOfDiskSnapshots mTopLevelSnapNum
530- return $ Just $ LedgerDbConfiguration sn si DefaultQueryBatchSize V2InMemory deprecatedOpts
537+ let si = fromMaybe UseDefault mTopLevelSnapInterval
538+ sn = fromMaybe UseDefault mTopLevelSnapNum
539+ sf = SnapshotFrequencyArgs {
540+ sfaInterval = unsafeNonZero . unSlotNo <$> si
541+ , sfaOffset = UseDefault
542+ , sfaRateLimit = UseDefault
543+ , sfaDelaySnapshotRange = UseDefault
544+ }
545+ spArgs = SnapshotPolicyArgs (SnapshotFrequency sf) sn
546+ return $ Just $ LedgerDbConfiguration spArgs DefaultQueryBatchSize V2InMemory deprecatedOpts
531547 Just ledgerDB -> flip (withObject " LedgerDB" ) ledgerDB $ \ o -> do
532- ldbSnapInterval <- (getLast . (Last mTopLevelSnapInterval <> ) . Last <$> snapInterval o) .!= DefaultSnapshotInterval
533- ldbSnapNum <- (getLast . (Last mTopLevelSnapNum <> ) . Last <$> snapNum o) .!= DefaultNumOfDiskSnapshots
548+ ldbSnapInterval <- (getLast . (Last mTopLevelSnapInterval <> ) . Last <$> snapInterval o) .!= UseDefault
549+ ldbSnapNum <- (getLast . (Last mTopLevelSnapNum <> ) . Last <$> snapNum o) .!= UseDefault
550+ ldbSnapOffset <- (fmap Override <$> o .:? " SlotOffset" ) .!= UseDefault
551+ ldbSnapRateLimit<- (fmap (Override . secondsToDiffTime) <$> o .:? " RateLimit" ) .!= UseDefault
552+ ldbSnapMinDelay <- o .:? " MinDelay"
553+ ldbSnapMaxDelay <- o .:? " MaxDelay"
554+ ldbSnapDelayRange <-
555+ case (ldbSnapMinDelay, ldbSnapMaxDelay) of
556+ (Just minDelay, Just maxDelay) ->
557+ if minDelay <= maxDelay then
558+ pure (Override (SnapshotDelayRange (secondsToDiffTime minDelay) (secondsToDiffTime maxDelay)))
559+ else fail $ " Invalid ledger snapshot delay range, MinDelay > MaxDelay: "
560+ <> show minDelay <> " > " <> show maxDelay
561+ -- use the default delay range if either min or max is unspecified
562+ _ -> pure UseDefault
534563 qsize <- (fmap RequestedQueryBatchSize <$> o .:? " QueryBatchSize" ) .!= DefaultQueryBatchSize
535564 backend <- o .:? " Backend" .!= " V2InMemory"
536565 selector <- case backend of
@@ -545,7 +574,14 @@ instance FromJSON PartialNodeConfiguration where
545574 lsmPath :: Maybe FilePath <- o .:? " LSMDatabasePath"
546575 pure $ V2LSM lsmPath
547576 _ -> fail $ " Malformed LedgerDB Backend: " <> backend
548- pure $ Just $ LedgerDbConfiguration ldbSnapNum ldbSnapInterval qsize selector deprecatedOpts
577+ let sf = SnapshotFrequencyArgs {
578+ sfaInterval = unsafeNonZero . unSlotNo <$> ldbSnapInterval
579+ , sfaOffset = ldbSnapOffset
580+ , sfaRateLimit = ldbSnapRateLimit
581+ , sfaDelaySnapshotRange = ldbSnapDelayRange
582+ }
583+ spArgs = SnapshotPolicyArgs (SnapshotFrequency sf) ldbSnapNum
584+ pure $ Just $ LedgerDbConfiguration spArgs qsize selector deprecatedOpts
549585
550586 parseByronProtocol v = do
551587 primary <- v .:? " ByronGenesisFile"
@@ -712,8 +748,7 @@ defaultPartialNodeConfiguration =
712748 , pncLedgerDbConfig =
713749 Last $ Just $
714750 LedgerDbConfiguration
715- DefaultNumOfDiskSnapshots
716- DefaultSnapshotInterval
751+ defaultSnapshotPolicyArgs
717752 DefaultQueryBatchSize
718753 V2InMemory
719754 noDeprecatedOptions
0 commit comments