diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 72eb4687232..37f884b578f 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -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) + + + +## 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 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 . + +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 + + +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: + + # 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. diff --git a/src/libxrpl/protocol/BuildInfo.cpp b/src/libxrpl/protocol/BuildInfo.cpp index 3a05f512455..1d983a58576 100644 --- a/src/libxrpl/protocol/BuildInfo.cpp +++ b/src/libxrpl/protocol/BuildInfo.cpp @@ -33,7 +33,7 @@ namespace BuildInfo { // and follow the format described at http://semver.org/ //------------------------------------------------------------------------------ // clang-format off -char const* const versionString = "2.3.0-b2" +char const* const versionString = "2.3.0-b3" // clang-format on #if defined(DEBUG) || defined(SANITIZER) diff --git a/src/libxrpl/protocol/tokens.cpp b/src/libxrpl/protocol/tokens.cpp index 454ed803f75..ccae1fb8ed2 100644 --- a/src/libxrpl/protocol/tokens.cpp +++ b/src/libxrpl/protocol/tokens.cpp @@ -91,7 +91,7 @@ algorithm that converts a number to coefficients from base B2. There is a useful shortcut that can be used if one of the bases is a power of the other base. If B1 == B2^G, then each coefficient from base B1 can be -converted to base B2 independently to create a a group of "G" B2 coefficient. +converted to base B2 independently to create a group of "G" B2 coefficient. These coefficients can be simply concatenated together. Since 16 == 2^4, this property is what makes base 16 useful when dealing with binary numbers. For example consider converting the base 16 number "93" to binary. The base 16 diff --git a/src/test/csf/README.md b/src/test/csf/README.md index ff6bdc5dfac..a4b69abab57 100644 --- a/src/test/csf/README.md +++ b/src/test/csf/README.md @@ -144,7 +144,7 @@ sim.collectors.add(simDur); ``` The next lines add a single collector to the simulation. The -`SimDurationCollector` is a a simple example collector which tracks the total +`SimDurationCollector` is a simple example collector which tracks the total duration of the simulation. More generally, a collector is any class that implements `void on(NodeID, SimTime, Event)` for all [Events](./events.h) emitted by a Peer. Events are arbitrary types used to indicate some action or diff --git a/src/test/csf/random.h b/src/test/csf/random.h index 5a512400704..e78bbf515be 100644 --- a/src/test/csf/random.h +++ b/src/test/csf/random.h @@ -121,7 +121,7 @@ makeSelector(Iter first, Iter last, std::vector const& w, Generator& g) } //------------------------------------------------------------------------------ -// Additional distributions of interest not defined in in +// Additional distributions of interest not defined in /** Constant "distribution" that always returns the same value */ diff --git a/src/test/ledger/Directory_test.cpp b/src/test/ledger/Directory_test.cpp index 4904b6e6fbf..bea394f2f36 100644 --- a/src/test/ledger/Directory_test.cpp +++ b/src/test/ledger/Directory_test.cpp @@ -29,7 +29,7 @@ namespace test { struct Directory_test : public beast::unit_test::suite { - // Map [0-15576] into a a unique 3 letter currency code + // Map [0-15576] into a unique 3 letter currency code std::string currcode(std::size_t i) { diff --git a/src/xrpld/app/main/DBInit.h b/src/xrpld/app/main/DBInit.h index 528f2e8105e..6eaf19671ac 100644 --- a/src/xrpld/app/main/DBInit.h +++ b/src/xrpld/app/main/DBInit.h @@ -77,7 +77,7 @@ inline constexpr auto TxDBName{"transaction.db"}; inline constexpr std::array TxDBPragma { "PRAGMA page_size=4096;", "PRAGMA journal_size_limit=1582080;", - "PRAGMA max_page_count=2147483646;", + "PRAGMA max_page_count=4294967294;", #if (ULONG_MAX > UINT_MAX) && !defined(NO_SQLITE_MMAP) "PRAGMA mmap_size=17179869184;" diff --git a/src/xrpld/app/tx/detail/Transactor.cpp b/src/xrpld/app/tx/detail/Transactor.cpp index 6ae8be8a67f..18e11415c0a 100644 --- a/src/xrpld/app/tx/detail/Transactor.cpp +++ b/src/xrpld/app/tx/detail/Transactor.cpp @@ -635,7 +635,7 @@ Transactor::checkMultiSign(PreclaimContext const& ctx) calcAccountID(PublicKey(makeSlice(spk))); // Verify that the signingAcctID and the signingAcctIDFromPubKey - // belong together. Here is are the rules: + // belong together. Here are the rules: // // 1. "Phantom account": an account that is not in the ledger // A. If signingAcctID == signingAcctIDFromPubKey and the