Files
xahaud/include/xrpl/basics
Nicholas Dudfield 1ce1079dda feat: structural-anchor FBC short-circuit in null mode
Re-enable FullBelowCache in null-nodestore mode. Previously disabled via
useFullBelowCache() returning false, forcing sync to walk every branch.
That was a workaround for the stale-claim problem where an FBC entry
could outlive the canonical node it vouches for, leading to
SHAMapMissingNode on later reads.

At the two FBC short-circuit sites (SHAMap::addKnownNode and
gmn_ProcessNodes), null mode now:

- validates the claim via TreeNodeCache::fetch (returns non-null iff the
  canonical node is held alive anywhere in the system), and
- anchors the canonical into THIS SHAMap via canonicalizeChild, so
  retention is structural and independent of whichever ledger originally
  anchored the claim.

Disk-backed mode is byte-identical to before (gated on isRWDBNullMode()).

With the anchor rule in place, the post-sync wiring walks in
InboundLedger::init() and done() are redundant; drop both and call
setFullyWired() directly in null mode.

Adds projected-source markers at key points for the design doc at
.ai-docs/null-nodestore-backend.md.j2 (not tracked).
2026-04-14 13:42:16 +07:00
..
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 08:09:43 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:26:21 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:12 +09:00
2026-02-20 07:11:13 +09:00
2026-02-20 07:11:12 +09:00

Basics

Utility functions and classes.

ripple/basic should contain no dependencies on other modules.

Choosing a rippled container.

  • std::vector

    • For ordered containers with most insertions or erases at the end.
  • std::deque

    • For ordered containers with most insertions or erases at the start or end.
  • std::list

    • For ordered containers with inserts and erases to the middle.
    • For containers with iterators stable over insert and erase.
    • Generally slower and bigger than std::vector or std::deque except for those cases.
  • std::set

    • For sorted containers.
  • ripple::hash_set

    • Where inserts and contains need to be O(1).
    • For "small" sets, std::set might be faster and smaller.
  • ripple::hardened_hash_set

The following container is deprecated

  • std::unordered_set
  • Use ripple::hash_set instead, which uses a better hashing algorithm.
  • Or use ripple::hardened_hash_set to prevent algorithmic complexity attacks.