rippled
Classes | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
ripple::ValidatorSite Class Reference
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. More...
 
void start ()
 Start fetching lists from sites. More...
 
void join ()
 Wait for current fetches from sites to complete. More...
 
void stop ()
 Stop fetching lists from sites. More...
 
Json::Value getJson () const
 Return JSON representation of configured validator sites. More...
 

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. More...
 
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. More...
 
void onRequestTimeout (std::size_t siteIdx, error_code const &ec)
 request took too long More...
 
void onTimer (std::size_t siteIdx, error_code const &ec)
 Fetch site whose time has come. More...
 
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. More...
 
void onTextFetch (boost::system::error_code const &ec, std::string const &res, std::size_t siteIdx)
 Store latest list fetched from anywhere. More...
 
void makeRequest (std::shared_ptr< Site::Resource > resource, std::size_t siteIdx, std::lock_guard< std::mutex > const &)
 Initiate request to given resource. More...
 
void parseJsonResponse (std::string const &res, std::size_t siteIdx, std::lock_guard< std::mutex > const &)
 Parse json response from validator list site. More...
 
std::shared_ptr< Site::ResourceprocessRedirect (detail::response_type &res, std::size_t siteIdx, std::lock_guard< std::mutex > const &)
 Interpret a redirect response. More...
 
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. More...
 

Private Attributes

Applicationapp_
 
const beast::Journal 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_
 
const std::chrono::seconds 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 69 of file ValidatorSite.h.

Member Typedef Documentation

◆ error_code

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

Definition at line 74 of file ValidatorSite.h.

◆ clock_type

Definition at line 75 of file ValidatorSite.h.

◆ endpoint_type

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

Definition at line 76 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 667 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 540 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 628 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 494 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 Function Documentation

◆ Work

friend class Work
friend

Definition at line 71 of file ValidatorSite.h.

Member Data Documentation

◆ app_

Application& ripple::ValidatorSite::app_
private

Definition at line 117 of file ValidatorSite.h.

◆ j_

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

Definition at line 118 of file ValidatorSite.h.

◆ sites_mutex_

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

Definition at line 122 of file ValidatorSite.h.

◆ state_mutex_

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

Definition at line 123 of file ValidatorSite.h.

◆ cv_

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

Definition at line 125 of file ValidatorSite.h.

◆ work_

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

Definition at line 126 of file ValidatorSite.h.

◆ timer_

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

Definition at line 127 of file ValidatorSite.h.

◆ fetching_

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

Definition at line 130 of file ValidatorSite.h.

◆ pending_

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

Definition at line 133 of file ValidatorSite.h.

◆ stopping_

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

Definition at line 134 of file ValidatorSite.h.

◆ sites_

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

Definition at line 137 of file ValidatorSite.h.

◆ requestTimeout_

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

Definition at line 140 of file ValidatorSite.h.