Skip to content

Commit 4a9dfbd

Browse files
committed
wip
1 parent 8c8454b commit 4a9dfbd

8 files changed

Lines changed: 47 additions & 46 deletions

File tree

cardano-node/src/Cardano/Node/Protocol/Checkpoints.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ module Cardano.Node.Protocol.Checkpoints
1111
import Cardano.Api
1212

1313
import qualified Cardano.Crypto.Hash.Class as Crypto
14-
import Cardano.Protocol.Crypto (StandardCrypto)
1514
import Cardano.Node.Types
15+
import Cardano.Protocol.Crypto ()
1616
import Ouroboros.Consensus.Block
17-
import Ouroboros.Consensus.Cardano
17+
import Ouroboros.Consensus.Cardano ()
1818
import Ouroboros.Consensus.Config (CheckpointsMap (..), emptyCheckpointsMap)
1919

2020
import Control.Exception (IOException)

cardano-node/src/Cardano/Node/Protocol/Shelley.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import Cardano.Node.Tracing.Era.Shelley ()
3939
import Cardano.Node.Tracing.Formatting ()
4040
import Cardano.Node.Tracing.Tracers.ChainDB ()
4141
import Cardano.Node.Types
42-
import Cardano.Protocol.Crypto (StandardCrypto)
42+
import Cardano.Protocol.Crypto ()
4343
import qualified Ouroboros.Consensus.Cardano as Consensus
4444
import Ouroboros.Consensus.HardFork.Combinator.AcrossEras ()
4545
import Ouroboros.Consensus.Protocol.Praos.Common (PraosCanBeLeader (..),

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ import Cardano.Node.Protocol.Types
5050
import Cardano.Node.Queries
5151
import Cardano.Rpc.Server
5252
import Cardano.Rpc.Server.Config
53-
import Cardano.Rpc.Server.Internal.Env (NodeKernelAccess)
54-
import Cardano.Rpc.Server.NodeKernelAccess.Internal (mkNodeKernelAccess)
5553
import Data.IORef
5654
import Cardano.Node.Startup
5755
import Cardano.Node.TraceConstraints (TraceConstraints)
@@ -495,7 +493,8 @@ handleSimpleNode blockType runP tracers nc cmdPc networkMagic onKernel = do
495493
useBootstrapVar ledgerPeerSnapshotPathVar ledgerPeerSnapshotVar
496494
rpcConfigVar
497495
rnNodeKernelHook nodeArgs registry nodeKernel
498-
writeIORef nodeKernelAccessRef . Just $ mkNodeKernelAccess blockType nodeKernel
496+
mkNodeKernelAccess (contramap RpcUnsupportedBlockType (startupTracer tracers)) blockType nodeKernel
497+
>>= writeIORef nodeKernelAccessRef
499498
}
500499
StdRunNodeArgs
501500
{ srnBfcMaxConcurrencyBulkSync = unMaxConcurrencyBulkSync <$> ncMaxConcurrencyBulkSync nc

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ data StartupTrace blk =
145145
| RpcConfigUpdate Text
146146
-- | Log RPC configuration update error
147147
| RpcConfigUpdateError Text
148+
-- | Log that node kernel access is not supported for the running block type.
149+
| RpcUnsupportedBlockType Text
148150
-- | Log RPC is forcefully disabled after a RPC server crash.
149151
| RpcForceDisabled
150152

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ module Cardano.Node.Tracing.Tracers.Startup
1717

1818
import Cardano.Api (NetworkMagic (..), SlotNo (..))
1919
import qualified Cardano.Api as Api
20-
import Cardano.Network.OrphanInstances ()
2120

2221
import qualified Cardano.Chain.Genesis as Gen
2322
import Cardano.Git.Rev (gitRev)
2423
import Cardano.Ledger.Shelley.API as SL
2524
import Cardano.Logging
2625
import Cardano.Network.NodeToClient (LocalAddress (..))
2726
import Cardano.Network.NodeToNode (DiffusionMode (..))
27+
import Cardano.Network.OrphanInstances ()
2828
import Cardano.Node.Configuration.POM (NodeConfiguration, ncProtocol)
2929
import Cardano.Node.Configuration.Socket
3030
import Cardano.Node.Protocol (SomeConsensusProtocol (..))
@@ -288,6 +288,9 @@ instance ( Show (BlockNodeToNodeVersion blk)
288288
forMachine _dtal (RpcConfigUpdateError err) =
289289
mconcat [ "kind" .= String "RpcConfigUpdateError"
290290
, "error" .= String ("Error while updating RPC configuration: " <> err) ]
291+
forMachine _dtal (RpcUnsupportedBlockType blockType) =
292+
mconcat [ "kind" .= String "RpcUnsupportedBlockType"
293+
, "blockType" .= String blockType ]
291294
forMachine _dtal RpcForceDisabled =
292295
mconcat [ "kind" .= String "RpcForceDisabled"
293296
, "error" .= String (ppStartupInfoTrace RpcForceDisabled)]
@@ -360,6 +363,8 @@ instance MetaTrace (StartupTrace blk) where
360363
Namespace [] ["RpcConfigUpdate"]
361364
namespaceFor RpcConfigUpdateError {} =
362365
Namespace [] ["RpcConfigUpdateError"]
366+
namespaceFor RpcUnsupportedBlockType {} =
367+
Namespace [] ["RpcUnsupportedBlockType"]
363368
namespaceFor RpcForceDisabled =
364369
Namespace [] ["RpcForceDisabled"]
365370
namespaceFor MovedTopLevelOption {} =
@@ -376,6 +381,7 @@ instance MetaTrace (StartupTrace blk) where
376381
severityFor (Namespace _ ["WarningDevelopmentNodeToClientVersions"]) _ = Just Warning
377382
severityFor (Namespace _ ["RpcConfigUpdate"]) _ = Just Notice
378383
severityFor (Namespace _ ["RpcConfigUpdateError"]) _ = Just Error
384+
severityFor (Namespace _ ["RpcUnsupportedBlockType"]) _ = Just Warning
379385
severityFor (Namespace _ ["RpcForceDisabled"]) _ = Just Error
380386
severityFor (Namespace _ ["BlockForgingUpdateError"]) _ = Just Error
381387
severityFor (Namespace _ ["BlockForgingBlockTypeMismatch"]) _ = Just Error
@@ -407,6 +413,8 @@ instance MetaTrace (StartupTrace blk) where
407413
""
408414
documentFor (Namespace [] ["RpcConfigUpdateError"]) = Just
409415
""
416+
documentFor (Namespace [] ["RpcUnsupportedBlockType"]) = Just
417+
""
410418
documentFor (Namespace [] ["RpcForceDisabled"]) = Just
411419
""
412420
documentFor (Namespace [] ["NetworkConfigUpdate"]) = Just
@@ -480,6 +488,7 @@ instance MetaTrace (StartupTrace blk) where
480488
, Namespace [] ["BlockForgingBlockTypeMismatch"]
481489
, Namespace [] ["RpcConfigUpdate"]
482490
, Namespace [] ["RpcConfigUpdateError"]
491+
, Namespace [] ["RpcUnsupportedBlockType"]
483492
, Namespace [] ["RpcForceDisabled"]
484493
, Namespace [] ["NetworkConfigUpdate"]
485494
, Namespace [] ["NetworkConfigUpdateUnsupported"]
@@ -605,6 +614,7 @@ ppStartupInfoTrace (LedgerPeerSnapshotLoaded slotNo) =
605614

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

610620
ppStartupInfoTrace NonP2PWarning = nonP2PWarningMessage

cardano-testnet/src/Testnet/Runtime.hs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import qualified Cardano.Api as Api
2727
import qualified Cardano.Ledger.Api as L
2828
import qualified Cardano.Ledger.Shelley.LedgerState as L
2929
import qualified Cardano.Ledger.Shelley.State as L
30+
import Cardano.Node.Testnet.Paths (defaultSocketName)
3031

3132
import Prelude
3233

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

5556
import Testnet.Filepath
56-
import Cardano.Node.Testnet.Paths (defaultSocketName)
5757
import qualified Testnet.Ping as Ping
5858
import Testnet.Process.Run (ProcessError (..), initiateProcess)
59-
import Testnet.Process.RunIO (execCli_, execKesAgentControl_, liftIOAnnotated,
60-
procCustom, procKesAgent, procNode)
59+
import Testnet.Process.RunIO (execCli_, execKesAgentControl_, liftIOAnnotated, procCustom,
60+
procKesAgent, procNode)
6161
import Testnet.Types (TestnetKesAgent (..), TestnetNode (..),
6262
TestnetRuntime (configurationFile), showIpv4Address, testnetSprockets)
6363

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

514514
-- store epoch state for logging of differences

cardano-testnet/src/Testnet/Start/Cardano.hs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,42 +42,42 @@ import qualified Cardano.Api.Byron as Byron
4242
import Cardano.Network.Diffusion.Topology (CardanoNetworkTopology)
4343
import Cardano.Node.Configuration.NodeAddress (PortNumber)
4444
import Cardano.Node.Configuration.TopologyP2P ()
45+
import Cardano.Node.Testnet.Paths (defaultConfigFile, defaultNodeEnvFile, defaultPortFile,
46+
defaultUtxoAddrPath)
4547
import Cardano.Prelude (NonEmpty ((:|)), canonicalEncodePretty, readMaybe)
4648
import Ouroboros.Network.PeerSelection.RelayAccessPoint (RelayAccessPoint (..))
4749

4850
import Prelude hiding (lines)
4951

5052
import Control.Concurrent (threadDelay)
51-
import Control.Monad (forM, forM_, guard, unless, when)
52-
import Control.Monad.Trans.Maybe (runMaybeT)
5353
import Control.Exception (IOException)
54+
import Control.Monad (forM, forM_, guard, unless, when)
5455
import Control.Monad.Catch
56+
import Control.Monad.Trans.Maybe (runMaybeT)
5557
import Control.Monad.Trans.Resource (MonadResource, getInternalState)
5658
import Data.Aeson
5759
import qualified Data.Aeson.Encode.Pretty as A
58-
import qualified Data.Yaml as Yaml
5960
import qualified Data.ByteString.Lazy as LBS
6061
import Data.Default.Class ()
6162
import Data.Either
62-
import Data.Maybe (mapMaybe)
6363
import Data.Functor
6464
import Data.List (sort, stripPrefix, uncons)
6565
import qualified Data.List.NonEmpty as NEL
6666
import qualified Data.Map as Map
67+
import Data.Maybe (mapMaybe)
6768
import Data.MonoTraversable (Element, MonoFunctor, omap)
6869
import qualified Data.Text as Text
6970
import Data.Time (diffUTCTime)
7071
import Data.Time.Clock (NominalDiffTime)
7172
import qualified Data.Time.Clock as DTC
73+
import qualified Data.Yaml as Yaml
7274
import GHC.Stack
7375
import qualified System.Directory as IO
74-
import qualified System.Process as Process
7576
import System.FilePath ((</>))
77+
import qualified System.Process as Process
7678

7779
import Testnet.Components.Configuration
7880
import qualified Testnet.Defaults as Defaults
79-
import Cardano.Node.Testnet.Paths (defaultConfigFile, defaultNodeEnvFile,
80-
defaultPortFile, defaultUtxoAddrPath)
8181
import Testnet.Filepath
8282
import Testnet.Handlers (interruptNodesOnSigINT)
8383
import Testnet.Orphans ()
@@ -440,9 +440,9 @@ cardanoTestnet
440440
QuickValidation
441441
(EpochNo maxBound)
442442
minBound
443-
$ \_ slotNo blockNo -> do
443+
$ \_ slotNo currentBlockNo -> do
444444
put slotNo
445-
pure $ if blockNo >= 1
445+
pure $ if currentBlockNo >= 1
446446
then ConditionMet -- we got one block
447447
else ConditionNotMet
448448

cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Rpc/FetchBlock.hs

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,14 @@ import Cardano.Testnet
1919

2020
import Prelude
2121

22-
import Control.Monad ((<=<))
2322
import qualified Data.ByteString as BS
2423
import qualified Data.ByteString.Short as SBS
2524
import Data.Default.Class
26-
import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds)
27-
import Data.Word (Word64)
2825
import Lens.Micro
2926

3027
import Testnet.Process.Run
3128
import Testnet.Property.Util (integrationRetryWorkspace)
3229
import Testnet.Start.Types
33-
import Testnet.Types (nodeConnectionInfo)
3430

3531
import qualified Hedgehog as H
3632
import qualified Hedgehog.Extras as H
@@ -49,7 +45,7 @@ hprop_rpc_fetch_block = integrationRetryWorkspace 2 "rpc-fetch-block" $ \tempAbs
4945
creationOptions = def{creationEra = AnyShelleyBasedEra sbe}
5046
runtimeOptions = def{runtimeEnableRpc = RpcEnabled}
5147

52-
tr@TestnetRuntime
48+
_tr@TestnetRuntime
5349
{ testnetMagic
5450
, testnetNodes = node0@TestnetNode{nodeSprocket} : _
5551
} <-
@@ -72,16 +68,12 @@ hprop_rpc_fetch_block = integrationRetryWorkspace 2 "rpc-fetch-block" $ \tempAbs
7268
-- Call FetchBlock via gRPC
7369
let rpcServer = Rpc.ServerUnix rpcSocket
7470
blockRef = def & U5c.slot .~ slot & U5c.hash .~ blockHash
75-
request = def & U5c.ref .~ [blockRef]
71+
request = def & U5c.ref .~ blockRef
7672

7773
response <- H.evalIO . Rpc.withConnection def rpcServer $ \conn ->
7874
Rpc.nonStreaming conn (Rpc.rpc @(Rpc.Protobuf U5c.SyncService "fetchBlock")) request
7975

80-
-- Verify response contains exactly one block
81-
let blocks = response ^. U5c.block
82-
length blocks H.=== 1
83-
84-
let block = head blocks
76+
let block = response ^. U5c.block
8577

8678
-- Verify nativeBytes is non-empty
8779
let rawBytes = block ^. U5c.nativeBytes
@@ -95,17 +87,15 @@ hprop_rpc_fetch_block = integrationRetryWorkspace 2 "rpc-fetch-block" $ \tempAbs
9587
-- height is the block number from ChainDB
9688
block ^. U5c.cardano . U5c.header . U5c.height H.=== blockNo
9789

98-
-- Compute expected timestamp via N2C IPC
99-
connectionInfo <- nodeConnectionInfo tr 0
100-
(systemStart, eraHistory) <-
101-
(H.leftFail <=< H.leftFailM) . H.evalIO $
102-
executeLocalStateQueryExpr connectionInfo VolatileTip $ do
103-
ss <- querySystemStart
104-
eh <- queryEraHistory
105-
pure $ (,) <$> ss <*> eh
106-
expectedTimestampMs :: Word64 <- H.leftFail $ do
107-
utcTime <- slotToUTCTime systemStart eraHistory (SlotNo slot)
108-
pure . round $ utcTimeToPOSIXSeconds utcTime * 1000
109-
110-
-- Verify timestamp is within 1000ms of expected
111-
H.assertWithinTolerance (block ^. U5c.cardano . U5c.timestamp) expectedTimestampMs 1000
90+
-- TODO: verify timestamp once FetchBlock populates it from EraHistory (node kernel snapshot migration)
91+
-- connectionInfo <- nodeConnectionInfo tr 0
92+
-- (systemStart, eraHistory) <-
93+
-- (H.leftFail <=< H.leftFailM) . H.evalIO $
94+
-- executeLocalStateQueryExpr connectionInfo VolatileTip $ do
95+
-- ss <- querySystemStart
96+
-- eh <- queryEraHistory
97+
-- pure $ (,) <$> ss <*> eh
98+
-- expectedTimestampMs :: Word64 <- H.leftFail $ do
99+
-- utcTime <- slotToUTCTime systemStart eraHistory (SlotNo slot)
100+
-- pure . round $ utcTimeToPOSIXSeconds utcTime * 1000
101+
-- H.assertWithinTolerance (block ^. U5c.cardano . U5c.timestamp) expectedTimestampMs 1000

0 commit comments

Comments
 (0)