From 9e4fd02217cd5870538b2eb9311c4e4897ca5921 Mon Sep 17 00:00:00 2001 From: Franco Testagrossa Date: Fri, 24 Nov 2023 12:39:20 +0100 Subject: [PATCH] Trace params mismatch missconfiguration error when SavedNetworkPartiesInconsistent occur --- hydra-node/src/Hydra/Node/Network.hs | 12 +++++++++--- hydra-node/test/Hydra/NetworkSpec.hs | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/hydra-node/src/Hydra/Node/Network.hs b/hydra-node/src/Hydra/Node/Network.hs index 076b571328e..bcfcff0a4ab 100644 --- a/hydra-node/src/Hydra/Node/Network.hs +++ b/hydra-node/src/Hydra/Node/Network.hs @@ -72,12 +72,14 @@ import Hydra.Prelude hiding (fromList, replicate) import Control.Tracer (Tracer) import Hydra.Crypto (HydraKey, SigningKey) +import Hydra.Logging (traceWith) import Hydra.Logging.Messages (HydraLog (..)) import Hydra.Network (Host (..), IP, NetworkComponent, NodeId, PortNumber) import Hydra.Network.Authenticate (Authenticated (Authenticated), Signed, withAuthentication) import Hydra.Network.Heartbeat (ConnectionMessages, Heartbeat (..), withHeartbeat) import Hydra.Network.Ouroboros (TraceOuroborosNetwork, WithHost, withOuroborosNetwork) import Hydra.Network.Reliability (MessagePersistence, ReliableMsg, mkMessagePersistence, withReliability) +import Hydra.Node (HydraNodeLog (..)) import Hydra.Node.ParameterMismatch (ParamMismatch (..), ParameterMismatch (..)) import Hydra.Party (Party, deriveParty) import Hydra.Persistence (Persistence (..), createPersistence, createPersistenceIncremental) @@ -119,7 +121,7 @@ withNetwork tracer connectionMessages configuration callback action = do let localhost = Host{hostname = show host, port} me = deriveParty signingKey numberOfParties = length $ me : otherParties - messagePersistence <- configureMessagePersistence persistenceDir numberOfParties + messagePersistence <- configureMessagePersistence (contramap Node tracer) persistenceDir numberOfParties let reliability = withFlipHeartbeats $ @@ -140,15 +142,19 @@ withNetwork tracer connectionMessages configuration callback action = do -- * The number of parties is not the same as the number of acknowledgments saved. configureMessagePersistence :: (MonadIO m, MonadThrow m, FromJSON msg, ToJSON msg) => + Tracer m (HydraNodeLog tx) -> FilePath -> Int -> m (MessagePersistence m msg) -configureMessagePersistence persistenceDir numberOfParties = do +configureMessagePersistence tracer persistenceDir numberOfParties = do msgPersistence <- createPersistenceIncremental $ persistenceDir <> "/network-messages" ackPersistence@Persistence{load} <- createPersistence $ persistenceDir <> "/acks" mAcks <- load ackPersistence' <- case fmap (\acks -> length acks == numberOfParties) mAcks of - Just False -> throwIO $ ParameterMismatch [SavedNetworkPartiesInconsistent{numberOfParties}] + Just False -> do + let paramsMismatch = [SavedNetworkPartiesInconsistent{numberOfParties}] + traceWith tracer (Misconfiguration paramsMismatch) + throwIO $ ParameterMismatch paramsMismatch _ -> pure ackPersistence pure $ mkMessagePersistence numberOfParties msgPersistence ackPersistence' diff --git a/hydra-node/test/Hydra/NetworkSpec.hs b/hydra-node/test/Hydra/NetworkSpec.hs index 9f5b787ca85..b63f76c2154 100644 --- a/hydra-node/test/Hydra/NetworkSpec.hs +++ b/hydra-node/test/Hydra/NetworkSpec.hs @@ -10,7 +10,7 @@ import Codec.CBOR.Read (deserialiseFromBytes) import Codec.CBOR.Write (toLazyByteString) import Control.Concurrent.Class.MonadSTM (newTQueue, readTQueue, writeTQueue) import Hydra.Ledger.Simple (SimpleTx (..)) -import Hydra.Logging (showLogsOnFailure) +import Hydra.Logging (nullTracer, showLogsOnFailure) import Hydra.Network (Host (..), Network) import Hydra.Network.Message (Message (..)) import Hydra.Network.Ouroboros (broadcast, withOuroborosNetwork) @@ -59,7 +59,7 @@ spec = do it "throws ParameterMismatch when configuring given number of acks does not match number of parties" $ do withTempDir "persistence" $ \dir -> do writeFile (dir "acks") "[0,0,0]" - configureMessagePersistence @_ @Int dir 4 `shouldThrow` (const True :: Selector ParameterMismatch) + configureMessagePersistence @_ @Int nullTracer dir 4 `shouldThrow` (const True :: Selector ParameterMismatch) withNodeBroadcastingForever :: Network IO Integer -> Integer -> IO b -> IO b withNodeBroadcastingForever node value = withNodesBroadcastingForever [(node, value)]