Skip to content

Commit

Permalink
Updates due to the addition of handshake queries
Browse files Browse the repository at this point in the history
  • Loading branch information
jprider63 authored and disassembler committed May 31, 2023
1 parent 5bcf655 commit 8568809
Show file tree
Hide file tree
Showing 10 changed files with 62 additions and 34 deletions.
Expand Up @@ -109,6 +109,7 @@ benchmarkConnectTxSubmit ioManager handshakeTracer submissionTracer codecConfig
{ NtN.networkMagic = networkMagic
, NtN.diffusionMode = NtN.InitiatorOnlyDiffusionMode
, NtN.peerSharing = ownPeerSharing
, NtN.query = False
}) $
mkApp $
NtN.nodeToNodeProtocols NtN.defaultMiniProtocolParameters ( \them _ ->
Expand Down
24 changes: 8 additions & 16 deletions cardano-cli/src/Cardano/CLI/Ping.hs
Expand Up @@ -56,20 +56,18 @@ data PingCmd = PingCmd
, pingCmdMagic :: !Word32
, pingCmdJson :: !Bool
, pingCmdQuiet :: !Bool
, pingCmdQuery :: !Bool
} deriving (Eq, Show)

pingClient :: Tracer IO CNP.LogMsg -> Tracer IO String -> PingCmd -> [CNP.NodeVersion] -> AddrInfo -> IO ()
pingClient stdout stderr cmd = CNP.pingClient stdout stderr opts
where opts = CNP.PingOpts
{ CNP.pingOptsQuiet = pingCmdQuiet cmd
, CNP.pingOptsJson = pingCmdJson cmd
, CNP.pingOptsCount = pingCmdCount cmd
, CNP.pingOptsHost = maybeHostEndPoint (pingCmdEndPoint cmd)
, CNP.pingOptsUnixSock = maybeUnixSockEndPoint (pingCmdEndPoint cmd)
, CNP.pingOptsPort = pingCmdPort cmd
, CNP.pingOptsMagic = pingCmdMagic cmd
, CNP.pingOptsHandshakeQuery = pingCmdQuery cmd
{ CNP.pingOptsQuiet = pingCmdQuiet cmd
, CNP.pingOptsJson = pingCmdJson cmd
, CNP.pingOptsCount = pingCmdCount cmd
, CNP.pingOptsHost = maybeHostEndPoint (pingCmdEndPoint cmd)
, CNP.pingOptsUnixSock = maybeUnixSockEndPoint (pingCmdEndPoint cmd)
, CNP.pingOptsPort = pingCmdPort cmd
, CNP.pingOptsMagic = pingCmdMagic cmd
}

runPingCmd :: PingCmd -> ExceptT PingClientCmdError IO ()
Expand All @@ -91,7 +89,7 @@ runPingCmd options = do
return ([addr], CNP.supportedNodeToClientVersions $ pingCmdMagic options)

-- Logger async thread handle
laid <- liftIO . async $ CNP.logger msgQueue (pingCmdJson options) (pingCmdQuery options)
laid <- liftIO . async $ CNP.logger msgQueue $ pingCmdJson options
-- Ping client thread handles
caids <- forM addresses $ liftIO . async . pingClient (Tracer $ doLog msgQueue) (Tracer doErrLog) options versions
res <- L.zip addresses <$> mapM (liftIO . waitCatch) caids
Expand Down Expand Up @@ -198,9 +196,3 @@ pPing = PingCmd
, Opt.help "Quiet flag, CSV/JSON only output"
]
)
<*> ( Opt.switch $ mconcat
[ Opt.long "query"
, Opt.short 'q'
, Opt.help "Query flag."
]
)
8 changes: 8 additions & 0 deletions cardano-node/src/Cardano/Node/Tracing/Tracers/Diffusion.hs
Expand Up @@ -249,13 +249,16 @@ instance MetaTrace (AnyMessageAndAgency (HS.Handshake nt term)) where
Namespace [] ["ProposeVersions"]
namespaceFor (AnyMessageAndAgency _stok HS.MsgReplyVersions {}) =
Namespace [] ["ReplyVersions"]
namespaceFor (AnyMessageAndAgency _stok HS.MsgQueryReply {}) =
Namespace [] ["MsgQueryReply"]
namespaceFor (AnyMessageAndAgency _stok HS.MsgAcceptVersion {}) =
Namespace [] ["AcceptVersion"]
namespaceFor (AnyMessageAndAgency _stok HS.MsgRefuse {}) =
Namespace [] ["Refuse"]

