rippled
Loading...
Searching...
No Matches
Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
ripple::ValidatorSite Class Reference

#include <ValidatorSite.h>

Collaboration diagram for ripple::ValidatorSite:
Collaboration graph
[legend]

Classes

struct  Site
 

Public Member Functions

 ValidatorSite (Application &app, std::optional< beast::Journal > j=std::nullopt, std::chrono::seconds timeout=std::chrono::seconds{20})
 
 ~ValidatorSite ()
 
bool load (std::vector< std::string > const &siteURIs)
 Load configured site URIs.
 
void start ()
 Start fetching lists from sites.
 
void join ()
 Wait for current fetches from sites to complete.
 
void stop ()
 Stop fetching lists from sites.
 
Json::Value getJson () const
 Return JSON representation of configured validator sites.
 

Private Types

using error_code = boost::system::error_code
 
using clock_type = std::chrono::system_clock
 
using endpoint_type = boost::asio::ip::tcp::endpoint
 

Private Member Functions

bool load (std::vector< std::string > const &siteURIs, std::lock_guard< std::mutex > const &)
 Load configured site URIs.
 
void setTimer (std::lock_guard< std::mutex > const &, std::lock_guard< std::mutex > const &)
 Queue next site to be fetched lock over site_mutex_ and state_mutex_ required.
 
void onRequestTimeout (std::size_t siteIdx, error_code const &ec)
 request took too long
 
void onTimer (std::size_t siteIdx, error_code const &ec)
 Fetch site whose time has come.
 
