Repository navigation
SRE Node 11.2 preparation - #6732
Merged
Merged
Conversation
johnalotoski
force-pushed
the
jl/sre-11.2.0
branch
2 times, most recently
from
October 14, 2026 08:23
550835d to
78b18be
Compare
Contributor
|
Back-up of branch: https://github.com/IntersectMBO/cardano-node/tree/backup/jl/sre-11.2.0 |
palas
force-pushed
the
jl/sre-11.2.0
branch
4 times, most recently
from
October 15, 2026 15:34
41ebf25 to
fe64f23
Compare
koslambrou
force-pushed
the
koslambrou/prepare-11.2
branch
6 times, most recently
from
October 20, 2026 14:45
e1435a3 to
120e7b9
Compare
johnalotoski
force-pushed
the
jl/sre-11.2.0
branch
from
October 21, 2026 00:10
ed8374d to
7def6a6
Compare
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
johnalotoski
force-pushed
the
jl/sre-11.2.0
branch
from
October 21, 2026 02:55
7def6a6 to
891bb71
Compare
koslambrou
force-pushed
the
koslambrou/prepare-11.2
branch
from
October 21, 2026 13:31
918a9df to
3026f0b
Compare
carbolymer
force-pushed
the
koslambrou/prepare-11.2
branch
from
October 22, 2026 10:31
ef1cfc4 to
1e701d5
Compare
johnalotoski
force-pushed
the
jl/sre-11.2.0
branch
3 times, most recently
from
October 22, 2026 21:47
3636f73 to
9637c31
Compare
mgmeier
approved these changes
Oct 23, 2026
johnalotoski
force-pushed
the
jl/sre-11.2.0
branch
from
October 23, 2026 12:33
2105328 to
65cf57d
Compare
koslambrou
force-pushed
the
koslambrou/prepare-11.2
branch
from
October 26, 2026 19:14
e1cd357 to
96e9dba
Compare
johnalotoski
force-pushed
the
jl/sre-11.2.0
branch
from
October 26, 2026 20:03
4bdd4cd to
67aeb5d
Compare
Brings in the enveloped environment configs, along with the cardanoLib attributes the release archive and docker changes need: mkEnvelope and the per-environment configFormat. cardano-config 1.1.0.0 appears in the lock transitively as iohk-nix's source-only schema input.
Regenerated with update-config-files.sh against the bumped iohkNix. mainnet-config.json is now in the cardano-config envelope, following what iohk-nix publishes. mainnet-config.yaml is hand-maintained and stays flat; it drops the same keys the json series drops, Protocol and MaxKnownMajorProtocolVersion, and its MinNodeVersion moves to 11.2.0 to match. The two remain equivalent through migrate, which reproduces the json from the yaml byte for byte, though they are no longer directly comparable. testnet-template-config.json drops ApplicationName, ApplicationVersion, PBftSignatureThreshold, Protocol and MaxKnownMajorProtocolVersion. The template is copied from the iohk-nix source tree rather than from the published deployment, so it stays flat. testnet-template-dijkstra.json picks up the Leios genesis protocol parameters added in the w36 respin.
iohk-nix now publishes <env>-config.json in the cardano-config envelope. Two places in this repo produced or consumed the legacy dialect regardless. binary-release.nix built config.json straight from env.nodeConfig, bypassing configFormat, so release tarballs stayed on the legacy dialect while the published configs moved. It now emits whichever dialect the environment selects, enveloping the already-relativised config so the tarball's sibling genesis paths survive. cardanoLib always sets configFormat and throws on a value it does not know, so this throws too rather than falling through to legacy and publishing the wrong dialect silently. The docker node entrypoint rewrote relative "*File" values to absolute paths with a top-level with_entries. In the envelope those keys live under Configuration.<Section>, so it silently rewrote nothing and the merged config's genesis paths would have resolved against the runtime dir, the exact failure the code comment says it exists to prevent. Walking the document handles the flat and enveloped shapes alike. Docker otherwise needs no change: it takes its configs from mkConfigHtml, so it picks up the envelope, and the sed that strips the <env>- prefix is a plain text substitution that still matches. CARDANO_CONFIG_JSON_MERGE is a user-facing break that no code change can absorb: the merge is a plain deep merge with no key relocation, so a merge document written for the flat shape now adds an unrecognised top-level key and leaves the intended value untouched, silently. The README gains the new shape, an example updated to Configuration.HermodTracing.TraceOptions, and a way to find any key's path from inside the image. The tracer section says its config is not enveloped, since the two appear side by side.
trace-dispatcher reads a file expecting the tracing settings at its root, but a cardano-config envelope nests them under `Configuration.HermodTracing`, so `trace-documentation` failed with `key "Options" not found`. Pass that object as `FromJSONObject` instead. It holds the flat legacy key names, so no particular trace-dispatcher version is needed.
The json moved to the cardano-config envelope, leaving the hand-maintained yaml as the only flat mainnet config and breaking the yaml === json equivalence that Test.Cardano.Config.Mainnet asserts. Restructure the yaml to the same shape. LastKnownBlockVersion-Major/-Minor/-Alt are dropped: migrate treats them as removed and the json does not carry them. An enveloped config never reaches POM, which was the only thing that required them, so this file is no longer readable by a pre-11.2 node. Comments are preserved per section, and the commented-out examples are re-nested under Network and Mempool, the section names cardano-config derives from its schemas, with the DeadlineTargetNumberOf* and CapacityBytesOverride key names. Uncommenting one now sets the value it names instead of adding a key the node does not recognise. Verified: the yaml and json decode to identical values, and trace-documentation generates identical output from the yaml, the json and an older flat config.
The current prototype parses --shelley-bls-key as optional (strOption ...), so the node takes at most one occurrence. Multiple keys go in the one file instead, as a JSON array of text envelopes, which is how a rotation pair or a bundle of pool keys is supplied. The earlier --shelley-bls-keys design of accepting the flag repeatedly is not supported going forward.
Regenerated from iohk-nix, which this bumps. The envelope moves to format version 2 with the shortened section keys, mainnet defaults to GenesisMode, and the snapshot policy gains MinDelay and MaxDelay derived from the security parameter. The peer snapshot and the topology's useLedgerAfterSlot are regenerated together, so the point past which a syncing node trusts ledger peers tracks the snapshot rather than trailing it.
The published configs and release artifacts moved to the cardano-config envelope, but the service still writes a flat config. Add configFormat, "legacy" or "enveloped", so consumers can move a host at a time. Enveloping happens last, on the assembled instance config, so nodeConfig, extraNodeConfig and extraNodeInstanceConfig stay flat and keep today's key names. mkEnvelope applies the renames and sections each key. A key it does not recognise is kept outside any section, where the node will not resolve it, so opting a host in is worth checking against its warnings. Ignored when nodeConfigFile is set, so workbench is unaffected. The default stays legacy.
Added warnings, raised at eval time when configFormat is "enveloped", for keys cardano-config will not resolve. Lifted the config assembly out of mkScript to module level so the warnings check the same document that gets written, rather than a second assembly of it. Needs the cardanoLib exports added in iohk-nix: removedKeys, renamedKeys and unrecognisedKeys.
POM reads these only as TargetNumberOf*, cardano-config only as DeadlineTargetNumberOf*. The module emitted the former unconditionally, which mkEnvelope renamed, so an enveloped host warned that four keys were stale when nothing the operator set could change them.
globalTimeout bounds the whole test, so 45s had to cover the vm boot plus create-env, synthesis, both analyser passes, truncation and the asserted synthesis. It was raised from 30 to 45 in c310c0d and is still tight enough that runner variance can reach it. 300s keeps the override useful for surfacing a hang while leaving room under the one hour framework default.
Added SIGTERM and SIGINT cases for both ways into the image, scripts mode and custom mode, asserting docker did not have to SIGKILL after the grace period. These were the first four items of the Manual Testing section in nix/docker/README.md, which nobody ran and which predated merge mode, the /tmp runtime dir, read-only root and non-root UIDs. Its fifth item, cli access, is already covered three times here. Dropped the section. Use util-linux rather than the utillinux alias to resolve eval warn.
Added a submit-api subtest covering scripts mode startup and a metrics scrape. Renamed cardanoOciReadonly to cardanoOci. The test has covered more than read-only roots since its second commit and the name described only the first. Grouped the stages into subtests so a failure names its concern rather than a line number. Kept as one test: the shared cost is the vm, the docker daemon and four image loads, which a split would pay per test. All eleven subtests pass in ~120s.
Boot a preview node on `configFormat = "enveloped"` with `withUtxoHdLsmt` and an envelope-shaped `extraNodeConfig`, and assert the node took the cardano-config path, that it reported nothing to migrate or ignore, that the LSM backend resolved with its path, that the envelope-shaped key reached the resolved configuration, and that `config resolve` on the generated file says nothing on stderr. The service assembles the config it envelopes, so this is the only check that sees one as a host writes it: iohk-nix lints and envelopes environment configs, which carry neither the flat `V2LSM` pair the service adds nor anything a caller supplies. Reading two settings back out of the resolved `NodeConfiguration` is the part the iohk-nix checks cannot do at all. Those compare against cardano-config's own output, so a key its adapter never maps is lost identically on both sides and agrees.
The service writes `Backend = "V2LSM"` with a sibling `LSMDatabasePath`, which is the legacy spelling of the tagged `Backend.LSM` form. POM reads `Backend` as a string, so the nested form fails to parse on a legacy config, and mkEnvelope folds the flat one anyway, which it must do regardless for a caller supplying the same keys through extraNodeConfig. Writing the nested form here is therefore gated on no consumer still setting `configFormat = "legacy"`, and is a single flip at that point rather than a branch on the dialect. The envelope.nix header lists this as the last of the four conditions for retiring the translation; this is where the mechanics live.
The LSM backend can export a standalone copy of each snapshot, which is what Mithril signing consumes, but the service had no way to ask for one: it set `LSMDatabasePath` and nothing else. Emitted only when set, and only under `withUtxoHdLsmt`.
The node resolves relay names from the peer snapshot. With no nameserver the dns resolver is built from an empty list and throws BadConfiguration, which on the aarch64 builder escaped diffusion's retry path and took the node down instead of being retried as it is on x86_64.
johnalotoski
force-pushed
the
jl/sre-11.2.0
branch
from
October 26, 2026 20:11
67aeb5d to
721e8b0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
SRE changes for the 11.2 release: the shipped network configurations move to the
cardano-config envelope, and the nixos service, scripts and images learn to
generate and consume it.
Configuration.
mainnet-config.yamland the shipped network configs areregenerated for cardano-config 2.2.2.0, with mainnet enveloped. A
configFormatoption on the nixos service selects the dialect the generated config is written
in, the scripts take it from the environment, and the service warns about keys
that enveloping would strand rather than dropping them silently.
Tracing.
trace-documentationand the trace config consistency check read afile expecting the tracing settings at its root, which an envelope puts under
Configuration.HermodTracing. They now hand that object to trace-dispatcherdirectly. The running node is unaffected; it passes an already-resolved
TraceConfig.Service and images.
lsmExportPath,immutableDatabasePathandvolatileDatabasePathoptions; a single BLS key rather than a list; peer targetnames emitted to match the selected dialect. The docker readme documents the
enveloped shape for
CARDANO_CONFIG_JSON_MERGE.Tests. New coverage for an enveloped host config and for submit-api startup,
graceful shutdown cases, and a
cardanoOciReadonlytocardanoOcirename.Dependencies
Temporary Pins
iohkNixwill be updated once final testing is done just prior to merge to master and tagging.Checklist