xrpld
Loading...
Searching...
No Matches
ValidatorSite.h
1#pragma once
2
3#include <xrpld/app/main/Application.h>
4#include <xrpld/app/misc/ValidatorList.h>
5#include <xrpld/app/misc/detail/Work.h>
6
7#include <xrpl/basics/StringUtilities.h>
8#include <xrpl/beast/utility/Journal.h>
9#include <xrpl/json/json_value.h>
10
11#include <boost/asio.hpp>
12
13#include <atomic>
14#include <chrono>
15#include <condition_variable>
16#include <cstddef>
17#include <memory>
18#include <mutex>
19#include <optional>
20#include <string>
21#include <vector>
22
23namespace xrpl {
24
56{
57 friend class Work;
58
59private:
60 using error_code = boost::system::error_code;
62 using endpoint_type = boost::asio::ip::tcp::endpoint;
63
108
111
112 // If both mutex are to be locked at the same time, `sitesMutex_` must be
113 // locked before `stateMutex_` or we may deadlock.
116
119 boost::asio::basic_waitable_timer<clock_type> timer_;
120
121 // A list is currently being fetched from a site
123
124 // One or more lists are due to be fetched
127
128 // The configured list of URIs for fetching lists
130
131 // time to allow for requests to complete
133
134public:
136 Application& app,
137 std::optional<beast::Journal> j = std::nullopt,
140
152 bool
153 load(std::vector<std::string> const& siteURIs);
154
164 void
165 start();
166
174 void
175 join();
176
186 void
187 stop();
188
193 getJson() const;
194
195private:
199 bool
201
206 void
208
212 void
213 onRequestTimeout(std::size_t siteIdx, error_code const& ec);
214
218 void
219 onTimer(std::size_t siteIdx, error_code const& ec);
220
224 void
226 boost::system::error_code const& ec,
227 endpoint_type const& endpoint,
228 detail::response_type const& res,
229 std::size_t siteIdx);
230
234 void
235 onTextFetch(boost::system::error_code const& ec, std::string const& res, std::size_t siteIdx);
236
241 void
244 std::size_t siteIdx,
246
251 void
253 std::string const& res,
254 std::size_t siteIdx,
256
263 detail::response_type const& res,
264 std::size_t siteIdx,
266
271 bool
273};
274
275} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:44
Represents a JSON value.
Definition json_value.h:117
bool missingSite(std::scoped_lock< std::mutex > const &)
If no sites are provided, or a site fails to load, get a list of local cache files from the Validator...
void onRequestTimeout(std::size_t siteIdx, error_code const &ec)
request took too long
std::chrono::system_clock clock_type
json::Value getJson() const
Return JSON representation of configured validator sites.
bool load(std::vector< std::string > const &siteURIs)
Load configured site URIs.
void join()
Wait for current fetches from sites to complete.
std::atomic< bool > pending_
std::shared_ptr< Site::Resource > processRedirect(detail::response_type const &res, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
Interpret a redirect response.
std::atomic< bool > fetching_
void setTimer(std::scoped_lock< std::mutex > const &, std::scoped_lock< std::mutex > const &)
Queue next site to be fetched lock over site_mutex_ and state_mutex_ required.
void start()
Start fetching lists from sites.
std::chrono::seconds const requestTimeout_
boost::asio::basic_waitable_timer< clock_type > timer_
void makeRequest(std::shared_ptr< Site::Resource > resource, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
Initiate request to given resource.
boost::asio::ip::tcp::endpoint endpoint_type
std::condition_variable cv_
beast::Journal const j_
std::atomic< bool > stopping_
void parseJsonResponse(std::string const &res, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
Parse json response from validator list site.
ValidatorSite(Application &app, std::optional< beast::Journal > j=std::nullopt, std::chrono::seconds timeout=std::chrono::seconds{20})
boost::system::error_code error_code
std::weak_ptr< detail::Work > work_
void onSiteFetch(boost::system::error_code const &ec, endpoint_type const &endpoint, detail::response_type const &res, std::size_t siteIdx)
Store latest list fetched from site.
void onTextFetch(boost::system::error_code const &ec, std::string const &res, std::size_t siteIdx)
Store latest list fetched from anywhere.
void onTimer(std::size_t siteIdx, error_code const &ec)
Fetch site whose time has come.
void stop()
Stop fetching lists from sites.
std::vector< Site > sites_
boost::beast::http::response< boost::beast::http::string_body > response_type
Definition Work.h:8
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
ListDisposition
clock_type::time_point refreshed
std::shared_ptr< Resource > startingResource
the resource to request at <timer> intervals.
endpoint_type lastRequestEndpoint
clock_type::time_point nextRefresh
std::shared_ptr< Resource > activeResource
the active resource being requested.
std::chrono::minutes refreshInterval
std::shared_ptr< Resource > loadedResource
the original uri as loaded from config
std::optional< Status > lastRefreshStatus