Path workers, allow node operators to configure threads used#724
Open
shortthefomo wants to merge 13 commits intoXahau:devfrom
Open
Path workers, allow node operators to configure threads used#724shortthefomo wants to merge 13 commits intoXahau:devfrom
shortthefomo wants to merge 13 commits intoXahau:devfrom
Conversation
Sync: Ripple(d) 2.4.0
* Add AMM bid/create/deposit/swap/withdraw/vote invariants:
- Deposit, Withdrawal invariants: `sqrt(asset1Balance * asset2Balance) >= LPTokens`.
- Bid: `sqrt(asset1Balance * asset2Balance) > LPTokens` and the pool balances don't change.
- Create: `sqrt(asset1Balance * assetBalance2) == LPTokens`.
- Swap: `asset1BalanceAfter * asset2BalanceAfter >= asset1BalanceBefore * asset2BalanceBefore`
and `LPTokens` don't change.
- Vote: `LPTokens` and pool balances don't change.
- All AMM and swap transactions: amounts and tokens are greater than zero, except on withdrawal if all tokens
are withdrawn.
* Add AMM deposit and withdraw rounding to ensure AMM invariant:
- On deposit, tokens out are rounded downward and deposit amount is rounded upward.
- On withdrawal, tokens in are rounded upward and withdrawal amount is rounded downward.
* Add Order Book Offer invariant to verify consumed amounts. Consumed amounts are less than the offer.
* Fix Bid validation. `AuthAccount` can't have duplicate accounts or the submitter account.
Due to rounding, the LPTokenBalance of the last LP might not match the LP's trustline balance. This was fixed for `AMMWithdraw` in `fixAMMv1_1` by adjusting the LPTokenBalance to be the same as the trustline balance. Since `AMMClawback` is also performing a withdrawal, we need to adjust LPTokenBalance as well in `AMMClawback.` This change includes: 1. Refactored `verifyAndAdjustLPTokenBalance` function in `AMMUtils`, which both`AMMWithdraw` and `AMMClawback` call to adjust LPTokenBalance. 2. Added the unit test `testLastHolderLPTokenBalance` to test the scenario. 3. Modify the existing unit tests for `fixAMMClawbackRounding`.
Sentinel Security Review
Stats: 2 issues · 2 medium · reviewed 0 files Available CommandsPR-Level (top-level PR comment)
Finding-Level (reply to a Sentinel inline comment)
Sentinel AI |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## dev #724 +/- ##
==========================================
- Coverage 66.52% 66.50% -0.03%
==========================================
Files 831 831
Lines 78008 78069 +61
Branches 44269 44299 +30
==========================================
+ Hits 51893 51917 +24
- Misses 17785 17809 +24
- Partials 8330 8343 +13 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Contributor
|
@shortthefomo needs clang-format please |
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.
High Level Overview of Change
Introduce a new configurable limit for pathfinding workers (
[path_workers]), replacing the previousjt_update_pf_limit. This allows administrators to control the maximum number of concurrently runningjtUPDATE_PFjobs in the JobQueue, which impacts path update and full order book update throughput. The limit is now capped at 3/4 of the configured[workers](rounded down), with a minimum cap of 2, to prevent system overload while allowing better utilization of available threads.Additionally, tie the number of pathfinding threads (
mPathFindThread) dynamically to the configured workers, ensuring scalability.This change does heavily impact a node CPU use when configured away from the default.
This PR was also opened against xrpld XRPLF/rippled#6604
Context of Change
The pathfinding thread count is now tied to workers to avoid fixed low limits that don't scale. This improves performance on larger deployments while preventing resource exhaustion.
The core finding is that because pathfinding and order books updates are blocked behind a single thread, all other requests on todo that get stuck behind the slowest request. As xrpld stands today.
It is recommended that pathfinding nodes do run in memory mode along with this patch.
Every effort has been made to make sure the node is not starved when servicing large number of requests. Even so a validator should not be configuring their node to discover paths. This config is meant only for node setup to discover paths.
API Impact
libxrplchange (any change that may affectlibxrplor dependents oflibxrpl)No API impact - this is purely a configuration change.
Before / After
Before:
After:
[path_workers](default 2, max 3/4 of workers rounded down, min cap 2)Example: With
[workers] = 14, max[path_workers]is now 10 (vs. previous 1).Test Plan
To test: Set
[path_workers]to a value > 3/4 of[workers]and verify startup failure with appropriate error.Future Tasks
None - this completes the pathfinding worker configurability improvements.