Files
rippled/include
Bart c224082e1e fix: Report unreadable SHAMap nodes instead of throwing
`SHAMap::walkMap` and `walkMapParallel` treat a null `descendNoStore` result as
"this node is missing" and record it in their `missingNodes` output, but
`descendNoStore` used the throwing `fetchNode`, so that branch could never run for
a backed map. `Ledger::walkLedger` therefore threw instead of returning false, its
"N missing account node(s)" log never printed, and `LedgerCleaner` never reached
the path that clears the ledger and re-acquires it. `descendNoStore` now uses
`fetchNodeNT`, which makes all three behave as written.

`visitNodes` has to cope with the null child that change allows, so it skips the
subtree and returns false to say the walk did not cover the whole map.
`visitLeaves` forwards that answer. Two callers act on it. The online-delete copy
loop in `SHAMapStoreImp::run` abandons the rotation cycle, which is what its
former `catch (SHAMapMissingNode)` did and what `clearPrior` plus the archive
deletion in `rotate` require. `LedgerReplayMsgHandler::processReplayDeltaRequest`
replies `reNO_LEDGER` rather than sending a transaction list it knows is short.

Also drops the unreachable null check in `descend(SHAMapInnerNode&, unsigned)`,
since `fetchNode` throws before it can return null.
2026-09-23 13:10:33 +02:00
..