From 34cfbf1794577756e2c19114297d381dc447ab3c Mon Sep 17 00:00:00 2001 From: James Parker Date: Wed, 17 May 2023 08:18:36 -0700 Subject: [PATCH] Updates due to the addition of handshake queries --- .../Benchmarking/GeneratorTx/NodeToNode.hs | 1 + cardano-cli/src/Cardano/CLI/Ping.hs | 36 ++++++++----------- .../Cardano/Node/Tracing/Tracers/Diffusion.hs | 8 +++++ .../src/Cardano/Node/Tracing/Tracers/P2P.hs | 9 +++++ .../Tracing/OrphanInstances/Network.hs | 18 ++++++++-- .../src/Cardano/Tracer/Acceptors/Client.hs | 7 ++-- .../src/Cardano/Tracer/Acceptors/Server.hs | 8 ++--- .../test/Cardano/Tracer/Test/Forwarder.hs | 8 ++--- .../src/Cardano/Logging/Forwarding.hs | 8 ++--- .../src/Cardano/Logging/Version.hs | 5 ++- 10 files changed, 68 insertions(+), 40 deletions(-) diff --git a/bench/tx-generator/src/Cardano/Benchmarking/GeneratorTx/NodeToNode.hs b/bench/tx-generator/src/Cardano/Benchmarking/GeneratorTx/NodeToNode.hs index 4b21b43107f..becccc87609 100644 --- a/bench/tx-generator/src/Cardano/Benchmarking/GeneratorTx/NodeToNode.hs +++ b/bench/tx-generator/src/Cardano/Benchmarking/GeneratorTx/NodeToNode.hs @@ -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 _ -> diff --git a/cardano-cli/src/Cardano/CLI/Ping.hs b/cardano-cli/src/Cardano/CLI/Ping.hs index 9481bad6ab1..fccd7ac0e48 100644 --- a/cardano-cli/src/Cardano/CLI/Ping.hs +++ b/cardano-cli/src/Cardano/CLI/Ping.hs @@ -50,26 +50,24 @@ maybeUnixSockEndPoint = \case UnixSockEndPoint sock -> Just sock data PingCmd = PingCmd - { pingCmdCount :: !Word32 - , pingCmdEndPoint :: !EndPoint - , pingCmdPort :: !String - , pingCmdMagic :: !Word32 - , pingCmdJson :: !Bool - , pingCmdQuiet :: !Bool - , pingCmdQuery :: !Bool + { pingCmdCount :: !Word32 + , pingCmdEndPoint :: !EndPoint + , pingCmdPort :: !String + , pingCmdMagic :: !Word32 + , pingCmdJson :: !Bool + , pingCmdQuiet :: !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 () @@ -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 @@ -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." - ] - ) diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/Diffusion.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/Diffusion.hs index a591b70bc97..1a4c7623e43 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/Diffusion.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/Diffusion.hs @@ -249,6 +249,8 @@ 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 {}) = @@ -256,6 +258,7 @@ instance MetaTrace (AnyMessageAndAgency (HS.Handshake nt term)) where 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 @@ -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." @@ -281,6 +288,7 @@ instance MetaTrace (AnyMessageAndAgency (HS.Handshake nt term)) where allNamespaces = [ Namespace [] ["ProposeVersions"] , Namespace [] ["ReplyVersions"] + , Namespace [] ["MsgQueryReply"] , Namespace [] ["AcceptVersion"] , Namespace [] ["Refuse"] ] diff --git a/cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs b/cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs index d11b29cd1ea..42863c8808e 100644 --- a/cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs +++ b/cardano-node/src/Cardano/Node/Tracing/Tracers/P2P.hs @@ -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" @@ -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 diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs index c4691aa6c9b..d13ef5b198b 100644 --- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs +++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Network.hs @@ -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 @@ -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) = @@ -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) @@ -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" diff --git a/cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs b/cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs index 9badcf35824..236dcdfbe10 100644 --- a/cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs +++ b/cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs @@ -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) @@ -95,7 +96,7 @@ doConnectToForwarder snocket address netMagic timeLimits app = timeLimits (cborTermVersionDataCodec forwardingCodecCBORTerm) nullNetworkConnectTracers - acceptableVersion + (HandshakeCallbacks acceptableVersion queryVersion) (simpleSingletonVersions ForwardingV_1 (ForwardingVersionData $ NetworkMagic netMagic) diff --git a/cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs b/cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs index 21bb57efce4..f18705335bd 100644 --- a/cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs +++ b/cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs @@ -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) @@ -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) diff --git a/cardano-tracer/test/Cardano/Tracer/Test/Forwarder.hs b/cardano-tracer/test/Cardano/Tracer/Test/Forwarder.hs index 7718adf8117..2671a1b5675 100644 --- a/cardano-tracer/test/Cardano/Tracer/Test/Forwarder.hs +++ b/cardano-tracer/test/Cardano/Tracer/Test/Forwarder.hs @@ -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) @@ -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) @@ -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. diff --git a/trace-dispatcher/src/Cardano/Logging/Forwarding.hs b/trace-dispatcher/src/Cardano/Logging/Forwarding.hs index 670f983c704..3772d1fd09d 100644 --- a/trace-dispatcher/src/Cardano/Logging/Forwarding.hs +++ b/trace-dispatcher/src/Cardano/Logging/Forwarding.hs @@ -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) @@ -187,7 +187,7 @@ doConnectToAcceptor magic snocket makeBearer configureSocket address timeLimits timeLimits (cborTermVersionDataCodec forwardingCodecCBORTerm) nullNetworkConnectTracers - acceptableVersion + (HandshakeCallbacks acceptableVersion queryVersion) (simpleSingletonVersions ForwardingV_1 (ForwardingVersionData magic) @@ -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) diff --git a/trace-dispatcher/src/Cardano/Logging/Version.hs b/trace-dispatcher/src/Cardano/Logging/Version.hs index e891ed160df..e10619d5dba 100644 --- a/trace-dispatcher/src/Cardano/Logging/Version.hs +++ b/trace-dispatcher/src/Cardano/Logging/Version.hs @@ -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 @@ -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