Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cardano-node/src/Cardano/Node/Protocol/Checkpoints.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ module Cardano.Node.Protocol.Checkpoints
import Cardano.Api

import qualified Cardano.Crypto.Hash.Class as Crypto
import Cardano.Protocol.Crypto (StandardCrypto)
import Cardano.Node.Types
import Cardano.Protocol.Crypto ()
import Ouroboros.Consensus.Block
import Ouroboros.Consensus.Cardano
import Ouroboros.Consensus.Cardano ()
import Ouroboros.Consensus.Config (CheckpointsMap (..), emptyCheckpointsMap)

import Control.Exception (IOException)
Expand Down
2 changes: 1 addition & 1 deletion cardano-node/src/Cardano/Node/Protocol/Shelley.hs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ import Cardano.Node.Tracing.Era.Shelley ()
import Cardano.Node.Tracing.Formatting ()
import Cardano.Node.Tracing.Tracers.ChainDB ()
import Cardano.Node.Types
import Cardano.Protocol.Crypto (StandardCrypto)
import Cardano.Protocol.Crypto ()
import qualified Ouroboros.Consensus.Cardano as Consensus
import Ouroboros.Consensus.HardFork.Combinator.AcrossEras ()
import Ouroboros.Consensus.Protocol.Praos.Common (PraosCanBeLeader (..),
Expand Down
11 changes: 8 additions & 3 deletions cardano-node/src/Cardano/Node/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ import Cardano.Node.Protocol.Types
import Cardano.Node.Queries
import Cardano.Rpc.Server
import Cardano.Rpc.Server.Config
import Data.IORef
import Cardano.Node.Startup
import Cardano.Node.TraceConstraints (TraceConstraints)
import Cardano.Node.Tracing (Tracers (..))
Expand Down Expand Up @@ -449,6 +450,7 @@ handleSimpleNode blockType runP tracers nc cmdPc networkMagic onKernel = do
#endif
nForkPolicy <- getForkPolicy $ ncResponderCoreAffinityPolicy nc
cForkPolicy <- getForkPolicy $ ncResponderCoreAffinityPolicy nc
nodeKernelAccessRef <- newIORef Nothing
void $
let diffusionNodeArguments :: Cardano.Diffusion.CardanoNodeArguments IO
diffusionNodeArguments = Cardano.Diffusion.CardanoNodeArguments {
Expand Down Expand Up @@ -481,7 +483,7 @@ handleSimpleNode blockType runP tracers nc cmdPc networkMagic onKernel = do
(readTVar ledgerPeerSnapshotVar)
nc
in
withAsync (rpcServerLoop (startupTracer tracers) (rpcTracer tracers) rpcConfigVar networkMagic) $ \_ ->
withAsync (rpcServerLoop (startupTracer tracers) (rpcTracer tracers) rpcConfigVar networkMagic nodeKernelAccessRef) $ \_ ->
Node.run
nodeArgs {
rnNodeKernelHook = \registry nodeKernel -> do
Expand All @@ -491,6 +493,8 @@ handleSimpleNode blockType runP tracers nc cmdPc networkMagic onKernel = do
useBootstrapVar ledgerPeerSnapshotPathVar ledgerPeerSnapshotVar
rpcConfigVar
rnNodeKernelHook nodeArgs registry nodeKernel
mkNodeKernelAccess (contramap RpcUnsupportedBlockType (startupTracer tracers)) blockType nodeKernel
>>= writeIORef nodeKernelAccessRef
}
StdRunNodeArgs
{ srnBfcMaxConcurrencyBulkSync = unMaxConcurrencyBulkSync <$> ncMaxConcurrencyBulkSync nc
Expand Down Expand Up @@ -767,16 +771,17 @@ rpcServerLoop :: Tracer IO (StartupTrace blk)
-> Tracer IO TraceRpc
-> StrictTVar IO RpcConfig
-> NetworkMagic
-> IORef (Maybe NodeKernelAccess)
-> IO ()
rpcServerLoop startupTracer rpcTracer rpcConfigVar networkMagic = go
rpcServerLoop startupTracer rpcTracer rpcConfigVar networkMagic nodeKernelAccessRef = go
where
go = do
config@RpcConfig{isEnabled = Identity enabled} <- readTVarIO rpcConfigVar
if enabled
then
race_
(do
runRpcServer rpcTracer (config, networkMagic)
runRpcServer rpcTracer config networkMagic nodeKernelAccessRef
traceWith startupTracer RpcForceDisabled
disableRpcServer)
(waitForRpcConfigChange config)
Expand Down
2 changes: 2 additions & 0 deletions cardano-node/src/Cardano/Node/Startup.hs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@ data StartupTrace blk =
| RpcConfigUpdate Text
-- | Log RPC configuration update error
| RpcConfigUpdateError Text
-- | Log that node kernel access is not supported for the running block type.
| RpcUnsupportedBlockType Text
-- | Log RPC is forcefully disabled after a RPC server crash.
| RpcForceDisabled

Expand Down
31 changes: 30 additions & 1 deletion cardano-node/src/Cardano/Node/Tracing/Tracers/Rpc.hs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import Cardano.Api.Pretty

import Cardano.Logging hiding (nsInner)
import Cardano.Rpc.Server (TraceRpc (..), TraceRpcQuery (..), TraceRpcSubmit (..),
TraceSpanEvent (..))
TraceRpcSync (..), TraceSpanEvent (..))

import Data.Aeson (Object, Value (..), (.=))

Expand Down Expand Up @@ -48,6 +48,13 @@ instance LogFormatting TraceRpc where
TraceRpcSubmitSpan s -> [spanToObject s]
TraceRpcEvalTxDecodingError _ -> []
TraceRpcEvalTxSpan s -> [spanToObject s]
TraceRpcSync syncTrace ->
["kind" .= String "SyncService"]
<> case syncTrace of
TraceRpcFetchBlockSpan s -> [spanToObject s]
TraceRpcFetchBlockNotFound _ -> []
TraceRpcNodeKernelAccessUnavailable -> []
TraceRpcForkerError _ -> []

forHuman = docToText . pretty

Expand All @@ -59,6 +66,7 @@ instance LogFormatting TraceRpc where
TraceRpcQuery (TraceRpcQuerySearchUtxosSpan (SpanBegin _)) -> [CounterM "rpc.request.QueryService.SearchUtxos" Nothing]
TraceRpcSubmit (TraceRpcSubmitSpan (SpanBegin _)) -> [CounterM "rpc.request.SubmitService.SubmitTx" Nothing]
TraceRpcSubmit (TraceRpcEvalTxSpan (SpanBegin _)) -> [CounterM "rpc.request.SubmitService.EvalTx" Nothing]
TraceRpcSync (TraceRpcFetchBlockSpan (SpanBegin _)) -> [CounterM "rpc.request.SyncService.FetchBlock" Nothing]
_ -> []

instance MetaTrace TraceRpc where
Expand All @@ -81,6 +89,13 @@ instance MetaTrace TraceRpc where
TraceRpcSubmitSpan _ -> ["SubmitTx", "Span"]
TraceRpcEvalTxDecodingError _ -> ["EvalTxDecodingError"]
TraceRpcEvalTxSpan _ -> ["EvalTx", "Span"]
TraceRpcSync syncTrace ->
"SyncService"
: case syncTrace of
TraceRpcFetchBlockSpan _ -> ["FetchBlock", "Span"]
TraceRpcFetchBlockNotFound _ -> ["FetchBlockNotFound"]
TraceRpcNodeKernelAccessUnavailable -> ["NodeKernelAccessUnavailable"]
TraceRpcForkerError _ -> ["ForkerError"]

severityFor (Namespace _ nsInner) _ = case nsInner of
["FatalError"] -> Just Error -- RPC server startup errors
Expand All @@ -94,6 +109,10 @@ instance MetaTrace TraceRpc where
["SubmitService", "TxDecodingError"] -> Just Debug -- request error
["SubmitService", "TxValidationError"] -> Just Debug -- request error
["SubmitService", "EvalTxDecodingError"] -> Just Debug -- request error
["SyncService", "FetchBlock", "Span"] -> Just Debug
["SyncService", "FetchBlockNotFound"] -> Just Debug -- normal: block may have been pruned
["SyncService", "NodeKernelAccessUnavailable"] -> Just Warning -- kernel not yet ready
["SyncService", "ForkerError"] -> Just Warning -- unexpected ledger forker error
_ -> Nothing

documentFor (Namespace _ nsInner) = case nsInner of
Expand All @@ -110,6 +129,10 @@ instance MetaTrace TraceRpc where
["SubmitService", "TxDecodingError"] -> Just "A regular request error, when submitted transaction decoding fails."
["SubmitService", "TxValidationError"] -> Just "A regular request error, when submitted transaction is invalid."
["SubmitService", "EvalTxDecodingError"] -> Just "A regular request error, when evalTx transaction decoding fails."
["SyncService", "FetchBlock", "Span"] -> Just "Span for the FetchBlock SyncService method."
["SyncService", "FetchBlockNotFound"] -> Just "Requested block was not found in ChainDB."
["SyncService", "NodeKernelAccessUnavailable"] -> Just "Node kernel access not yet initialised. The node is still starting up."
["SyncService", "ForkerError"] -> Just "Unexpected error from ledger forker."
_ -> Nothing

metricsDocFor (Namespace _ nsInner) = case nsInner of
Expand All @@ -123,6 +146,8 @@ instance MetaTrace TraceRpc where
[("rpc.request.SubmitService.SubmitTx", "Span for the SubmitTx UTXORPC method.")]
["SubmitService", "EvalTx", "Span"] ->
[("rpc.request.SubmitService.EvalTx", "Span for the EvalTx UTXORPC method.")]
["SyncService", "FetchBlock", "Span"] ->
[("rpc.request.SyncService.FetchBlock", "Span for the FetchBlock SyncService method.")]
_ -> []

allNamespaces =
Expand All @@ -138,6 +163,10 @@ instance MetaTrace TraceRpc where
, ["SubmitService", "TxDecodingError"]
, ["SubmitService", "TxValidationError"]
, ["SubmitService", "EvalTxDecodingError"]
, ["SyncService", "FetchBlock", "Span"]
, ["SyncService", "FetchBlockNotFound"]
, ["SyncService", "NodeKernelAccessUnavailable"]
, ["SyncService", "ForkerError"]
]

-- helper functions
Expand Down
12 changes: 11 additions & 1 deletion cardano-node/src/Cardano/Node/Tracing/Tracers/Startup.hs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ module Cardano.Node.Tracing.Tracers.Startup

import Cardano.Api (NetworkMagic (..), SlotNo (..))
import qualified Cardano.Api as Api
import Cardano.Network.OrphanInstances ()

import qualified Cardano.Chain.Genesis as Gen
import Cardano.Git.Rev (gitRev)
import Cardano.Ledger.Shelley.API as SL
import Cardano.Logging
import Cardano.Network.NodeToClient (LocalAddress (..))
import Cardano.Network.NodeToNode (DiffusionMode (..))
import Cardano.Network.OrphanInstances ()
import Cardano.Node.Configuration.POM (NodeConfiguration, ncProtocol)
import Cardano.Node.Configuration.Socket
import Cardano.Node.Protocol (SomeConsensusProtocol (..))
Expand Down Expand Up @@ -288,6 +288,9 @@ instance ( Show (BlockNodeToNodeVersion blk)
forMachine _dtal (RpcConfigUpdateError err) =
mconcat [ "kind" .= String "RpcConfigUpdateError"
, "error" .= String ("Error while updating RPC configuration: " <> err) ]
forMachine _dtal (RpcUnsupportedBlockType blockType) =
mconcat [ "kind" .= String "RpcUnsupportedBlockType"
, "blockType" .= String blockType ]
forMachine _dtal RpcForceDisabled =
mconcat [ "kind" .= String "RpcForceDisabled"
, "error" .= String (ppStartupInfoTrace RpcForceDisabled)]
Expand Down Expand Up @@ -360,6 +363,8 @@ instance MetaTrace (StartupTrace blk) where
Namespace [] ["RpcConfigUpdate"]
namespaceFor RpcConfigUpdateError {} =
Namespace [] ["RpcConfigUpdateError"]
namespaceFor RpcUnsupportedBlockType {} =
Namespace [] ["RpcUnsupportedBlockType"]
namespaceFor RpcForceDisabled =
Namespace [] ["RpcForceDisabled"]
namespaceFor MovedTopLevelOption {} =
Expand All @@ -376,6 +381,7 @@ instance MetaTrace (StartupTrace blk) where
severityFor (Namespace _ ["WarningDevelopmentNodeToClientVersions"]) _ = Just Warning
severityFor (Namespace _ ["RpcConfigUpdate"]) _ = Just Notice
severityFor (Namespace _ ["RpcConfigUpdateError"]) _ = Just Error
severityFor (Namespace _ ["RpcUnsupportedBlockType"]) _ = Just Warning
severityFor (Namespace _ ["RpcForceDisabled"]) _ = Just Error
severityFor (Namespace _ ["BlockForgingUpdateError"]) _ = Just Error
severityFor (Namespace _ ["BlockForgingBlockTypeMismatch"]) _ = Just Error
Expand Down Expand Up @@ -407,6 +413,8 @@ instance MetaTrace (StartupTrace blk) where
""
documentFor (Namespace [] ["RpcConfigUpdateError"]) = Just
""
documentFor (Namespace [] ["RpcUnsupportedBlockType"]) = Just
""
documentFor (Namespace [] ["RpcForceDisabled"]) = Just
""
documentFor (Namespace [] ["NetworkConfigUpdate"]) = Just
Expand Down Expand Up @@ -480,6 +488,7 @@ instance MetaTrace (StartupTrace blk) where
, Namespace [] ["BlockForgingBlockTypeMismatch"]
, Namespace [] ["RpcConfigUpdate"]
, Namespace [] ["RpcConfigUpdateError"]
, Namespace [] ["RpcUnsupportedBlockType"]
, Namespace [] ["RpcForceDisabled"]
, Namespace [] ["NetworkConfigUpdate"]
, Namespace [] ["NetworkConfigUpdateUnsupported"]
Expand Down Expand Up @@ -605,6 +614,7 @@ ppStartupInfoTrace (LedgerPeerSnapshotLoaded slotNo) =

ppStartupInfoTrace (RpcConfigUpdate config) = "Performing RPC configuration update: " <> config
ppStartupInfoTrace (RpcConfigUpdateError err) = "Error while updating RPC configuration: " <> err
ppStartupInfoTrace (RpcUnsupportedBlockType blockType) = "RPC node kernel access is not supported for block type: " <> blockType
ppStartupInfoTrace RpcForceDisabled = "RPC endpoint has crashed and because of that it got disabled. Enable gRPC endpoint and send SIGHUP to the node to reenable."

ppStartupInfoTrace NonP2PWarning = nonP2PWarningMessage
Expand Down
1 change: 1 addition & 0 deletions cardano-testnet/cardano-testnet.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ test-suite cardano-testnet-test
Cardano.Testnet.Test.Gov.TreasuryGrowth
Cardano.Testnet.Test.Gov.TreasuryWithdrawal
Cardano.Testnet.Test.Rpc.Eval
Cardano.Testnet.Test.Rpc.FetchBlock
Cardano.Testnet.Test.Rpc.Query
Cardano.Testnet.Test.Rpc.SearchUtxos
Cardano.Testnet.Test.Rpc.Transaction
Expand Down
10 changes: 5 additions & 5 deletions cardano-testnet/src/Testnet/Runtime.hs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import qualified Cardano.Api as Api
import qualified Cardano.Ledger.Api as L
import qualified Cardano.Ledger.Shelley.LedgerState as L
import qualified Cardano.Ledger.Shelley.State as L
import Cardano.Node.Testnet.Paths (defaultSocketName)

import Prelude

Expand All @@ -53,11 +54,10 @@ import qualified System.Process as IO
import System.Process (waitForProcess)

import Testnet.Filepath
import Cardano.Node.Testnet.Paths (defaultSocketName)
import qualified Testnet.Ping as Ping
import Testnet.Process.Run (ProcessError (..), initiateProcess)
import Testnet.Process.RunIO (execCli_, execKesAgentControl_, liftIOAnnotated,
procCustom, procKesAgent, procNode)
import Testnet.Process.RunIO (execCli_, execKesAgentControl_, liftIOAnnotated, procCustom,
procKesAgent, procNode)
import Testnet.Types (TestnetKesAgent (..), TestnetNode (..),
TestnetRuntime (configurationFile), showIpv4Address, testnetSprockets)

Expand Down Expand Up @@ -506,9 +506,9 @@ startLedgerNewEpochStateLogging testnetRuntime tmpWorkspace = withFrozenCallStac
-> SlotNo
-> BlockNo
-> StateT (Maybe AnyNewEpochState) IO ConditionResult
handler outputFp diffFp anes@(AnyNewEpochState !sbe !nes _) _ (BlockNo blockNo) = handleException $ do
handler outputFp diffFp anes@(AnyNewEpochState !sbe !nes _) _ (BlockNo currentBlockNo) = handleException $ do
let prettyNes = shelleyBasedEraConstraints sbe (encodePretty nes)
blockLabel = "#### BLOCK " <> show blockNo <> " ####"
blockLabel = "#### BLOCK " <> show currentBlockNo <> " ####"
liftIOAnnotated . BSC.appendFile outputFp $ BSC.unlines [BSC.pack blockLabel, prettyNes, ""]

-- store epoch state for logging of differences
Expand Down
18 changes: 9 additions & 9 deletions cardano-testnet/src/Testnet/Start/Cardano.hs
Original file line number Diff line number Diff line change
Expand Up @@ -42,42 +42,42 @@ import qualified Cardano.Api.Byron as Byron
import Cardano.Network.Diffusion.Topology (CardanoNetworkTopology)
import Cardano.Node.Configuration.NodeAddress (PortNumber)
import Cardano.Node.Configuration.TopologyP2P ()
import Cardano.Node.Testnet.Paths (defaultConfigFile, defaultNodeEnvFile, defaultPortFile,
defaultUtxoAddrPath)
import Cardano.Prelude (NonEmpty ((:|)), canonicalEncodePretty, readMaybe)
import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPoint (..))

import Prelude hiding (lines)

import Control.Concurrent (threadDelay)
import Control.Monad (forM, forM_, guard, unless, when)
import Control.Monad.Trans.Maybe (runMaybeT)
import Control.Exception (IOException)
import Control.Monad (forM, forM_, guard, unless, when)
import Control.Monad.Catch
import Control.Monad.Trans.Maybe (runMaybeT)
import Control.Monad.Trans.Resource (MonadResource, getInternalState)
import Data.Aeson
import qualified Data.Aeson.Encode.Pretty as A
import qualified Data.Yaml as Yaml
import qualified Data.ByteString.Lazy as LBS
import Data.Default.Class ()
import Data.Either
import Data.Maybe (mapMaybe)
import Data.Functor
import Data.List (sort, stripPrefix, uncons)
import qualified Data.List.NonEmpty as NEL
import qualified Data.Map as Map
import Data.Maybe (mapMaybe)
import Data.MonoTraversable (Element, MonoFunctor, omap)
import qualified Data.Text as Text
import Data.Time (diffUTCTime)
import Data.Time.Clock (NominalDiffTime)
import qualified Data.Time.Clock as DTC
import qualified Data.Yaml as Yaml
import GHC.Stack
import qualified System.Directory as IO
import qualified System.Process as Process
import System.FilePath ((</>))
import qualified System.Process as Process

import Testnet.Components.Configuration
import qualified Testnet.Defaults as Defaults
import Cardano.Node.Testnet.Paths (defaultConfigFile, defaultNodeEnvFile,
defaultPortFile, defaultUtxoAddrPath)
import Testnet.Filepath
import Testnet.Handlers (interruptNodesOnSigINT)
import Testnet.Orphans ()
Expand Down Expand Up @@ -440,9 +440,9 @@ cardanoTestnet
QuickValidation
(EpochNo maxBound)
minBound
$ \_ slotNo blockNo -> do
$ \_ slotNo currentBlockNo -> do
put slotNo
pure $ if blockNo >= 1
pure $ if currentBlockNo >= 1
then ConditionMet -- we got one block
else ConditionNotMet

Expand Down
Loading
Loading