Skip to content

Commit 714e735

Browse files
committed
wip
1 parent 7b30930 commit 714e735

3 files changed

Lines changed: 72 additions & 4 deletions

File tree

cardano-node/src/Cardano/Node/Run.hs

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import Cardano.Node.Configuration.POM (NodeConfiguration (..),
4141
defaultPartialNodeConfiguration, makeNodeConfiguration,
4242
parseNodeConfigurationFP, getForkPolicy)
4343
import Cardano.Node.Configuration.Socket (LocalSocketOrSocketInfo,
44-
SocketOrSocketInfo, SocketOrSocketInfo' (..),
44+
SocketConfig (..), SocketOrSocketInfo, SocketOrSocketInfo' (..),
4545
gatherConfiguredSockets, getSocketOrSocketInfoAddr)
4646
import Cardano.Node.Configuration.TopologyP2P
4747
import qualified Cardano.Node.Configuration.TopologyP2P as TopologyP2P
@@ -137,6 +137,7 @@ import Control.Monad.Trans.Maybe (MaybeT(runMaybeT, MaybeT), hoistMayb
137137
import "contra-tracer" Control.Tracer
138138
import Data.Bits
139139
import Data.Either (partitionEithers)
140+
import Data.Functor.Identity (Identity (..))
140141
import Data.IP (toSockAddr)
141142
import Data.Map.Strict (Map)
142143
import qualified Data.Map.Strict as Map
@@ -473,6 +474,7 @@ handleSimpleNode blockType runP tracers nc onKernel = do
473474
(readTVar ledgerPeerSnapshotPathVar)
474475
(readTVar useLedgerVar)
475476
(const . pure $ ())
477+
rpcConfigVar <- newTVarIO (ncRpcConfig nc)
476478

477479
let nodeArgs = RunNodeArgs
478480
{ rnGenesisConfig = ncGenesisConfig nc
@@ -518,6 +520,7 @@ handleSimpleNode blockType runP tracers nc onKernel = do
518520
(readTVar ledgerPeerSnapshotPathVar)
519521
(readTVar useLedgerVar)
520522
(writeTVar ledgerPeerSnapshotVar)
523+
updateRpcConfiguration (startupTracer tracers) nc rpcConfigVar
521524
traceWith (startupTracer tracers) (BlockForgingUpdate NotEffective)
522525
)
523526
Nothing
@@ -557,14 +560,26 @@ handleSimpleNode blockType runP tracers nc onKernel = do
557560

558561
ProtocolInfo{pInfoConfig} = fst $ Api.protocolInfo @IO runP
559562
networkMagic :: Api.NetworkMagic = getNetworkMagic $ Consensus.configBlock pInfoConfig
560-
withAsync (runRpcServer (rpcTracer tracers) (pure (ncRpcConfig nc, networkMagic))) $ \_ ->
563+
let rpcServerLoop = do
564+
config <- readTVarIO rpcConfigVar
565+
let RpcConfig{isEnabled = Identity enabled} = config
566+
if enabled
567+
then
568+
race_
569+
(runRpcServer (rpcTracer tracers) (pure (config, networkMagic)))
570+
(atomically $ readTVar rpcConfigVar >>= \new -> check (new /= config))
571+
else
572+
atomically $ readTVar rpcConfigVar >>= \new -> check (new /= config)
573+
rpcServerLoop
574+
withAsync rpcServerLoop $ \_ ->
561575
Node.run
562576
nodeArgs {
563577
rnNodeKernelHook = \registry nodeKernel -> do
564578
-- reinstall `SIGHUP` handler
565579
installSigHUPHandler (startupTracer tracers) (Consensus.kesAgentTracer $ consensusTracers tracers) blockType nc nodeKernel
566580
localRootsVar publicRootsVar useLedgerVar useBootstrapVar
567581
ledgerPeerSnapshotPathVar ledgerPeerSnapshotVar
582+
rpcConfigVar
568583
rnNodeKernelHook nodeArgs registry nodeKernel
569584
}
570585
StdRunNodeArgs
@@ -665,12 +680,14 @@ installSigHUPHandler :: Tracer IO (StartupTrace blk)
665680
-> StrictTVar IO UseBootstrapPeers
666681
-> StrictTVar IO (Maybe PeerSnapshotFile)
667682
-> StrictTVar IO (Maybe LedgerPeerSnapshot)
683+
-> StrictTVar IO RpcConfig
668684
-> IO ()
669685
#ifndef UNIX
670-
installSigHUPHandler _ _ _ _ _ _ _ _ _ _ _ = return ()
686+
installSigHUPHandler _ _ _ _ _ _ _ _ _ _ _ _ = return ()
671687
#else
672688
installSigHUPHandler startupTracer kesAgentTracer blockType nc nodeKernel localRootsVar publicRootsVar useLedgerVar
673-
useBootstrapPeersVar ledgerPeerSnapshotPathVar ledgerPeerSnapshotVar =
689+
useBootstrapPeersVar ledgerPeerSnapshotPathVar ledgerPeerSnapshotVar
690+
rpcConfigVar =
674691
void $ Signals.installHandler
675692
Signals.sigHUP
676693
(Signals.Catch $ do
@@ -683,6 +700,7 @@ installSigHUPHandler startupTracer kesAgentTracer blockType nc nodeKernel localR
683700
(readTVar ledgerPeerSnapshotPathVar)
684701
(readTVar useLedgerVar)
685702
(writeTVar ledgerPeerSnapshotVar)
703+
updateRpcConfiguration startupTracer nc rpcConfigVar
686704
)
687705
Nothing
688706
#endif
@@ -820,6 +838,29 @@ updateLedgerPeerSnapshot startupTracer (NodeConfiguration {ncConsensusMode}) rea
820838

821839
mLedgerPeerSnapshot <$ atomically (writeVar mLedgerPeerSnapshot)
822840

841+
updateRpcConfiguration :: Tracer IO (StartupTrace blk)
842+
-> NodeConfiguration
843+
-> StrictTVar IO RpcConfig
844+
-> IO ()
845+
#ifndef UNIX
846+
updateRpcConfiguration _ _ _ = return ()
847+
#else
848+
updateRpcConfiguration tracer nc rpcConfigVar = do
849+
result <- try @IOException $ do
850+
configYamlPc <- parseNodeConfigurationFP (Just (ncConfigFile nc))
851+
pure $ makeRpcConfig (pncRpcConfig configYamlPc){nodeSocketPath = ncSocketPath (ncSocketConfig nc)}
852+
case result of
853+
Left e ->
854+
traceWith tracer (RpcConfigUpdateError (pack $ Exception.displayException e))
855+
Right (Left err) ->
856+
traceWith tracer (RpcConfigUpdateError (pack err))
857+
Right (Right newConfig) -> do
858+
oldConfig <- readTVarIO rpcConfigVar
859+
when (oldConfig /= newConfig) $ do
860+
atomically $ writeTVar rpcConfigVar newConfig
861+
traceWith tracer RpcConfigUpdate
862+
#endif
863+
823864
--------------------------------------------------------------------------------
824865
-- Helper functions
825866
--------------------------------------------------------------------------------

cardano-node/src/Cardano/Node/Startup.hs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,12 @@ data StartupTrace blk =
147147
| LedgerPeerSnapshotIgnored SlotNo SlotNo PeerSnapshotFile
148148
-- | Like above, but in `GenesisMode` it is an error to have an old snapshot.
149149
| LedgerPeerSnapshotError SlotNo SlotNo PeerSnapshotFile
150+
-- | Log that RPC configuration has been updated
151+
| RpcConfigUpdate
152+
153+
-- | Log RPC configuration update error
154+
| RpcConfigUpdateError Text
155+
150156
| MovedTopLevelOption String
151157

152158
data LedgerPeerSnapshotError = LedgerPeerSnapshotTooOld SlotNo SlotNo PeerSnapshotFile

cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,12 @@ instance ( Show (BlockNodeToNodeVersion blk)
304304
, "commit" .= String biCommit
305305
, "nodeStartTime" .= biNodeStartTime
306306
]
307+
forMachine _dtal RpcConfigUpdate =
308+
mconcat [ "kind" .= String "RpcConfigUpdate"
309+
, "message" .= String "RPC configuration update" ]
310+
forMachine _dtal (RpcConfigUpdateError err) =
311+
mconcat [ "kind" .= String "RpcConfigUpdateError"
312+
, "error" .= String err ]
307313
forMachine _dtal (MovedTopLevelOption opt) =
308314
mconcat [ "kind" .= String "MovedTopLevelOption"
309315
, "option" .= opt
@@ -373,6 +379,10 @@ instance MetaTrace (StartupTrace blk) where
373379
Namespace [] ["Byron"]
374380
namespaceFor BINetwork {} =
375381
Namespace [] ["Network"]
382+
namespaceFor RpcConfigUpdate {} =
383+
Namespace [] ["RpcConfigUpdate"]
384+
namespaceFor RpcConfigUpdateError {} =
385+
Namespace [] ["RpcConfigUpdateError"]
376386
namespaceFor MovedTopLevelOption {} =
377387
Namespace [] ["MovedTopLevelOption"]
378388

@@ -385,6 +395,8 @@ instance MetaTrace (StartupTrace blk) where
385395
severityFor (Namespace _ ["NonP2PWarning"]) _ = Just Warning
386396
severityFor (Namespace _ ["WarningDevelopmentNodeToNodeVersions"]) _ = Just Warning
387397
severityFor (Namespace _ ["WarningDevelopmentNodeToClientVersions"]) _ = Just Warning
398+
severityFor (Namespace _ ["RpcConfigUpdate"]) _ = Just Notice
399+
severityFor (Namespace _ ["RpcConfigUpdateError"]) _ = Just Error
388400
severityFor (Namespace _ ["BlockForgingUpdateError"]) _ = Just Error
389401
severityFor (Namespace _ ["BlockForgingBlockTypeMismatch"]) _ = Just Error
390402
severityFor (Namespace _ ["MovedTopLevelOption"]) _ = Just Warning
@@ -411,6 +423,10 @@ instance MetaTrace (StartupTrace blk) where
411423
""
412424
documentFor (Namespace [] ["BlockForgingBlockTypeMismatch"]) = Just
413425
""
426+
documentFor (Namespace [] ["RpcConfigUpdate"]) = Just
427+
""
428+
documentFor (Namespace [] ["RpcConfigUpdateError"]) = Just
429+
""
414430
documentFor (Namespace [] ["NetworkConfigUpdate"]) = Just
415431
""
416432
documentFor (Namespace [] ["NetworkConfigUpdateUnsupported"]) = Just
@@ -480,6 +496,8 @@ instance MetaTrace (StartupTrace blk) where
480496
, Namespace [] ["DBValidation"]
481497
, Namespace [] ["BlockForgingUpdate"]
482498
, Namespace [] ["BlockForgingBlockTypeMismatch"]
499+
, Namespace [] ["RpcConfigUpdate"]
500+
, Namespace [] ["RpcConfigUpdateError"]
483501
, Namespace [] ["NetworkConfigUpdate"]
484502
, Namespace [] ["NetworkConfigUpdateUnsupported"]
485503
, Namespace [] ["NetworkConfigUpdateError"]
@@ -619,6 +637,9 @@ ppStartupInfoTrace (LedgerPeerSnapshotError useLedgerAfterSlot snapshotSlotNo (P
619637
, showT snapshotFile
620638
]
621639

640+
ppStartupInfoTrace RpcConfigUpdate = "Performing RPC configuration update"
641+
ppStartupInfoTrace (RpcConfigUpdateError err) = err
642+
622643
ppStartupInfoTrace NonP2PWarning = nonP2PWarningMessage
623644

624645
ppStartupInfoTrace (WarningDevelopmentNodeToNodeVersions ntnVersions) =

0 commit comments

Comments
 (0)