@@ -84,6 +84,7 @@ import Ouroboros.Consensus.Util.Orphans ()
84
84
import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers (.. ))
85
85
import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable )
86
86
import Cardano.Network.Types (NumberOfBigLedgerPeers (.. ))
87
+ import Cardano.Network.ConsensusMode (ConsensusMode (.. ))
87
88
import qualified Ouroboros.Cardano.PeerSelection.PeerSelectionActions as Cardano
88
89
import Ouroboros.Cardano.PeerSelection.Churn (peerChurnGovernor )
89
90
import Ouroboros.Cardano.Network.Types (ChurnMode (.. ))
@@ -128,11 +129,12 @@ import Control.Concurrent (killThread, mkWeakThreadId, myThreadId, get
128
129
import Control.Concurrent.Class.MonadSTM.Strict
129
130
import Control.Exception (try , Exception , IOException )
130
131
import qualified Control.Exception as Exception
131
- import Control.Monad (forM , forM_ , unless , void , when )
132
+ import Control.Monad (forM , forM_ , unless , void , when , join )
132
133
import Control.Monad.Class.MonadThrow (MonadThrow (.. ))
133
134
import Control.Monad.IO.Class (MonadIO (.. ))
134
135
import Control.Monad.Trans.Except (ExceptT , runExceptT )
135
- import Control.Monad.Trans.Except.Extra (left )
136
+ import Control.Monad.Trans.Except.Extra (left , hushM )
137
+ import Control.Monad.Trans.Maybe (MaybeT (runMaybeT , MaybeT ), hoistMaybe )
136
138
import "contra-tracer" Control.Tracer
137
139
import Data.Bits
138
140
import Data.Either (partitionEithers )
@@ -486,13 +488,21 @@ handleSimpleNode blockType runP p2pMode tracers nc onKernel = do
486
488
publicRoots
487
489
ntUseLedgerPeers
488
490
ntPeerSnapshotPath
491
+ case ncPeerSharing nc of
492
+ PeerSharingEnabled
493
+ | hasProtocolFile (ncProtocolFiles nc) ->
494
+ traceWith (startupTracer tracers) . NetworkConfigUpdateWarning . Text. pack $
495
+ " Mainnet block producers may not meet the Praos performance guarantees "
496
+ <> " and host IP address will be leaked since peer sharing is enabled."
497
+ _otherwise -> pure ()
489
498
localRootsVar <- newTVarIO localRoots
490
499
publicRootsVar <- newTVarIO publicRoots
491
500
useLedgerVar <- newTVarIO ntUseLedgerPeers
492
501
useBootstrapVar <- newTVarIO ntUseBootstrapPeers
493
502
ledgerPeerSnapshotPathVar <- newTVarIO ntPeerSnapshotPath
494
503
ledgerPeerSnapshotVar <- newTVarIO =<< updateLedgerPeerSnapshot
495
504
(startupTracer tracers)
505
+ nc
496
506
(readTVar ledgerPeerSnapshotPathVar)
497
507
(readTVar useLedgerVar)
498
508
(const . pure $ () )
@@ -534,6 +544,7 @@ handleSimpleNode blockType runP p2pMode tracers nc onKernel = do
534
544
ledgerPeerSnapshotPathVar
535
545
void $ updateLedgerPeerSnapshot
536
546
(startupTracer tracers)
547
+ nc
537
548
(readTVar ledgerPeerSnapshotPathVar)
538
549
(readTVar useLedgerVar)
539
550
(writeTVar ledgerPeerSnapshotVar)
@@ -763,6 +774,7 @@ installP2PSigHUPHandler startupTracer blockType nc nodeKernel localRootsVar publ
763
774
useLedgerVar useBootstrapPeersVar ledgerPeerSnapshotPathVar
764
775
void $ updateLedgerPeerSnapshot
765
776
startupTracer
777
+ nc
766
778
(readTVar ledgerPeerSnapshotPathVar)
767
779
(readTVar useLedgerVar)
768
780
(writeTVar ledgerPeerSnapshotVar)
@@ -854,7 +866,7 @@ updateTopologyConfiguration :: Tracer IO (StartupTrace blk)
854
866
updateTopologyConfiguration startupTracer nc localRootsVar publicRootsVar useLedgerVar
855
867
useBootsrapPeersVar ledgerPeerSnapshotPathVar = do
856
868
traceWith startupTracer NetworkConfigUpdate
857
- result <- try $ readTopologyFileOrError nc startupTracer
869
+ result <- try $ TopologyP2P. readTopologyFileOrError nc startupTracer
858
870
case result of
859
871
Left (FatalError err) ->
860
872
traceWith startupTracer
@@ -876,31 +888,46 @@ updateTopologyConfiguration startupTracer nc localRootsVar publicRootsVar useLed
876
888
#endif
877
889
878
890
updateLedgerPeerSnapshot :: Tracer IO (StartupTrace blk )
891
+ -> NodeConfiguration
879
892
-> STM IO (Maybe PeerSnapshotFile )
880
893
-> STM IO UseLedgerPeers
881
894
-> (Maybe LedgerPeerSnapshot -> STM IO () )
882
895
-> IO (Maybe LedgerPeerSnapshot )
883
- updateLedgerPeerSnapshot startupTracer readLedgerPeerPath readUseLedgerVar writeVar = do
884
- mPeerSnapshotFile <- atomically readLedgerPeerPath
885
- mLedgerPeerSnapshot <- forM mPeerSnapshotFile $ \ f -> do
886
- lps@ (LedgerPeerSnapshot (wOrigin, _)) <- readPeerSnapshotFile f
887
- useLedgerPeers <- atomically readUseLedgerVar
896
+ updateLedgerPeerSnapshot startupTracer (NodeConfiguration {ncConsensusMode}) readLedgerPeerPath readUseLedgerVar writeVar = do
897
+ (mPeerSnapshotFile, useLedgerPeers)
898
+ <- atomically $ (,) <$> readLedgerPeerPath <*> readUseLedgerVar
899
+
900
+ let trace = traceWith startupTracer
901
+ traceL = liftIO . trace
902
+ nothing' = MaybeT $ pure Nothing
903
+
904
+ mLedgerPeerSnapshot <- runMaybeT $ do
888
905
case useLedgerPeers of
889
- DontUseLedgerPeers ->
890
- traceWith startupTracer (LedgerPeerSnapshotLoaded . Left $ (useLedgerPeers, wOrigin))
891
- UseLedgerPeers afterSlot
892
- | Always <- afterSlot ->
893
- traceWith startupTracer (LedgerPeerSnapshotLoaded . Right $ wOrigin)
894
- | After slotNo <- afterSlot ->
895
- case wOrigin of
896
- Origin -> error " Unsupported big ledger peer snapshot file: taken at Origin"
897
- At slotNo' | slotNo' >= slotNo ->
898
- traceWith startupTracer (LedgerPeerSnapshotLoaded . Right $ wOrigin)
899
- _otherwise ->
900
- traceWith startupTracer (LedgerPeerSnapshotLoaded . Left $ (useLedgerPeers, wOrigin))
901
- return lps
902
- atomically . writeVar $ mLedgerPeerSnapshot
903
- pure mLedgerPeerSnapshot
906
+ DontUseLedgerPeers -> nothing'
907
+ UseLedgerPeers afterSlot -> do
908
+ eSnapshot
909
+ <- liftIO . readPeerSnapshotFile =<< hoistMaybe mPeerSnapshotFile
910
+ lps@ (LedgerPeerSnapshot (wOrigin, _)) <-
911
+ case ncConsensusMode of
912
+ GenesisMode ->
913
+ MaybeT $ hushM eSnapshot (trace . NetworkConfigUpdateError )
914
+ PraosMode ->
915
+ MaybeT $ hushM eSnapshot (trace . NetworkConfigUpdateWarning )
916
+ case afterSlot of
917
+ Always -> do
918
+ traceL $ LedgerPeerSnapshotLoaded . Right $ wOrigin
919
+ return lps
920
+ After ledgerSlotNo
921
+ | fileSlot >= ledgerSlotNo -> do
922
+ traceL $ LedgerPeerSnapshotLoaded . Right $ wOrigin
923
+ pure lps
924
+ | otherwise -> do
925
+ traceL $ LedgerPeerSnapshotLoaded . Left $ (useLedgerPeers, wOrigin)
926
+ nothing'
927
+ where
928
+ fileSlot = case wOrigin of ; Origin -> 0 ; At slot -> slot
929
+
930
+ mLedgerPeerSnapshot <$ atomically (writeVar mLedgerPeerSnapshot)
904
931
905
932
--------------------------------------------------------------------------------
906
933
-- Helper functions
0 commit comments