mirror of
https://github.com/XRPLF/rippled.git
synced 2026-09-27 15:28:03 +00:00
startRoundTracing runs as an argument to Consensus::startRound, so it creates consensus.round before startRoundInternal applies the new mode. Reading mode_ there recorded the previous round's value, and a validator switching from observing to proposing got a round span labelled observing that nothing corrected. The attribute is now written in onModeChange, from the mode being applied. All three MonitoredMode::set paths funnel through there, so round start, a wrong-ledger switch and a bow-out all correct the parent span with one statement. Every path reaches it under RCLConsensus::mutex_ on the thread that created the span. The stale write is removed rather than kept alongside: neither Consensus::startRound nor startRoundInternal has an early return before mode_.set, so every round span is stamped. If a future path ever skipped it the attribute would be absent, which reads as a gap, instead of confidently wrong. onClose also sets consensus_mode, from the engine's own parameter, and is correct as it stands. Also tests addEvent's attribute overload on a live span, reading the exported event name and each value back off the in-memory exporter. It was previously only ever called on a null guard, so a dropped attribute exported nothing and failed nothing.