severityFor (Namespace _ ["ProposeVersions"]) _ = Just Info
severityFor (Namespace _ ["ReplyVersions"]) _ = Just Info
severityFor (Namespace _ ["MsgQueryReply"]) _ = Just Info
severityFor (Namespace _ ["AcceptVersion"]) _ = Just Info
severityFor (Namespace _ ["Refuse"]) _ = Just Info
severityFor _ _ = Nothing
Expand All @@ -270,6 +273,10 @@ instance MetaTrace (AnyMessageAndAgency (HS.Handshake nt term)) where
, " received as a copy of 'MsgProposeVersions' in a simultaneous open"
, " scenario."
]
documentFor (Namespace _ ["MsgQueryReply"]) = Just $ mconcat
[ "`MsgQueryReply` received as a response to a handshake query in "
, " 'MsgProposeVersions' and lists the supported versions."
]
documentFor (Namespace _ ["AcceptVersion"]) = Just $ mconcat
[ "The remote end decides which version to use and sends chosen version."
, "The server is allowed to modify version parameters."
Expand All @@ -281,6 +288,7 @@ instance MetaTrace (AnyMessageAndAgency (HS.Handshake nt term)) where
allNamespaces = [
Namespace [] ["ProposeVersions"]
, Namespace [] ["ReplyVersions"]
, Namespace [] ["MsgQueryReply"]
, Namespace [] ["AcceptVersion"]
, Namespace [] ["Refuse"]
]
Expand Down
9 changes: 9 additions & 0 deletions cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs
Expand Up @@ -853,6 +853,14 @@ instance (Show versionNumber, ToJSON versionNumber, ToJSON agreedOptions)
, "versionNumber" .= toJSON versionNumber
, "agreedOptions" .= toJSON agreedOptions
]
forMachine _dtal (TrHandshakeQuery vMap) =
mconcat
[ "kind" .= String "HandshakeQuery"
, "versions" .= toJSON ((\(k,v) -> object [
"versionNumber" .= k
, "options" .= v
]) <$> Map.toList vMap)
]
forMachine _dtal (TrHandshakeClientError err) =
mconcat
[ "kind" .= String "HandshakeClientError"
Expand Down Expand Up @@ -905,6 +913,7 @@ instance MetaTrace (ConnectionManagerTrace addr
(Just (TrConnectionHandler _ ev')) = Just $
case ev' of
TrHandshakeSuccess {} -> Info
TrHandshakeQuery {} -> Info
TrHandshakeClientError {} -> Notice
TrHandshakeServerError {} -> Info
TrConnectionHandlerError _ _ ShutdownNode -> Critical
Expand Down
18 changes: 16 additions & 2 deletions cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs
Expand Up @@ -452,6 +452,7 @@ instance HasSeverityAnnotation (ConnectionManagerTrace addr (ConnectionHandlerTr
TrConnectionHandler _ ev' ->
case ev' of
TrHandshakeSuccess {} -> Info
TrHandshakeQuery {} -> Info
TrHandshakeClientError {} -> Notice
TrHandshakeServerError {} -> Info
TrConnectionHandlerError _ _ ShutdownNode -> Critical
Expand Down Expand Up @@ -1755,6 +1756,9 @@ instance Show vNumber => ToJSON (HandshakeProtocolError vNumber) where
, "versionNumber" .= show vNumber
, "reason" .= String (pack $ show t)
]
toJSON QueryNotSupported =
Aeson.object [ "kind" .= String "QueryNotSupported"
]

instance Show vNumber => ToJSON (HandshakeException vNumber) where
toJSON (HandshakeProtocolLimit plf) =
Expand Down Expand Up @@ -1803,15 +1807,17 @@ instance FromJSON NodeToClientVersion where
parseJSON x = fail ("FromJSON.NodeToClientVersion: error parsing NodeToClientVersion: " ++ show x)

instance ToJSON NodeToNodeVersionData where
toJSON (NodeToNodeVersionData (NetworkMagic m) dm ps) =
toJSON (NodeToNodeVersionData (NetworkMagic m) dm ps q) =
Aeson.object [ "networkMagic" .= toJSON m
, "diffusionMode" .= show dm
, "peerSharing" .= show ps
, "query" .= toJSON q
]

instance ToJSON NodeToClientVersionData where
toJSON (NodeToClientVersionData (NetworkMagic m)) =
toJSON (NodeToClientVersionData (NetworkMagic m) q) =
Aeson.object [ "networkMagic" .= toJSON m
, "query" .= toJSON q
]

instance (Show versionNumber, ToJSON versionNumber, ToJSON agreedOptions)
Expand All @@ -1822,6 +1828,14 @@ instance (Show versionNumber, ToJSON versionNumber, ToJSON agreedOptions)
, "versionNumber" .= toJSON versionNumber
, "agreedOptions" .= toJSON agreedOptions
]
toObject _verb (TrHandshakeQuery vMap) =
mconcat
[ "kind" .= String "HandshakeQuery"
, "versions" .= toJSON ((\(k,v) -> Aeson.object [
"versionNumber" .= k
, "options" .= v
]) <$> Map.toList vMap)
]
toObject _verb (TrHandshakeClientError err) =
mconcat
[ "kind" .= String "HandshakeClientError"
Expand Down
7 changes: 4 additions & 3 deletions cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs
Expand Up @@ -22,11 +22,12 @@ import Ouroboros.Network.Protocol.Handshake.Codec (cborTermVersionData
codecHandshake, noTimeLimitsHandshake)
import Ouroboros.Network.Protocol.Handshake.Type (Handshake)
import Ouroboros.Network.Protocol.Handshake.Version (acceptableVersion,
queryVersion, simpleSingletonVersions)
simpleSingletonVersions)
import Ouroboros.Network.Snocket (LocalAddress, LocalSocket, Snocket, makeLocalBearer,
localAddressFromPath, localSnocket)
import Ouroboros.Network.Socket (ConnectionId (..), connectToNode,
nullNetworkConnectTracers)
import Ouroboros.Network.Socket (ConnectionId (..), HandshakeCallbacks (..),
connectToNode, nullNetworkConnectTracers)
import qualified System.Metrics.Configuration as EKGF
import System.Metrics.Network.Acceptor (acceptEKGMetricsInit)

Expand Down Expand Up @@ -95,7 +96,7 @@ doConnectToForwarder snocket address netMagic timeLimits app =
timeLimits
(cborTermVersionDataCodec forwardingCodecCBORTerm)
nullNetworkConnectTracers
acceptableVersion
(HandshakeCallbacks acceptableVersion queryVersion)
(simpleSingletonVersions
ForwardingV_1
(ForwardingVersionData $ NetworkMagic netMagic)
Expand Down
8 changes: 4 additions & 4 deletions cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs
Expand Up @@ -24,12 +24,12 @@ import Ouroboros.Network.Protocol.Handshake.Codec (cborTermVersionData
codecHandshake, noTimeLimitsHandshake)
import Ouroboros.Network.Protocol.Handshake.Type (Handshake)
import Ouroboros.Network.Protocol.Handshake.Version (acceptableVersion,
simpleSingletonVersions)
queryVersion, simpleSingletonVersions)
import Ouroboros.Network.Snocket (LocalAddress, LocalSocket, Snocket,
makeLocalBearer, localAddressFromPath, localSnocket)
import Ouroboros.Network.Socket (AcceptedConnectionsLimit (..), ConnectionId (..),
SomeResponderApplication (..), cleanNetworkMutableState, newNetworkMutableState,
nullNetworkServerTracers, withServerNode)
HandshakeCallbacks (..), SomeResponderApplication (..), cleanNetworkMutableState,
newNetworkMutableState, nullNetworkServerTracers, withServerNode)
import qualified System.Metrics.Configuration as EKGF
import System.Metrics.Network.Acceptor (acceptEKGMetricsResp)

Expand Down Expand Up @@ -103,7 +103,7 @@ doListenToForwarder snocket address netMagic timeLimits app = do
(codecHandshake forwardingVersionCodec)
timeLimits
(cborTermVersionDataCodec forwardingCodecCBORTerm)
acceptableVersion
(HandshakeCallbacks acceptableVersion queryVersion)
(simpleSingletonVersions
ForwardingV_1
(ForwardingVersionData $ NetworkMagic netMagic)
Expand Down
8 changes: 4 additions & 4 deletions cardano-tracer/test/Cardano/Tracer/Test/Forwarder.hs
Expand Up @@ -40,10 +40,10 @@ import Ouroboros.Network.Protocol.Handshake.Codec (cborTermVersionData
codecHandshake, noTimeLimitsHandshake)
import Ouroboros.Network.Protocol.Handshake.Type (Handshake)
import Ouroboros.Network.Protocol.Handshake.Version (acceptableVersion,
simpleSingletonVersions)
queryVersion, simpleSingletonVersions)
import Ouroboros.Network.Snocket (MakeBearer, Snocket, makeLocalBearer,
localAddressFromPath, localSnocket)
import Ouroboros.Network.Socket (AcceptedConnectionsLimit (..),
import Ouroboros.Network.Socket (AcceptedConnectionsLimit (..), HandshakeCallbacks (..),
SomeResponderApplication (..), cleanNetworkMutableState, connectToNode,
newNetworkMutableState, nullNetworkConnectTracers, nullNetworkServerTracers,
withServerNode)
Expand Down Expand Up @@ -165,7 +165,7 @@ doConnectToAcceptor TestSetup{..} snocket muxBearer address timeLimits (ekgConfi
timeLimits
(cborTermVersionDataCodec forwardingCodecCBORTerm)
nullNetworkConnectTracers
acceptableVersion
(HandshakeCallbacks acceptableVersion queryVersion)
(simpleSingletonVersions
ForwardingV_1
(ForwardingVersionData $ unI tsNetworkMagic)
Expand Down Expand Up @@ -225,7 +225,7 @@ doListenToAcceptor TestSetup{..}
(codecHandshake forwardingVersionCodec)
timeLimits
(cborTermVersionDataCodec forwardingCodecCBORTerm)
acceptableVersion
(HandshakeCallbacks acceptableVersion queryVersion)
(simpleSingletonVersions
ForwardingV_1
(ForwardingVersionData $ unI tsNetworkMagic) -- Taken from mainnet shelley genesis file.
Expand Down
8 changes: 4 additions & 4 deletions trace-dispatcher/src/Cardano/Logging/Forwarding.hs
Expand Up @@ -30,10 +30,10 @@ import Ouroboros.Network.Protocol.Handshake.Codec (cborTermVersionData
codecHandshake, noTimeLimitsHandshake)
import Ouroboros.Network.Protocol.Handshake.Type (Handshake)
import Ouroboros.Network.Protocol.Handshake.Version (acceptableVersion,
simpleSingletonVersions)
queryVersion, simpleSingletonVersions)
import Ouroboros.Network.Snocket (Snocket, MakeBearer, localAddressFromPath, localSnocket,
makeLocalBearer)
import Ouroboros.Network.Socket (AcceptedConnectionsLimit (..),
import Ouroboros.Network.Socket (AcceptedConnectionsLimit (..), HandshakeCallbacks (..),
SomeResponderApplication (..), cleanNetworkMutableState, connectToNode,
newNetworkMutableState, nullNetworkConnectTracers, nullNetworkServerTracers,
withServerNode)
Expand Down Expand Up @@ -187,7 +187,7 @@ doConnectToAcceptor magic snocket makeBearer configureSocket address timeLimits
timeLimits
(cborTermVersionDataCodec forwardingCodecCBORTerm)
nullNetworkConnectTracers
acceptableVersion
(HandshakeCallbacks acceptableVersion queryVersion)
(simpleSingletonVersions
ForwardingV_1
(ForwardingVersionData magic)
Expand Down Expand Up @@ -248,7 +248,7 @@ doListenToAcceptor magic snocket makeBearer configureSocket address timeLimits
(codecHandshake forwardingVersionCodec)
timeLimits
(cborTermVersionDataCodec forwardingCodecCBORTerm)
acceptableVersion
(HandshakeCallbacks acceptableVersion queryVersion)
(simpleSingletonVersions
ForwardingV_1
(ForwardingVersionData magic)
Expand Down
5 changes: 4 additions & 1 deletion trace-dispatcher/src/Cardano/Logging/Version.hs
Expand Up @@ -16,7 +16,7 @@ import qualified Codec.CBOR.Term as CBOR

import Ouroboros.Network.CodecCBORTerm
import Ouroboros.Network.Magic
import Ouroboros.Network.Protocol.Handshake.Version (Accept (..), Acceptable (..))
import Ouroboros.Network.Protocol.Handshake.Version (Accept (..), Acceptable (..), Queryable (..))

data ForwardingVersion
= ForwardingV_1
Expand Down Expand Up @@ -49,6 +49,9 @@ instance Acceptable ForwardingVersionData where
++ show local
++ " /= " ++ show remote

instance Queryable ForwardingVersionData where
queryVersion _ = False

forwardingCodecCBORTerm :: ForwardingVersion -> CodecCBORTerm Text ForwardingVersionData
forwardingCodecCBORTerm _ = CodecCBORTerm { encodeTerm, decodeTerm }
where
Expand Down

0 comments on commit 8568809

Please sign in to comment.