void onSiteFetch (boost::system::error_code const &ec, endpoint_type const &endpoint, detail::response_type &&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 makeRequest (std::shared_ptr< Site::Resource > resource, std::size_t siteIdx, std::lock_guard< std::mutex > const &)
 Initiate request to given resource.
 
void parseJsonResponse (std::string const &res, std::size_t siteIdx, std::lock_guard< std::mutex > const &)
 Parse json response from validator list site.
 
std::shared_ptr< Site::ResourceprocessRedirect (detail::response_type &res, std::size_t siteIdx, std::lock_guard< std::mutex > const &)
 Interpret a redirect response.
 
bool missingSite (std::lock_guard< std::mutex > const &)
 If no sites are provided, or a site fails to load, get a list of local cache files from the ValidatorList.
 

Private Attributes

Applicationapp_
 
beast::Journal const j_
 
std::mutex sites_mutex_
 
std::mutex state_mutex_
 
std::condition_variable cv_
 
std::weak_ptr< detail::Workwork_
 
boost::asio::basic_waitable_timer< clock_typetimer_
 
std::atomic< bool > fetching_
 
std::atomic< bool > pending_
 
std::atomic< bool > stopping_
 
std::vector< Sitesites_
 
std::chrono::seconds const requestTimeout_
 

Friends

class Work
 

Detailed Description

Validator Sites

This class manages the set of configured remote sites used to fetch the latest published recommended validator lists.

Lists are fetched at a regular interval. Fetched lists are expected to be in JSON format and contain the following fields:

Definition at line 68 of file ValidatorSite.h.

Member Typedef Documentation

◆ error_code

using ripple::ValidatorSite::error_code = boost::system::error_code
private

Definition at line 73 of file ValidatorSite.h.

◆ clock_type

Definition at line 74 of file ValidatorSite.h.

◆ endpoint_type

using ripple::ValidatorSite::endpoint_type = boost::asio::ip::tcp::endpoint
private

Definition at line 75 of file ValidatorSite.h.

Constructor & Destructor Documentation

◆ ValidatorSite()

ripple::ValidatorSite::ValidatorSite ( Application app,
std::optional< beast::Journal j = std::nullopt,
std::chrono::seconds  timeout = std::chrono::seconds{20} 
)

Definition at line 88 of file ValidatorSite.cpp.

◆ ~ValidatorSite()

ripple::ValidatorSite::~ValidatorSite ( )

Definition at line 102 of file ValidatorSite.cpp.

Member Function Documentation

◆ load() [1/2]

bool ripple::ValidatorSite::load ( std::vector< std::string > const &  siteURIs)

Load configured site URIs.

Parameters
siteURIsList of URIs to fetch published validator lists
Thread Safety

May be called concurrently

Returns
false if an entry is invalid or unparsable

Definition at line 127 of file ValidatorSite.cpp.

◆ start()

void ripple::ValidatorSite::start ( )

Start fetching lists from sites.

This does nothing if list fetching has already started

Thread Safety

May be called concurrently

Definition at line 167 of file ValidatorSite.cpp.

◆ join()

void ripple::ValidatorSite::join ( )

Wait for current fetches from sites to complete.

Thread Safety

May be called concurrently

Definition at line 176 of file ValidatorSite.cpp.

◆ stop()

void ripple::ValidatorSite::stop ( )

Stop fetching lists from sites.

This blocks until list fetching has stopped

Thread Safety

May be called concurrently

Definition at line 183 of file ValidatorSite.cpp.

◆ getJson()

Json::Value ripple::ValidatorSite::getJson ( ) const

Return JSON representation of configured validator sites.

Definition at line 672 of file ValidatorSite.cpp.

◆ load() [2/2]

bool ripple::ValidatorSite::load ( std::vector< std::string > const &  siteURIs,
std::lock_guard< std::mutex > const &  lock_sites 
)
private

Load configured site URIs.

Definition at line 137 of file ValidatorSite.cpp.

◆ setTimer()

void ripple::ValidatorSite::setTimer ( std::lock_guard< std::mutex > const &  site_lock,
std::lock_guard< std::mutex > const &  state_lock 
)
private

Queue next site to be fetched lock over site_mutex_ and state_mutex_ required.

Definition at line 209 of file ValidatorSite.cpp.

◆ onRequestTimeout()

void ripple::ValidatorSite::onRequestTimeout ( std::size_t  siteIdx,
error_code const &  ec 
)
private

request took too long

Definition at line 312 of file ValidatorSite.cpp.

◆ onTimer()

void ripple::ValidatorSite::onTimer ( std::size_t  siteIdx,
error_code const &  ec 
)
private

Fetch site whose time has come.

Definition at line 340 of file ValidatorSite.cpp.

◆ onSiteFetch()

void ripple::ValidatorSite::onSiteFetch ( boost::system::error_code const &  ec,
endpoint_type const &  endpoint,
detail::response_type &&  res,
std::size_t  siteIdx 
)
private

Store latest list fetched from site.

Definition at line 542 of file ValidatorSite.cpp.

◆ onTextFetch()

void ripple::ValidatorSite::onTextFetch ( boost::system::error_code const &  ec,
std::string const &  res,
std::size_t  siteIdx 
)
private

Store latest list fetched from anywhere.

Definition at line 633 of file ValidatorSite.cpp.

◆ makeRequest()

void ripple::ValidatorSite::makeRequest ( std::shared_ptr< Site::Resource resource,
std::size_t  siteIdx,
std::lock_guard< std::mutex > const &  sites_lock 
)
private

Initiate request to given resource.

lock over sites_mutex_ required

Definition at line 231 of file ValidatorSite.cpp.

◆ parseJsonResponse()

void ripple::ValidatorSite::parseJsonResponse ( std::string const &  res,
std::size_t  siteIdx,
std::lock_guard< std::mutex > const &  sites_lock 
)
private

Parse json response from validator list site.

lock over sites_mutex_ required

Definition at line 372 of file ValidatorSite.cpp.

◆ processRedirect()

std::shared_ptr< ValidatorSite::Site::Resource > ripple::ValidatorSite::processRedirect ( detail::response_type res,
std::size_t  siteIdx,
std::lock_guard< std::mutex > const &  sites_lock 
)
private

Interpret a redirect response.

lock over sites_mutex_ required

Definition at line 496 of file ValidatorSite.cpp.

◆ missingSite()

bool ripple::ValidatorSite::missingSite ( std::lock_guard< std::mutex > const &  lock_sites)
private

If no sites are provided, or a site fails to load, get a list of local cache files from the ValidatorList.

Definition at line 120 of file ValidatorSite.cpp.

Friends And Related Symbol Documentation

◆ Work

friend class Work
friend

Definition at line 70 of file ValidatorSite.h.

Member Data Documentation

◆ app_

Application& ripple::ValidatorSite::app_
private

Definition at line 116 of file ValidatorSite.h.

◆ j_

beast::Journal const ripple::ValidatorSite::j_
private

Definition at line 117 of file ValidatorSite.h.

◆ sites_mutex_

std::mutex ripple::ValidatorSite::sites_mutex_
mutableprivate

Definition at line 121 of file ValidatorSite.h.

◆ state_mutex_

std::mutex ripple::ValidatorSite::state_mutex_
mutableprivate

Definition at line 122 of file ValidatorSite.h.

◆ cv_

std::condition_variable ripple::ValidatorSite::cv_
private

Definition at line 124 of file ValidatorSite.h.

◆ work_

std::weak_ptr<detail::Work> ripple::ValidatorSite::work_
private

Definition at line 125 of file ValidatorSite.h.

◆ timer_

boost::asio::basic_waitable_timer<clock_type> ripple::ValidatorSite::timer_
private

Definition at line 126 of file ValidatorSite.h.

◆ fetching_

std::atomic<bool> ripple::ValidatorSite::fetching_
private

Definition at line 129 of file ValidatorSite.h.

◆ pending_

std::atomic<bool> ripple::ValidatorSite::pending_
private

Definition at line 132 of file ValidatorSite.h.

◆ stopping_

std::atomic<bool> ripple::ValidatorSite::stopping_
private

Definition at line 133 of file ValidatorSite.h.

◆ sites_

std::vector<Site> ripple::ValidatorSite::sites_
private

Definition at line 136 of file ValidatorSite.h.

◆ requestTimeout_

std::chrono::seconds const ripple::ValidatorSite::requestTimeout_
private

Definition at line 139 of file ValidatorSite.h.