mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Add validator list RPC commands (RIPD-1541):
In support of dynamic validator list, this changeset: 1. Adds a new `validator_list_expires` field to `server_info` that indicates when the current validator list will become stale. 2. Adds a new admin only `validator_lists` RPC that returns the current list of known validators and the most recent published validator lists. 3. Adds a new admin only `validator_sites` RPC that returns the list of configured validator publisher sites and when they were most recently queried.
This commit is contained in:
@@ -17,12 +17,13 @@
|
||||
*/
|
||||
//==============================================================================
|
||||
|
||||
#include <ripple/app/misc/detail/WorkPlain.h>
|
||||
#include <ripple/app/misc/detail/WorkSSL.h>
|
||||
#include <ripple/app/misc/ValidatorList.h>
|
||||
#include <ripple/app/misc/ValidatorSite.h>
|
||||
#include <ripple/app/misc/detail/WorkPlain.h>
|
||||
#include <ripple/app/misc/detail/WorkSSL.h>
|
||||
#include <ripple/basics/Slice.h>
|
||||
#include <ripple/json/json_reader.h>
|
||||
#include <ripple/protocol/JsonFields.h>
|
||||
#include <beast/core/detail/base64.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
|
||||
@@ -211,6 +212,9 @@ ValidatorSite::onSiteFetch(
|
||||
JLOG (j_.warn()) <<
|
||||
"Request for validator list at " <<
|
||||
sites_[siteIdx].uri << " returned " << res.result_int();
|
||||
|
||||
sites_[siteIdx].lastRefreshStatus.emplace(
|
||||
Site::Status{clock_type::now(), ListDisposition::invalid});
|
||||
}
|
||||
else if (! ec)
|
||||
{
|
||||
@@ -231,12 +235,21 @@ ValidatorSite::onSiteFetch(
|
||||
body["signature"].asString(),
|
||||
body["version"].asUInt());
|
||||
|
||||
sites_[siteIdx].lastRefreshStatus.emplace(
|
||||
Site::Status{clock_type::now(), disp});
|
||||
|
||||
if (ListDisposition::accepted == disp)
|
||||
{
|
||||
JLOG (j_.debug()) <<
|
||||
"Applied new validator list from " <<
|
||||
sites_[siteIdx].uri;
|
||||
}
|
||||
else if (ListDisposition::same_sequence == disp)
|
||||
{
|
||||
JLOG (j_.debug()) <<
|
||||
"Validator list with current sequence from " <<
|
||||
sites_[siteIdx].uri;
|
||||
}
|
||||
else if (ListDisposition::stale == disp)
|
||||
{
|
||||
JLOG (j_.warn()) <<
|
||||
@@ -277,10 +290,17 @@ ValidatorSite::onSiteFetch(
|
||||
JLOG (j_.warn()) <<
|
||||
"Unable to parse JSON response from " <<
|
||||
sites_[siteIdx].uri;
|
||||
|
||||
sites_[siteIdx].lastRefreshStatus.emplace(
|
||||
Site::Status{clock_type::now(), ListDisposition::invalid});
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
std::lock_guard <std::mutex> lock{sites_mutex_};
|
||||
sites_[siteIdx].lastRefreshStatus.emplace(
|
||||
Site::Status{clock_type::now(), ListDisposition::invalid});
|
||||
|
||||
JLOG (j_.warn()) <<
|
||||
"Problem retrieving from " <<
|
||||
sites_[siteIdx].uri <<
|
||||
@@ -297,4 +317,32 @@ ValidatorSite::onSiteFetch(
|
||||
cv_.notify_all();
|
||||
}
|
||||
|
||||
Json::Value
|
||||
ValidatorSite::getJson() const
|
||||
{
|
||||
using namespace std::chrono;
|
||||
using Int = Json::Value::Int;
|
||||
|
||||
Json::Value jrr(Json::objectValue);
|
||||
Json::Value& jSites = (jrr[jss::validator_sites] = Json::arrayValue);
|
||||
{
|
||||
std::lock_guard<std::mutex> lock{sites_mutex_};
|
||||
for (Site const& site : sites_)
|
||||
{
|
||||
Json::Value& v = jSites.append(Json::objectValue);
|
||||
v[jss::uri] = site.uri;
|
||||
if (site.lastRefreshStatus)
|
||||
{
|
||||
v[jss::last_refresh_time] =
|
||||
to_string(site.lastRefreshStatus->refreshed);
|
||||
v[jss::last_refresh_status] =
|
||||
to_string(site.lastRefreshStatus->disposition);
|
||||
}
|
||||
|
||||
v[jss::refresh_interval_min] =
|
||||
static_cast<Int>(site.refreshInterval.count());
|
||||
}
|
||||
}
|
||||
return jrr;
|
||||
}
|
||||
} // ripple
|
||||
|
||||
Reference in New Issue
Block a user