@@ -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
@@ -47,8 +48,9 @@ import Ouroboros.Consensus.Node (NodeDatabasePaths (..))
4748import Ouroboros.Consensus.Node.Genesis (GenesisConfig , GenesisConfigFlags ,
4849 defaultGenesisConfigFlags , mkGenesisConfig )
4950import Ouroboros.Consensus.Storage.LedgerDB.Args (QueryBatchSize (.. ))
50- import Ouroboros.Consensus.Storage.LedgerDB.Snapshots (NumOfDiskSnapshots (.. ),
51- SnapshotInterval (.. ))
51+ import Ouroboros.Consensus.Storage.LedgerDB.Snapshots (OverrideOrDefault (.. ),
52+ SnapshotDelayRange (.. ), SnapshotFrequency (.. ), SnapshotFrequencyArgs (.. ),
53+ SnapshotPolicyArgs (.. ), defaultSnapshotPolicyArgs )
5254import Ouroboros.Consensus.Storage.LedgerDB.V1.Args (FlushFrequency (.. ))
5355import Ouroboros.Network.Diffusion.Configuration as Configuration
5456import qualified Ouroboros.Network.Diffusion.Configuration as Ouroboros
@@ -510,8 +512,14 @@ instance FromJSON PartialNodeConfiguration where
510512 Nothing -> return Nothing
511513
512514 parseLedgerDbConfig v = do
513- let snapInterval x = fmap (RequestedSnapshotInterval . secondsToDiffTime) <$> x .:? " SnapshotInterval"
514- snapNum x = fmap RequestedNumOfDiskSnapshots <$> x .:? " NumOfDiskSnapshots"
515+ -- TODO maybe don't silently convert old format (which was in seconds)
516+ -- to new format (which is in slots), despite these being the same on
517+ -- mainnet?
518+ let snapInterval x = do
519+ si <- x .:? " SnapshotInterval"
520+ when (any (<= 0 ) si) $ fail $ " Non-positive SnapshotInterval: " <> show si
521+ pure $ Override . SlotNo <$> si
522+ snapNum x = fmap Override <$> x .:? " NumOfDiskSnapshots"
515523
516524 mTopLevelSnapInterval <- snapInterval v
517525 mTopLevelSnapNum <- snapNum v
@@ -525,12 +533,32 @@ instance FromJSON PartialNodeConfiguration where
525533 mLedgerDB <- v .:? " LedgerDB"
526534 case mLedgerDB of
527535 Nothing -> do
528- let si = fromMaybe DefaultSnapshotInterval mTopLevelSnapInterval
529- sn = fromMaybe DefaultNumOfDiskSnapshots mTopLevelSnapNum
530- return $ Just $ LedgerDbConfiguration sn si DefaultQueryBatchSize V2InMemory deprecatedOpts
536+ let si = fromMaybe UseDefault mTopLevelSnapInterval
537+ sn = fromMaybe UseDefault mTopLevelSnapNum
538+ sf = SnapshotFrequencyArgs {
539+ sfaInterval = unsafeNonZero . unSlotNo <$> si
540+ , sfaOffset = UseDefault
541+ , sfaRateLimit = UseDefault
542+ , sfaDelaySnapshotRange = UseDefault
543+ }
544+ spArgs = SnapshotPolicyArgs (SnapshotFrequency sf) sn
545+ return $ Just $ LedgerDbConfiguration spArgs DefaultQueryBatchSize V2InMemory deprecatedOpts
531546 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
547+ ldbSnapInterval <- (getLast . (Last mTopLevelSnapInterval <> ) . Last <$> snapInterval o) .!= UseDefault
548+ ldbSnapNum <- (getLast . (Last mTopLevelSnapNum <> ) . Last <$> snapNum o) .!= UseDefault
549+ ldbSnapOffset <- (fmap Override <$> o .:? " SlotOffset" ) .!= UseDefault
550+ ldbSnapRateLimit<- (fmap (Override . secondsToDiffTime) <$> o .:? " RateLimit" ) .!= UseDefault
551+ ldbSnapMinDelay <- o .:? " MinDelay"
552+ ldbSnapMaxDelay <- o .:? " MaxDelay"
553+ ldbSnapDelayRange <-
554+ case (ldbSnapMinDelay, ldbSnapMaxDelay) of
555+ (Just minDelay, Just maxDelay) ->
556+ if minDelay <= maxDelay then
557+ pure (Override (SnapshotDelayRange (secondsToDiffTime minDelay) (secondsToDiffTime maxDelay)))
558+ else fail $ " Invalid ledger snapshot delay range, MinDelay > MaxDelay: "
559+ <> show minDelay <> " > " <> show maxDelay
560+ -- use the default delay range if either min or max is unspecified
561+ _ -> pure UseDefault
534562 qsize <- (fmap RequestedQueryBatchSize <$> o .:? " QueryBatchSize" ) .!= DefaultQueryBatchSize
535563 backend <- o .:? " Backend" .!= " V2InMemory"
536564 selector <- case backend of
@@ -545,7 +573,14 @@ instance FromJSON PartialNodeConfiguration where
545573 lsmPath :: Maybe FilePath <- o .:? " LSMDatabasePath"
546574 pure $ V2LSM lsmPath
547575 _ -> fail $ " Malformed LedgerDB Backend: " <> backend
548- pure $ Just $ LedgerDbConfiguration ldbSnapNum ldbSnapInterval qsize selector deprecatedOpts
576+ let sf = SnapshotFrequencyArgs {
577+ sfaInterval = unsafeNonZero . unSlotNo <$> ldbSnapInterval
578+ , sfaOffset = ldbSnapOffset
579+ , sfaRateLimit = ldbSnapRateLimit
580+ , sfaDelaySnapshotRange = ldbSnapDelayRange
581+ }
582+ spArgs = SnapshotPolicyArgs (SnapshotFrequency sf) ldbSnapNum
583+ pure $ Just $ LedgerDbConfiguration spArgs qsize selector deprecatedOpts
549584
550585 parseByronProtocol v = do
551586 primary <- v .:? " ByronGenesisFile"
@@ -712,8 +747,7 @@ defaultPartialNodeConfiguration =
712747 , pncLedgerDbConfig =
713748 Last $ Just $
714749 LedgerDbConfiguration
715- DefaultNumOfDiskSnapshots
716- DefaultSnapshotInterval
750+ defaultSnapshotPolicyArgs
717751 DefaultQueryBatchSize
718752 V2InMemory
719753 noDeprecatedOptions
0 commit comments