Skip to content

fix(sim/soak): disable peer_private + ignore availability gaps so soak passes cross-impl#15

Merged
LeJamon merged 1 commit into
XRPL-Commons:mainfrom
RomThpt:fix/soak-rippled-consensus-timing
Jun 8, 2026
Merged

fix(sim/soak): disable peer_private + ignore availability gaps so soak passes cross-impl#15
LeJamon merged 1 commit into
XRPL-Commons:mainfrom
RomThpt:fix/soak-rippled-consensus-timing

Conversation

@RomThpt

@RomThpt RomThpt commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Summary

--sim soak --client rxrpl,rippled failed 0/1: the oracle saw rippled stuck on empty ledgers while rxrpl advanced with the submitted payments. Two harness causes, both fixed in simulators/soak/main.go:

1. peer_private dropped relayed transactions

The rippled client defaults to peer_private=1, under which rippled drops transactions relayed by peers it doesn't treat as cluster members. rippled kept validating ledgers but every one was empty (anyTransactions=0), so payments submitted to the rxrpl node never reached rippled. Starting the nodes with XRPL_PEER_PRIVATE=0 (the same fix the sync suite already applies) lets rippled accept and apply the relayed traffic — confirmed in logs: Applied 5 transactions, Ledger 9 has 5 transactions.

2. Oracle conflated availability with divergence

A node that booted/synced at a higher seq, or pruned a low seq via online_delete, returns no ledger for that seq — an Errors entry with no Divergences. The oracle treated that as disagreement and failed the test. Now:

  • non-empty Divergences (two nodes serving a different ledger_hash for a seq they both have) = real fork → fail
  • pure availability gap → logged and skipped
  • added a per-component (account_hash / transaction_hash) breakdown on a genuine divergence for faster future diagnosis

Test plan

  • --sim soak --client rxrpl,rippled1/1 PASS (all nodes agree on ledgers 5-18 after 15 transactions), against rxrpl carrying the close-time fix (rxrpl PR #117).
  • Only simulators/soak/main.go changes — no other suite affected.

Note

Branch name (...consensus-timing) is historical — the consensus-timing config angle was investigated and ruled out; the actual fix is peer_private + oracle robustness.

…k passes cross-impl

The soak suite failed 0/1 on --client rxrpl,rippled: the oracle saw
rippled stuck on empty ledgers while rxrpl advanced with the submitted
payments. Two harness causes, both fixed here:

1. peer_private. The rippled client defaults to peer_private=1, under
   which rippled drops transactions relayed by peers it does not treat
   as cluster members. It kept validating ledgers but every one was
   empty (anyTransactions=0), so the payments submitted to the rxrpl
   node never reached rippled. Starting the nodes with
   XRPL_PEER_PRIVATE=0 (the same fix the sync suite already applies)
   lets rippled accept and apply the relayed traffic — confirmed in
   logs: 'Applied 5 transactions', 'Ledger 9 has 5 transactions'.

2. Oracle conflated availability with divergence. A node that booted or
   synced at a higher seq, or pruned a low seq via online_delete,
   returns no ledger for that seq — an Errors entry with no Divergences.
   The oracle treated that as disagreement and failed the test. Now a
   non-empty Divergences (two nodes serving different ledger_hash for a
   seq they both have) is the only real fork; a pure availability gap is
   logged and skipped. Also adds a per-component (account_hash /
   transaction_hash) breakdown on a genuine divergence to speed future
   diagnosis.

Result: soak traffic-and-oracle 0/1 -> 1/1 ('all nodes agree on ledgers
5-18 after 15 transactions') against rxrpl carrying the close-time fix
(rxrpl PR #117). Only simulators/soak/main.go changes — no other suite
affected.
@LeJamon LeJamon merged commit b519257 into XRPL-Commons:main Jun 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants