Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
LoadBalancerInterface.hpp
Go to the documentation of this file.
1
2#pragma once
3
4#include "etl/ETLState.hpp"
5#include "etl/InitialLoadObserverInterface.hpp"
6#include "rpc/Errors.hpp"
7
8#include <boost/asio/spawn.hpp>
9#include <boost/json/object.hpp>
10#include <boost/json/value.hpp>
11#include <org/xrpl/rpc/v1/ledger.pb.h>
12#include <xrpl/proto/org/xrpl/rpc/v1/get_ledger.pb.h>
13
14#include <chrono>
15#include <cstdint>
16#include <expected>
17#include <optional>
18#include <string>
19#include <vector>
20
21namespace etl {
22
27 Cancelled, /*< Indicating the initial load got cancelled by user */
28 Errored, /*< Indicating some error happened during initial ledger load */
29};
30
35using InitialLedgerLoadResult = std::expected<std::vector<std::string>, InitialLedgerLoadError>;
36
41public:
42 using RawLedgerObjectType = org::xrpl::rpc::v1::RawLedgerObject;
43 using GetLedgerResponseType = org::xrpl::rpc::v1::GetLedgerResponse;
44 using OptionalGetLedgerResponseType = std::optional<GetLedgerResponseType>;
45
46 virtual ~LoadBalancerInterface() = default;
47
59 [[nodiscard]] virtual InitialLedgerLoadResult
61 uint32_t sequence,
63 std::chrono::steady_clock::duration retryAfter = std::chrono::seconds{2}
64 ) = 0;
65
79 [[nodiscard]] virtual OptionalGetLedgerResponseType
81 uint32_t ledgerSequence,
82 bool getObjects,
83 bool getObjectNeighbors,
84 std::chrono::steady_clock::duration retryAfter = std::chrono::seconds{2}
85 ) = 0;
86
92 [[nodiscard]] virtual boost::json::value
93 toJson() const = 0;
94
104 [[nodiscard]] virtual std::expected<boost::json::object, rpc::CombinedError>
106 boost::json::object const& request,
107 std::optional<std::string> const& clientIp,
108 bool isAdmin,
109 boost::asio::yield_context yield
110 ) = 0;
111
116 [[nodiscard]] virtual std::optional<ETLState>
117 getETLState() noexcept = 0;
118
125 virtual void
126 stop(boost::asio::yield_context yield) = 0;
127};
128
129} // namespace etl
InitialLedgerLoadError
Represents possible errors for initial ledger load.
Definition LoadBalancerInterface.hpp:26
std::expected< std::vector< std::string >, InitialLedgerLoadError > InitialLedgerLoadResult
The result type of the initial ledger load.
Definition LoadBalancerInterface.hpp:35
An interface for LoadBalancer.
Definition LoadBalancerInterface.hpp:40
virtual std::optional< ETLState > getETLState() noexcept=0
Return state of ETL nodes.
virtual InitialLedgerLoadResult loadInitialLedger(uint32_t sequence, InitialLoadObserverInterface &loader, std::chrono::steady_clock::duration retryAfter=std::chrono::seconds{2})=0
Load the initial ledger, writing data to the queue.
virtual OptionalGetLedgerResponseType fetchLedger(uint32_t ledgerSequence, bool getObjects, bool getObjectNeighbors, std::chrono::steady_clock::duration retryAfter=std::chrono::seconds{2})=0
Fetch data for a specific ledger.
virtual boost::json::value toJson() const =0
Represent the state of this load balancer as a JSON object.
virtual std::expected< boost::json::object, rpc::CombinedError > forwardToRippled(boost::json::object const &request, std::optional< std::string > const &clientIp, bool isAdmin, boost::asio::yield_context yield)=0
Forward a JSON RPC request to a randomly selected rippled node.
virtual void stop(boost::asio::yield_context yield)=0
Stop the load balancer. This will stop all subscription sources.
The interface for observing the initial ledger load.
Definition InitialLoadObserverInterface.hpp:17