-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'upstream/develop' into hooks-merge
* upstream/develop: Set version to 2.3.0-b4 feat(SQLite): allow configurable database pragma values (5135) refactor: re-order PRAGMA statements (5140) fix(book_changes): add "validated" field and reduce RPC latency (5096) chore: fix typos in comments (5094) Set version to 2.2.3 Update SQLite3 max_page_count to match current defaults (5114)
- Loading branch information
Showing
21 changed files
with
380 additions
and
67 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,64 @@ This document contains the release notes for `rippled`, the reference server imp | |
|
||
Have new ideas? Need help with setting up your node? [Please open an issue here](https://github.com/xrplf/rippled/issues/new/choose). | ||
|
||
# Version 2.2.3 | ||
|
||
Version 2.2.3 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release fixes a problem that can cause full-history servers to run out of space in their SQLite databases, depending on configuration. There are no new amendments in this release. | ||
|
||
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server) | ||
|
||
<!-- BREAK --> | ||
|
||
## Background | ||
|
||
The `rippled` server uses a SQLite database for tracking transactions, in addition to the main data store (usually NuDB) for ledger data. In servers keeping a large amount of history, this database can run out of space based on the configured number and size of database pages, even if the machine has disk space available. Based on the size of full history on Mainnet, servers with the default SQLite page size of 4096 may now run out of space if they store full history. In this case, your server may shut down with an error such as the following: | ||
|
||
```text | ||
Free SQLite space for transaction db is less than 512MB. To fix this, rippled | ||
must be executed with the vacuum <sqlitetmpdir> parameter before restarting. | ||
Note that this activity can take multiple days, depending on database size. | ||
``` | ||
|
||
The exact timing of when a server runs out of space can vary based on a few factors. Server operators who encountered a similar problem in 2018 and followed steps to [increase the SQLite transaction database page size issue](../../../docs/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue) may not encounter this problem at all. The `--vacuum` commandline option to `rippled` from that time may work to free up space in the database, but requires extended downtime. | ||
|
||
Version 2.2.3 of `rippled` reconfigures the maximum number of SQLite pages so that the issue does not occur. | ||
|
||
Clio servers providing full history are not affected by this issue. | ||
|
||
|
||
## Action Required | ||
|
||
If you run an [XRP Ledger full history server](https://xrpl.org/docs/infrastructure/configuration/data-retention/configure-full-history), upgrading to version 2.2.3 may prevent the server from crashing when `transaction.db` exceeds approximately 8.7 terabytes. | ||
|
||
Additionally, five amendments introduced in version 2.2.0 are open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators. If you operate an XRP Ledger server older than version 2.2.0, upgrade by Sep 23, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network. | ||
|
||
## Changelog | ||
|
||
### Bug Fixes | ||
|
||
- Update SQLite3 max_page_count to match current defaults ([#5114](https://github.com/XRPLF/rippled/pull/5114)) | ||
|
||
### GitHub | ||
|
||
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>. | ||
|
||
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value. | ||
|
||
|
||
## Credits | ||
|
||
The following people contributed directly to this release: | ||
|
||
J. Scott Branson <[email protected]> | ||
|
||
|
||
Bug Bounties and Responsible Disclosures: | ||
|
||
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find. | ||
|
||
To report a bug, please send a detailed report to: <[email protected]> | ||
|
||
|
||
# Version 2.2.2 | ||
|
||
Version 2.2.2 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release fixes an ongoing issue with Mainnet where validators can stall during consensus processing due to lock contention, preventing ledgers from being validated for up to two minutes. There are no new amendments in this release. | ||
|
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
//------------------------------------------------------------------------------ | ||
/* | ||
This file is part of rippled: https://github.com/ripple/rippled | ||
Copyright (c) 2024 Ripple Labs Inc. | ||
Permission to use, copy, modify, and/or distribute this software for any | ||
purpose with or without fee is hereby granted, provided that the above | ||
copyright notice and this permission notice appear in all copies. | ||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
*/ | ||
//============================================================================== | ||
|
||
#include <test/jtx.h> | ||
|
||
namespace ripple { | ||
namespace test { | ||
|
||
class BookChanges_test : public beast::unit_test::suite | ||
{ | ||
public: | ||
void | ||
testConventionalLedgerInputStrings() | ||
{ | ||
testcase("Specify well-known strings as ledger input"); | ||
jtx::Env env(*this); | ||
Json::Value params, resp; | ||
|
||
// As per convention in XRPL, ledgers can be specified with strings | ||
// "closed", "validated" or "current" | ||
params["ledger"] = "validated"; | ||
resp = env.rpc("json", "book_changes", to_string(params)); | ||
BEAST_EXPECT(!resp[jss::result].isMember(jss::error)); | ||
BEAST_EXPECT(resp[jss::result][jss::status] == "success"); | ||
BEAST_EXPECT(resp[jss::result][jss::validated] == true); | ||
|
||
params["ledger"] = "current"; | ||
resp = env.rpc("json", "book_changes", to_string(params)); | ||
BEAST_EXPECT(!resp[jss::result].isMember(jss::error)); | ||
BEAST_EXPECT(resp[jss::result][jss::status] == "success"); | ||
BEAST_EXPECT(resp[jss::result][jss::validated] == false); | ||
|
||
params["ledger"] = "closed"; | ||
resp = env.rpc("json", "book_changes", to_string(params)); | ||
BEAST_EXPECT(!resp[jss::result].isMember(jss::error)); | ||
BEAST_EXPECT(resp[jss::result][jss::status] == "success"); | ||
|
||
// In the unit-test framework, requesting for "closed" ledgers appears | ||
// to yield "validated" ledgers. This is not new behavior. It is also | ||
// observed in the unit tests for the LedgerHeader class. | ||
BEAST_EXPECT(resp[jss::result][jss::validated] == true); | ||
|
||
// non-conventional ledger input should throw an error | ||
params["ledger"] = "non_conventional_ledger_input"; | ||
resp = env.rpc("json", "book_changes", to_string(params)); | ||
BEAST_EXPECT(resp[jss::result].isMember(jss::error)); | ||
BEAST_EXPECT(resp[jss::result][jss::status] != "success"); | ||
} | ||
|
||
void | ||
testLedgerInputDefaultBehavior() | ||
{ | ||
testcase( | ||
"If ledger_hash or ledger_index is not specified, the behavior " | ||
"must default to the `current` ledger"); | ||
jtx::Env env(*this); | ||
|
||
// As per convention in XRPL, ledgers can be specified with strings | ||
// "closed", "validated" or "current" | ||
Json::Value const resp = | ||
env.rpc("json", "book_changes", to_string(Json::Value{})); | ||
BEAST_EXPECT(!resp[jss::result].isMember(jss::error)); | ||
BEAST_EXPECT(resp[jss::result][jss::status] == "success"); | ||
|
||
// I dislike asserting the below statement, because its dependent on the | ||
// unit-test framework BEAST_EXPECT(resp[jss::result][jss::ledger_index] | ||
// == 3); | ||
} | ||
|
||
void | ||
run() override | ||
{ | ||
testConventionalLedgerInputStrings(); | ||
testLedgerInputDefaultBehavior(); | ||
|
||
// Note: Other aspects of the book_changes rpc are fertile grounds for | ||
// unit-testing purposes. It can be included in future work | ||
} | ||
}; | ||
|
||
BEAST_DEFINE_TESTSUITE(BookChanges, app, ripple); | ||
|
||
} // namespace test | ||
} // namespace ripple |
Oops, something went wrong.