docs: Build docs using doxygen 1.14.0 (#2681)

This commit is contained in:
Ayaz Salikhov
2025-10-07 18:48:19 +01:00
committed by GitHub
parent 213752862c
commit 33802f475f
24 changed files with 63 additions and 172 deletions

View File

@@ -3,7 +3,9 @@ import itertools
import json import json
LINUX_OS = ["heavy", "heavy-arm64"] LINUX_OS = ["heavy", "heavy-arm64"]
LINUX_CONTAINERS = ['{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }'] LINUX_CONTAINERS = [
'{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
]
LINUX_COMPILERS = ["gcc", "clang"] LINUX_COMPILERS = ["gcc", "clang"]
MACOS_OS = ["macos15"] MACOS_OS = ["macos15"]

View File

@@ -45,7 +45,7 @@ jobs:
build_type: [Release, Debug] build_type: [Release, Debug]
container: container:
[ [
'{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }', '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }',
] ]
static: [true] static: [true]
@@ -75,7 +75,7 @@ jobs:
uses: ./.github/workflows/reusable-build.yml uses: ./.github/workflows/reusable-build.yml
with: with:
runs_on: heavy runs_on: heavy
container: '{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
conan_profile: gcc conan_profile: gcc
build_type: Debug build_type: Debug
download_ccache: true download_ccache: true
@@ -94,7 +94,7 @@ jobs:
uses: ./.github/workflows/reusable-build.yml uses: ./.github/workflows/reusable-build.yml
with: with:
runs_on: heavy runs_on: heavy
container: '{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
conan_profile: gcc conan_profile: gcc
build_type: Release build_type: Release
download_ccache: true download_ccache: true
@@ -111,7 +111,7 @@ jobs:
needs: build-and-test needs: build-and-test
runs-on: heavy runs-on: heavy
container: container:
image: ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4

View File

@@ -17,7 +17,7 @@ jobs:
name: Build Clio / `libXRPL ${{ github.event.client_payload.version }}` name: Build Clio / `libXRPL ${{ github.event.client_payload.version }}`
runs-on: heavy runs-on: heavy
container: container:
image: ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -67,7 +67,7 @@ jobs:
needs: build needs: build
runs-on: heavy runs-on: heavy
container: container:
image: ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
steps: steps:
- uses: actions/download-artifact@v5 - uses: actions/download-artifact@v5

View File

@@ -27,7 +27,7 @@ jobs:
if: github.event_name != 'push' || contains(github.event.head_commit.message, 'clang-tidy auto fixes') if: github.event_name != 'push' || contains(github.event.head_commit.message, 'clang-tidy auto fixes')
runs-on: heavy runs-on: heavy
container: container:
image: ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
permissions: permissions:
contents: write contents: write

View File

@@ -14,7 +14,7 @@ jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
steps: steps:
- name: Checkout - name: Checkout

View File

@@ -39,17 +39,17 @@ jobs:
conan_profile: gcc conan_profile: gcc
build_type: Release build_type: Release
static: true static: true
container: '{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
- os: heavy - os: heavy
conan_profile: gcc conan_profile: gcc
build_type: Debug build_type: Debug
static: true static: true
container: '{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
- os: heavy - os: heavy
conan_profile: gcc.ubsan conan_profile: gcc.ubsan
build_type: Release build_type: Release
static: false static: false
container: '{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
uses: ./.github/workflows/reusable-build-test.yml uses: ./.github/workflows/reusable-build-test.yml
with: with:
@@ -73,7 +73,7 @@ jobs:
include: include:
- os: heavy - os: heavy
conan_profile: clang conan_profile: clang
container: '{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
static: true static: true
- os: macos15 - os: macos15
conan_profile: apple-clang conan_profile: apple-clang

View File

@@ -11,4 +11,4 @@ jobs:
uses: XRPLF/actions/.github/workflows/pre-commit.yml@afbcbdafbe0ce5439492fb87eda6441371086386 uses: XRPLF/actions/.github/workflows/pre-commit.yml@afbcbdafbe0ce5439492fb87eda6441371086386
with: with:
runs_on: heavy runs_on: heavy
container: '{ "image": "ghcr.io/xrplf/clio-pre-commit:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-pre-commit:213752862ca95ecadeb59a6176c3db91a7864b3e" }'

View File

@@ -29,7 +29,7 @@ jobs:
conan_profile: gcc conan_profile: gcc
build_type: Release build_type: Release
static: true static: true
container: '{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
uses: ./.github/workflows/reusable-build-test.yml uses: ./.github/workflows/reusable-build-test.yml
with: with:

View File

@@ -42,7 +42,7 @@ jobs:
release: release:
runs-on: heavy runs-on: heavy
container: container:
image: ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
env: env:
GH_REPO: ${{ github.repository }} GH_REPO: ${{ github.repository }}
GH_TOKEN: ${{ github.token }} GH_TOKEN: ${{ github.token }}

View File

@@ -44,7 +44,7 @@ jobs:
uses: ./.github/workflows/reusable-build-test.yml uses: ./.github/workflows/reusable-build-test.yml
with: with:
runs_on: heavy runs_on: heavy
container: '{ "image": "ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe" }' container: '{ "image": "ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e" }'
download_ccache: false download_ccache: false
upload_ccache: false upload_ccache: false
conan_profile: ${{ matrix.compiler }}${{ matrix.sanitizer_ext }} conan_profile: ${{ matrix.compiler }}${{ matrix.sanitizer_ext }}

View File

@@ -9,7 +9,7 @@ The image is based on Ubuntu 20.04 and contains:
- Clang 19 - Clang 19
- ClangBuildAnalyzer 1.6.0 - ClangBuildAnalyzer 1.6.0
- Conan 2.20.1 - Conan 2.20.1
- Doxygen 1.12 - Doxygen 1.14
- GCC 15.2.0 - GCC 15.2.0
- GDB 16.3 - GDB 16.3
- gh 2.74 - gh 2.74

View File

@@ -1,6 +1,6 @@
services: services:
clio_develop: clio_develop:
image: ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe image: ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
volumes: volumes:
- clio_develop_conan_data:/root/.conan2/p - clio_develop_conan_data:/root/.conan2/p
- clio_develop_ccache:/root/.ccache - clio_develop_ccache:/root/.ccache

View File

@@ -15,6 +15,7 @@ EXTRACT_ANON_NSPACES = NO
SORT_MEMBERS_CTORS_1ST = YES SORT_MEMBERS_CTORS_1ST = YES
INPUT = ${SOURCE}/src INPUT = ${SOURCE}/src
USE_MDFILE_AS_MAINPAGE = ${SOURCE}/src/README.md
EXCLUDE_SYMBOLS = ${EXCLUDES} EXCLUDE_SYMBOLS = ${EXCLUDES}
RECURSIVE = YES RECURSIVE = YES
HAVE_DOT = ${USE_DOT} HAVE_DOT = ${USE_DOT}

View File

@@ -177,7 +177,7 @@ There are several CMake options you can use to customize the build:
### Generating API docs for Clio ### Generating API docs for Clio
The API documentation for Clio is generated by [Doxygen](https://www.doxygen.nl/index.html). If you want to generate the API documentation when building Clio, make sure to install Doxygen 1.12.0 on your system. The API documentation for Clio is generated by [Doxygen](https://www.doxygen.nl/index.html). If you want to generate the API documentation when building Clio, make sure to install Doxygen 1.14.0 on your system.
To generate the API docs, please use CMake option `-Ddocs=ON` as described above and build the `docs` target. To generate the API docs, please use CMake option `-Ddocs=ON` as described above and build the `docs` target.
@@ -191,7 +191,7 @@ Open the `index.html` file in your browser to see the documentation pages.
It is also possible to build Clio using [Docker](https://www.docker.com/) if you don't want to install all the dependencies on your machine. It is also possible to build Clio using [Docker](https://www.docker.com/) if you don't want to install all the dependencies on your machine.
```sh ```sh
docker run -it ghcr.io/xrplf/clio-ci:3c1811233a2d3222cbb70ce17bae92c448756bfe docker run -it ghcr.io/xrplf/clio-ci:213752862ca95ecadeb59a6176c3db91a7864b3e
git clone https://github.com/XRPLF/clio git clone https://github.com/XRPLF/clio
cd clio cd clio
``` ```

View File

@@ -36,19 +36,19 @@ EOF
exit 0 exit 0
fi fi
# Check version of doxygen is at least 1.12 # Check version of doxygen is at least 1.14
version=$($DOXYGEN --version | grep -o '[0-9\.]*') version=$($DOXYGEN --version | grep -o '[0-9\.]*')
if [[ "1.12.0" > "$version" ]]; then if [[ "1.14.0" > "$version" ]]; then
# No hard error if doxygen version is not the one we want - let CI deal with it # No hard error if doxygen version is not the one we want - let CI deal with it
cat <<EOF cat <<EOF
ERROR ERROR
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
A minimum of version 1.12 of `which doxygen` is required. A minimum of version 1.14 of `which doxygen` is required.
Your version is $version. Please upgrade it for next time. Your version is $version. Please upgrade it.
Your changes may fail to pass CI once pushed. Your changes may fail CI checks.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
EOF EOF

20
src/README.md Normal file
View File

@@ -0,0 +1,20 @@
# Clio API server
## Introduction
Clio is an XRP Ledger API server optimized for RPC calls over WebSocket or JSON-RPC.
It stores validated historical ledger and transaction data in a more space efficient format, and uses up to 4 times
less space than [rippled](https://github.com/XRPLF/rippled).
Clio can be configured to store data in [Apache Cassandra](https://cassandra.apache.org/_/index.html) or
[ScyllaDB](https://www.scylladb.com/), enabling scalable read throughput. Multiple Clio nodes can share
access to the same dataset, which allows for a highly available cluster of Clio nodes without the need for redundant
data storage or computation.
## Develop
As you prepare to develop code for Clio, please be sure you are aware of our current
[Contribution guidelines](https://github.com/XRPLF/clio/blob/develop/CONTRIBUTING.md).
Read about @ref "rpc" carefully to know more about writing your own handlers for Clio.

View File

@@ -1,4 +1,6 @@
# Backend # Backend
@page "backend" Backend
The backend of Clio is responsible for handling the proper reading and writing of past ledger data from and to a given database. Currently, Cassandra and ScyllaDB are the only supported databases that are production-ready. The backend of Clio is responsible for handling the proper reading and writing of past ledger data from and to a given database. Currently, Cassandra and ScyllaDB are the only supported databases that are production-ready.

View File

@@ -146,9 +146,6 @@ public:
*/ */
CassandraBackendFamily(CassandraBackendFamily&&) = delete; CassandraBackendFamily(CassandraBackendFamily&&) = delete;
/**
* @copydoc BackendInterface::fetchAccountTransactions
*/
TransactionsAndCursor TransactionsAndCursor
fetchAccountTransactions( fetchAccountTransactions(
ripple::AccountID const& account, ripple::AccountID const& account,
@@ -217,18 +214,12 @@ public:
return {txns, {}}; return {txns, {}};
} }
/**
* @copydoc BackendInterface::waitForWritesToFinish
*/
void void
waitForWritesToFinish() override waitForWritesToFinish() override
{ {
executor_.sync(); executor_.sync();
} }
/**
* @copydoc BackendInterface::writeLedger
*/
void void
writeLedger(ripple::LedgerHeader const& ledgerHeader, std::string&& blob) override writeLedger(ripple::LedgerHeader const& ledgerHeader, std::string&& blob) override
{ {
@@ -239,9 +230,6 @@ public:
ledgerSequence_ = ledgerHeader.seq; ledgerSequence_ = ledgerHeader.seq;
} }
/**
* @copydoc BackendInterface::fetchLatestLedgerSequence
*/
std::optional<std::uint32_t> std::optional<std::uint32_t>
fetchLatestLedgerSequence(boost::asio::yield_context yield) const override fetchLatestLedgerSequence(boost::asio::yield_context yield) const override
{ {
@@ -262,9 +250,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::fetchLedgerBySequence
*/
std::optional<ripple::LedgerHeader> std::optional<ripple::LedgerHeader>
fetchLedgerBySequence(std::uint32_t const sequence, boost::asio::yield_context yield) const override fetchLedgerBySequence(std::uint32_t const sequence, boost::asio::yield_context yield) const override
{ {
@@ -292,9 +277,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::fetchLedgerByHash
*/
std::optional<ripple::LedgerHeader> std::optional<ripple::LedgerHeader>
fetchLedgerByHash(ripple::uint256 const& hash, boost::asio::yield_context yield) const override fetchLedgerByHash(ripple::uint256 const& hash, boost::asio::yield_context yield) const override
{ {
@@ -315,9 +297,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::hardFetchLedgerRange(boost::asio::yield_context) const
*/
std::optional<LedgerRange> std::optional<LedgerRange>
hardFetchLedgerRange(boost::asio::yield_context yield) const override hardFetchLedgerRange(boost::asio::yield_context yield) const override
{ {
@@ -356,9 +335,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::fetchAllTransactionsInLedger
*/
std::vector<TransactionAndMetadata> std::vector<TransactionAndMetadata>
fetchAllTransactionsInLedger(std::uint32_t const ledgerSequence, boost::asio::yield_context yield) const override fetchAllTransactionsInLedger(std::uint32_t const ledgerSequence, boost::asio::yield_context yield) const override
{ {
@@ -366,9 +342,6 @@ public:
return fetchTransactions(hashes, yield); return fetchTransactions(hashes, yield);
} }
/**
* @copydoc BackendInterface::fetchAllTransactionHashesInLedger
*/
std::vector<ripple::uint256> std::vector<ripple::uint256>
fetchAllTransactionHashesInLedger( fetchAllTransactionHashesInLedger(
std::uint32_t const ledgerSequence, std::uint32_t const ledgerSequence,
@@ -402,9 +375,6 @@ public:
return hashes; return hashes;
} }
/**
* @copydoc BackendInterface::fetchNFT
*/
std::optional<NFT> std::optional<NFT>
fetchNFT( fetchNFT(
ripple::uint256 const& tokenID, ripple::uint256 const& tokenID,
@@ -444,9 +414,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::fetchNFTTransactions
*/
TransactionsAndCursor TransactionsAndCursor
fetchNFTTransactions( fetchNFTTransactions(
ripple::uint256 const& tokenID, ripple::uint256 const& tokenID,
@@ -518,9 +485,6 @@ public:
return {txns, {}}; return {txns, {}};
} }
/**
* @copydoc BackendInterface::fetchMPTHolders
*/
MPTHoldersAndCursor MPTHoldersAndCursor
fetchMPTHolders( fetchMPTHolders(
ripple::uint192 const& mptID, ripple::uint192 const& mptID,
@@ -560,9 +524,6 @@ public:
return {mptObjects, {}}; return {mptObjects, {}};
} }
/**
* @copydoc BackendInterface::doFetchLedgerObject
*/
std::optional<Blob> std::optional<Blob>
doFetchLedgerObject( doFetchLedgerObject(
ripple::uint256 const& key, ripple::uint256 const& key,
@@ -585,9 +546,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::doFetchLedgerObjectSeq
*/
std::optional<std::uint32_t> std::optional<std::uint32_t>
doFetchLedgerObjectSeq( doFetchLedgerObjectSeq(
ripple::uint256 const& key, ripple::uint256 const& key,
@@ -609,9 +567,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::fetchTransaction
*/
std::optional<TransactionAndMetadata> std::optional<TransactionAndMetadata>
fetchTransaction(ripple::uint256 const& hash, boost::asio::yield_context yield) const override fetchTransaction(ripple::uint256 const& hash, boost::asio::yield_context yield) const override
{ {
@@ -629,9 +584,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::doFetchSuccessorKey
*/
std::optional<ripple::uint256> std::optional<ripple::uint256>
doFetchSuccessorKey( doFetchSuccessorKey(
ripple::uint256 key, ripple::uint256 key,
@@ -654,9 +606,6 @@ public:
return std::nullopt; return std::nullopt;
} }
/**
* @copydoc BackendInterface::fetchTransactions
*/
std::vector<TransactionAndMetadata> std::vector<TransactionAndMetadata>
fetchTransactions(std::vector<ripple::uint256> const& hashes, boost::asio::yield_context yield) const override fetchTransactions(std::vector<ripple::uint256> const& hashes, boost::asio::yield_context yield) const override
{ {
@@ -698,9 +647,6 @@ public:
return results; return results;
} }
/**
* @copydoc BackendInterface::doFetchLedgerObjects
*/
std::vector<Blob> std::vector<Blob>
doFetchLedgerObjects( doFetchLedgerObjects(
std::vector<ripple::uint256> const& keys, std::vector<ripple::uint256> const& keys,
@@ -741,9 +687,6 @@ public:
return results; return results;
} }
/**
* @copydoc BackendInterface::fetchLedgerDiff
*/
std::vector<LedgerObject> std::vector<LedgerObject>
fetchLedgerDiff(std::uint32_t const ledgerSequence, boost::asio::yield_context yield) const override fetchLedgerDiff(std::uint32_t const ledgerSequence, boost::asio::yield_context yield) const override
{ {
@@ -789,9 +732,6 @@ public:
return results; return results;
} }
/**
* @copydoc BackendInterface::fetchMigratorStatus
*/
std::optional<std::string> std::optional<std::string>
fetchMigratorStatus(std::string const& migratorName, boost::asio::yield_context yield) const override fetchMigratorStatus(std::string const& migratorName, boost::asio::yield_context yield) const override
{ {
@@ -812,9 +752,6 @@ public:
return {}; return {};
} }
/**
* @copydoc BackendInterface::fetchClioNodesData
*/
std::expected<std::vector<std::pair<boost::uuids::uuid, std::string>>, std::string> std::expected<std::vector<std::pair<boost::uuids::uuid, std::string>>, std::string>
fetchClioNodesData(boost::asio::yield_context yield) const override fetchClioNodesData(boost::asio::yield_context yield) const override
{ {
@@ -831,9 +768,6 @@ public:
return result; return result;
} }
/**
* @copydoc BackendInterface::doWriteLedgerObject
*/
void void
doWriteLedgerObject(std::string&& key, std::uint32_t const seq, std::string&& blob) override doWriteLedgerObject(std::string&& key, std::uint32_t const seq, std::string&& blob) override
{ {
@@ -845,9 +779,6 @@ public:
executor_.write(schema_->insertObject, std::move(key), seq, std::move(blob)); executor_.write(schema_->insertObject, std::move(key), seq, std::move(blob));
} }
/**
* @copydoc BackendInterface::writeSuccessor
*/
void void
writeSuccessor(std::string&& key, std::uint32_t const seq, std::string&& successor) override writeSuccessor(std::string&& key, std::uint32_t const seq, std::string&& successor) override
{ {
@@ -859,9 +790,6 @@ public:
executor_.write(schema_->insertSuccessor, std::move(key), seq, std::move(successor)); executor_.write(schema_->insertSuccessor, std::move(key), seq, std::move(successor));
} }
/**
* @copydoc BackendInterface::writeAccountTransactions
*/
void void
writeAccountTransactions(std::vector<AccountTransactionsData> data) override writeAccountTransactions(std::vector<AccountTransactionsData> data) override
{ {
@@ -881,9 +809,6 @@ public:
executor_.write(std::move(statements)); executor_.write(std::move(statements));
} }
/**
* @copydoc BackendInterface::writeAccountTransaction
*/
void void
writeAccountTransaction(AccountTransactionsData record) override writeAccountTransaction(AccountTransactionsData record) override
{ {
@@ -901,9 +826,6 @@ public:
executor_.write(std::move(statements)); executor_.write(std::move(statements));
} }
/**
* @copydoc BackendInterface::writeNFTTransactions
*/
void void
writeNFTTransactions(std::vector<NFTTransactionsData> const& data) override writeNFTTransactions(std::vector<NFTTransactionsData> const& data) override
{ {
@@ -919,9 +841,6 @@ public:
executor_.write(std::move(statements)); executor_.write(std::move(statements));
} }
/**
* @copydoc BackendInterface::writeTransaction
*/
void void
writeTransaction( writeTransaction(
std::string&& hash, std::string&& hash,
@@ -939,9 +858,6 @@ public:
); );
} }
/**
* @copydoc BackendInterface::writeNFTs
*/
void void
writeNFTs(std::vector<NFTsData> const& data) override writeNFTs(std::vector<NFTsData> const& data) override
{ {
@@ -980,9 +896,6 @@ public:
executor_.writeEach(std::move(statements)); executor_.writeEach(std::move(statements));
} }
/**
* @copydoc BackendInterface::writeNFTs
*/
void void
writeMPTHolders(std::vector<MPTHolderData> const& data) override writeMPTHolders(std::vector<MPTHolderData> const& data) override
{ {
@@ -994,9 +907,6 @@ public:
executor_.write(std::move(statements)); executor_.write(std::move(statements));
} }
/**
* @copydoc BackendInterface::startWrites
*/
void void
startWrites() const override startWrites() const override
{ {
@@ -1004,9 +914,6 @@ public:
// probably was used in PG to start a transaction or smth. // probably was used in PG to start a transaction or smth.
} }
/**
* @copydoc BackendInterface::writeMigratorStatus
*/
void void
writeMigratorStatus(std::string const& migratorName, std::string const& status) override writeMigratorStatus(std::string const& migratorName, std::string const& status) override
{ {
@@ -1015,27 +922,18 @@ public:
); );
} }
/**
* @copydoc BackendInterface::writeNodeMessage
*/
void void
writeNodeMessage(boost::uuids::uuid const& uuid, std::string message) override writeNodeMessage(boost::uuids::uuid const& uuid, std::string message) override
{ {
executor_.writeSync(schema_->updateClioNodeMessage, data::cassandra::Text{std::move(message)}, uuid); executor_.writeSync(schema_->updateClioNodeMessage, data::cassandra::Text{std::move(message)}, uuid);
} }
/**
* @copydoc BackendInterface::isTooBusy
*/
bool bool
isTooBusy() const override isTooBusy() const override
{ {
return executor_.isTooBusy(); return executor_.isTooBusy();
} }
/**
* @copydoc BackendInterface::stats
*/
boost::json::object boost::json::object
stats() const override stats() const override
{ {

View File

@@ -1,5 +1,7 @@
# ETL subsystem # ETL subsystem
@page "etl" ETL subsystem
A single Clio node has one or more ETL sources specified in the config file. Clio subscribes to the `ledgers` stream of each of the ETL sources. The stream sends a message whenever a new ledger is validated. A single Clio node has one or more ETL sources specified in the config file. Clio subscribes to the `ledgers` stream of each of the ETL sources. The stream sends a message whenever a new ledger is validated.
Upon receiving a message on the stream, Clio fetches the data associated with the newly validated ledger from one of the ETL sources. The fetch is performed via a gRPC request called `GetLedger`. This request returns the ledger header, transactions and metadata blobs, and every ledger object added/modified/deleted as part of this ledger. The ETL subsystem then writes all of this data to the databases, and moves on to the next ledger. Upon receiving a message on the stream, Clio fetches the data associated with the newly validated ledger from one of the ETL sources. The fetch is performed via a gRPC request called `GetLedger`. This request returns the ledger header, transactions and metadata blobs, and every ledger object added/modified/deleted as part of this ledger. The ETL subsystem then writes all of this data to the databases, and moves on to the next ledger.

View File

@@ -1,42 +0,0 @@
//------------------------------------------------------------------------------
/*
This file is part of clio: https://github.com/XRPLF/clio
Copyright (c) 2023, the clio developers.
Permission to use, copy, modify, and 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.
*/
//==============================================================================
/**
* @mainpage Clio API server
*
* @section intro Introduction
*
* Clio is an XRP Ledger API server optimized for RPC calls over WebSocket or JSON-RPC.
*
* It stores validated historical ledger and transaction data in a more space efficient format, and uses up to 4 times
* less space than <A HREF="https://github.com/XRPLF/rippled">rippled</A>.
*
* Clio can be configured to store data in <A HREF="https://cassandra.apache.org/_/index.html">Apache Cassandra</A> or
* <A HREF="https://www.scylladb.com/">ScyllaDB</A>, enabling scalable read throughput. Multiple Clio nodes can share
* access to the same dataset, which allows for a highly available cluster of Clio nodes without the need for redundant
* data storage or computation.
*
* @section Develop
*
* As you prepare to develop code for Clio, please be sure you are aware of our current
* <A HREF="https://github.com/XRPLF/clio/blob/develop/CONTRIBUTING.md">Contribution guidelines</A>.
*
* Read [rpc/README.md](../rpc/README.md) carefully to know more about writing your own handlers for
* Clio.
*/

View File

@@ -1,5 +1,7 @@
# Clio Migration # Clio Migration
@page "migration" Clio Migration
Clio maintains the off-chain data of XRPL and multiple indexes tables to powering complex queries. To simplify the creation of index tables, this migration framework handles the process of database change and facilitates the migration of historical data seamlessly. Clio maintains the off-chain data of XRPL and multiple indexes tables to powering complex queries. To simplify the creation of index tables, this migration framework handles the process of database change and facilitates the migration of historical data seamlessly.
## Command Line Usage ## Command Line Usage

View File

@@ -1,4 +1,6 @@
# RPC subsystem # RPC subsystem
@page "rpc" RPC subsystem
The RPC subsystem is where the common framework for handling incoming JSON requests is implemented. The RPC subsystem is where the common framework for handling incoming JSON requests is implemented.

View File

@@ -1,5 +1,7 @@
# Async framework # Async framework
@page "async" Async framework
## Introduction ## Introduction
Clio uses threads intensively. Multiple parts of Clio were/are implemented by running a `std::thread` with some sort of loop inside. Every time this pattern is reimplemented in a slightly different way. State is managed using asynchronous queues, atomic flags, mutexes and other low level primitives. Clio uses threads intensively. Multiple parts of Clio were/are implemented by running a `std::thread` with some sort of loop inside. Every time this pattern is reimplemented in a slightly different way. State is managed using asynchronous queues, atomic flags, mutexes and other low level primitives.

View File

@@ -1,5 +1,7 @@
# Web server subsystem # Web server subsystem
@page "web" Web server subsystem
This folder contains all of the classes for running the web server. This folder contains all of the classes for running the web server.
The web server subsystem: The web server subsystem: