mirror of
https://github.com/XRPLF/rippled.git
synced 2026-03-04 20:02:29 +00:00
Compare commits
43 Commits
develop
...
ximinez/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b349510b8 | ||
|
|
a495b41179 | ||
|
|
ae41a712b3 | ||
|
|
7684f9dd58 | ||
|
|
7c34be898d | ||
|
|
5e282f49da | ||
|
|
86722689ac | ||
|
|
3759144bba | ||
|
|
16c41c2143 | ||
|
|
af28042946 | ||
|
|
734426554d | ||
|
|
7f17daa95f | ||
|
|
f359cd8dad | ||
|
|
bf0b10404d | ||
|
|
d019ebaf36 | ||
|
|
b6e4620349 | ||
|
|
db0ef6a370 | ||
|
|
11a45a0ac2 | ||
|
|
aa035f4cfd | ||
|
|
8988f9117f | ||
|
|
ae4f379845 | ||
|
|
671aa11649 | ||
|
|
53d35fd8ea | ||
|
|
0c7ea2e333 | ||
|
|
5f54be25e9 | ||
|
|
d82756519c | ||
|
|
1f23832659 | ||
|
|
4c50969bde | ||
|
|
aabdf372dd | ||
|
|
c6d63a4b90 | ||
|
|
1e6c3208db | ||
|
|
a74f223efb | ||
|
|
1eb3a3ea5a | ||
|
|
630e428929 | ||
|
|
3f93edc5e0 | ||
|
|
baf62689ff | ||
|
|
ddf7d6cac4 | ||
|
|
fcd2ea2d6e | ||
|
|
a16aa5b12f | ||
|
|
ef2de81870 | ||
|
|
fce6757260 | ||
|
|
d759a0a2b0 | ||
|
|
d2dda416e8 |
@@ -24,7 +24,6 @@ Checks: "-*,
|
||||
bugprone-misplaced-operator-in-strlen-in-alloc,
|
||||
bugprone-misplaced-pointer-arithmetic-in-alloc,
|
||||
bugprone-misplaced-widening-cast,
|
||||
bugprone-move-forwarding-reference,
|
||||
bugprone-multi-level-implicit-pointer-conversion,
|
||||
bugprone-multiple-new-in-one-expression,
|
||||
bugprone-multiple-statement-macro,
|
||||
@@ -33,12 +32,10 @@ Checks: "-*,
|
||||
bugprone-parent-virtual-call,
|
||||
bugprone-posix-return,
|
||||
bugprone-redundant-branch-condition,
|
||||
bugprone-return-const-ref-from-parameter,
|
||||
bugprone-shared-ptr-array-mismatch,
|
||||
bugprone-signal-handler,
|
||||
bugprone-signed-char-misuse,
|
||||
bugprone-sizeof-container,
|
||||
bugprone-sizeof-expression,
|
||||
bugprone-spuriously-wake-up-functions,
|
||||
bugprone-standalone-empty,
|
||||
bugprone-string-constructor,
|
||||
@@ -85,14 +82,16 @@ Checks: "-*,
|
||||
performance-trivially-destructible
|
||||
"
|
||||
# ---
|
||||
# more checks that have some issues that need to be resolved:
|
||||
# checks that have some issues that need to be resolved:
|
||||
#
|
||||
# bugprone-crtp-constructor-accessibility,
|
||||
# bugprone-inc-dec-in-conditions,
|
||||
# bugprone-reserved-identifier,
|
||||
# bugprone-move-forwarding-reference,
|
||||
# bugprone-unused-local-non-trivial-variable,
|
||||
# bugprone-return-const-ref-from-parameter,
|
||||
# bugprone-switch-missing-default-case,
|
||||
# bugprone-sizeof-expression,
|
||||
# bugprone-suspicious-stringview-data-usage,
|
||||
# bugprone-suspicious-missing-comma,
|
||||
# bugprone-pointer-arithmetic-on-polymorphic-object,
|
||||
|
||||
5
.github/workflows/publish-docs.yml
vendored
5
.github/workflows/publish-docs.yml
vendored
@@ -49,11 +49,6 @@ jobs:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
|
||||
- name: Prepare runner
|
||||
uses: XRPLF/actions/prepare-runner@2cbf481018d930656e9276fcc20dc0e3a0be5b6d
|
||||
with:
|
||||
enable_ccache: false
|
||||
|
||||
- name: Get number of processors
|
||||
uses: XRPLF/actions/get-nproc@cf0433aa74563aead044a1e395610c96d65a37cf
|
||||
id: nproc
|
||||
|
||||
@@ -36,6 +36,26 @@ endif ()
|
||||
# Enable ccache to speed up builds.
|
||||
include(Ccache)
|
||||
|
||||
# make GIT_COMMIT_HASH define available to all sources
|
||||
find_package(Git)
|
||||
if (Git_FOUND)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git rev-parse
|
||||
HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE gch)
|
||||
if (gch)
|
||||
set(GIT_COMMIT_HASH "${gch}")
|
||||
message(STATUS gch: ${GIT_COMMIT_HASH})
|
||||
add_definitions(-DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
|
||||
endif ()
|
||||
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git rev-parse
|
||||
--abbrev-ref HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE gb)
|
||||
if (gb)
|
||||
set(GIT_BRANCH "${gb}")
|
||||
message(STATUS gb: ${GIT_BRANCH})
|
||||
add_definitions(-DGIT_BRANCH="${GIT_BRANCH}")
|
||||
endif ()
|
||||
endif () # git
|
||||
|
||||
if (thread_safety_analysis)
|
||||
add_compile_options(-Wthread-safety -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS
|
||||
-DXRPL_ENABLE_THREAD_SAFETY_ANNOTATIONS)
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
include_guard()
|
||||
|
||||
set(GIT_BUILD_BRANCH "")
|
||||
set(GIT_COMMIT_HASH "")
|
||||
|
||||
find_package(Git)
|
||||
if (NOT Git_FOUND)
|
||||
message(WARNING "Git not found. Git branch and commit hash will be empty.")
|
||||
return()
|
||||
endif ()
|
||||
|
||||
set(GIT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.git)
|
||||
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${GIT_DIRECTORY} rev-parse --abbrev-ref HEAD
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GIT_BUILD_BRANCH)
|
||||
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${GIT_DIRECTORY} rev-parse HEAD
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE GIT_COMMIT_HASH)
|
||||
|
||||
message(STATUS "Git branch: ${GIT_BUILD_BRANCH}")
|
||||
message(STATUS "Git commit hash: ${GIT_COMMIT_HASH}")
|
||||
@@ -58,12 +58,6 @@ include(target_link_modules)
|
||||
add_module(xrpl beast)
|
||||
target_link_libraries(xrpl.libxrpl.beast PUBLIC xrpl.imports.main)
|
||||
|
||||
include(GitInfo)
|
||||
add_module(xrpl git)
|
||||
target_compile_definitions(xrpl.libxrpl.git PRIVATE GIT_COMMIT_HASH="${GIT_COMMIT_HASH}"
|
||||
GIT_BUILD_BRANCH="${GIT_BUILD_BRANCH}")
|
||||
target_link_libraries(xrpl.libxrpl.git PUBLIC xrpl.imports.main)
|
||||
|
||||
# Level 02
|
||||
add_module(xrpl basics)
|
||||
target_link_libraries(xrpl.libxrpl.basics PUBLIC xrpl.libxrpl.beast)
|
||||
@@ -77,8 +71,7 @@ target_link_libraries(xrpl.libxrpl.crypto PUBLIC xrpl.libxrpl.basics)
|
||||
|
||||
# Level 04
|
||||
add_module(xrpl protocol)
|
||||
target_link_libraries(xrpl.libxrpl.protocol PUBLIC xrpl.libxrpl.crypto xrpl.libxrpl.git
|
||||
xrpl.libxrpl.json)
|
||||
target_link_libraries(xrpl.libxrpl.protocol PUBLIC xrpl.libxrpl.crypto xrpl.libxrpl.json)
|
||||
|
||||
# Level 05
|
||||
add_module(xrpl core)
|
||||
@@ -142,7 +135,6 @@ target_link_modules(
|
||||
conditions
|
||||
core
|
||||
crypto
|
||||
git
|
||||
json
|
||||
ledger
|
||||
net
|
||||
|
||||
@@ -23,7 +23,6 @@ install(TARGETS common
|
||||
xrpl.libxrpl.conditions
|
||||
xrpl.libxrpl.core
|
||||
xrpl.libxrpl.crypto
|
||||
xrpl.libxrpl.git
|
||||
xrpl.libxrpl.json
|
||||
xrpl.libxrpl.rdb
|
||||
xrpl.libxrpl.ledger
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
namespace beast {
|
||||
@@ -27,14 +26,14 @@ public:
|
||||
|
||||
SemanticVersion();
|
||||
|
||||
SemanticVersion(std::string_view version);
|
||||
SemanticVersion(std::string const& version);
|
||||
|
||||
/** Parse a semantic version string.
|
||||
The parsing is as strict as possible.
|
||||
@return `true` if the string was parsed.
|
||||
*/
|
||||
bool
|
||||
parse(std::string_view input);
|
||||
parse(std::string const& input);
|
||||
|
||||
/** Produce a string from semantic version components. */
|
||||
std::string
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace xrpl::git {
|
||||
|
||||
std::string const&
|
||||
getCommitHash();
|
||||
|
||||
std::string const&
|
||||
getBuildBranch();
|
||||
|
||||
} // namespace xrpl::git
|
||||
@@ -49,7 +49,7 @@ getFullVersionString();
|
||||
@return the encoded version in a 64-bit integer
|
||||
*/
|
||||
std::uint64_t
|
||||
encodeSoftwareVersion(std::string_view versionStr);
|
||||
encodeSoftwareVersion(char const* const versionStr);
|
||||
|
||||
/** Returns this server's version packed in a 64-bit integer. */
|
||||
std::uint64_t
|
||||
|
||||
@@ -138,14 +138,14 @@ SemanticVersion::SemanticVersion() : majorVersion(0), minorVersion(0), patchVers
|
||||
{
|
||||
}
|
||||
|
||||
SemanticVersion::SemanticVersion(std::string_view version) : SemanticVersion()
|
||||
SemanticVersion::SemanticVersion(std::string const& version) : SemanticVersion()
|
||||
{
|
||||
if (!parse(version))
|
||||
throw std::invalid_argument("invalid version string");
|
||||
}
|
||||
|
||||
bool
|
||||
SemanticVersion::parse(std::string_view input)
|
||||
SemanticVersion::parse(std::string const& input)
|
||||
{
|
||||
// May not have leading or trailing whitespace
|
||||
auto left_iter = std::find_if_not(input.begin(), input.end(), [](std::string::value_type c) {
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
#include "xrpl/git/Git.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
#ifndef GIT_COMMIT_HASH
|
||||
#error "GIT_COMMIT_HASH must be defined"
|
||||
#endif
|
||||
#ifndef GIT_BUILD_BRANCH
|
||||
#error "GIT_BUILD_BRANCH must be defined"
|
||||
#endif
|
||||
|
||||
namespace xrpl::git {
|
||||
|
||||
static constexpr char kGIT_COMMIT_HASH[] = GIT_COMMIT_HASH;
|
||||
static constexpr char kGIT_BUILD_BRANCH[] = GIT_BUILD_BRANCH;
|
||||
|
||||
std::string const&
|
||||
getCommitHash()
|
||||
{
|
||||
static std::string const kVALUE = kGIT_COMMIT_HASH;
|
||||
return kVALUE;
|
||||
}
|
||||
|
||||
std::string const&
|
||||
getBuildBranch()
|
||||
{
|
||||
static std::string const kVALUE = kGIT_BUILD_BRANCH;
|
||||
return kVALUE;
|
||||
}
|
||||
|
||||
} // namespace xrpl::git
|
||||
@@ -1,7 +1,6 @@
|
||||
#include <xrpl/basics/contract.h>
|
||||
#include <xrpl/beast/core/LexicalCast.h>
|
||||
#include <xrpl/beast/core/SemanticVersion.h>
|
||||
#include <xrpl/git/Git.h>
|
||||
#include <xrpl/protocol/BuildInfo.h>
|
||||
|
||||
#include <boost/preprocessor/stringize.hpp>
|
||||
@@ -15,60 +14,44 @@ namespace xrpl {
|
||||
|
||||
namespace BuildInfo {
|
||||
|
||||
namespace {
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// The build version number. You must edit this for each release
|
||||
// and follow the format described at http://semver.org/
|
||||
//------------------------------------------------------------------------------
|
||||
// clang-format off
|
||||
char const* const versionString = "3.2.0-b0"
|
||||
// clang-format on
|
||||
// clang-format on
|
||||
|
||||
#if defined(DEBUG) || defined(SANITIZERS)
|
||||
"+"
|
||||
#ifdef GIT_COMMIT_HASH
|
||||
GIT_COMMIT_HASH
|
||||
"."
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
"DEBUG"
|
||||
#ifdef SANITIZERS
|
||||
"."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef SANITIZERS
|
||||
BOOST_PP_STRINGIZE(SANITIZERS) // cspell: disable-line
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
;
|
||||
|
||||
//
|
||||
// Don't touch anything below this line
|
||||
//
|
||||
|
||||
std::string
|
||||
buildVersionString()
|
||||
{
|
||||
std::string version = versionString;
|
||||
|
||||
#if defined(DEBUG) || defined(SANITIZERS)
|
||||
std::string metadata;
|
||||
|
||||
std::string const& commitHash = xrpl::git::getCommitHash();
|
||||
if (!commitHash.empty())
|
||||
metadata += commitHash + ".";
|
||||
|
||||
#ifdef DEBUG
|
||||
metadata += "DEBUG";
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG) && defined(SANITIZERS)
|
||||
metadata += ".";
|
||||
#endif
|
||||
|
||||
#ifdef SANITIZERS
|
||||
metadata += BOOST_PP_STRINGIZE(SANITIZERS); // cspell: disable-line
|
||||
#endif
|
||||
|
||||
if (!metadata.empty())
|
||||
version += "+" + metadata;
|
||||
#endif
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
std::string const&
|
||||
getVersionString()
|
||||
{
|
||||
static std::string const value = [] {
|
||||
std::string const s = buildVersionString();
|
||||
|
||||
std::string const s = versionString;
|
||||
beast::SemanticVersion v;
|
||||
if (!v.parse(s) || v.print() != s)
|
||||
LogicError(s + ": Bad server version string");
|
||||
@@ -88,13 +71,13 @@ static constexpr std::uint64_t implementationVersionIdentifier = 0x183B'0000'000
|
||||
static constexpr std::uint64_t implementationVersionIdentifierMask = 0xFFFF'0000'0000'0000LLU;
|
||||
|
||||
std::uint64_t
|
||||
encodeSoftwareVersion(std::string_view versionStr)
|
||||
encodeSoftwareVersion(char const* const versionStr)
|
||||
{
|
||||
std::uint64_t c = implementationVersionIdentifier;
|
||||
|
||||
beast::SemanticVersion v;
|
||||
|
||||
if (v.parse(versionStr))
|
||||
if (v.parse(std::string(versionStr)))
|
||||
{
|
||||
if (v.majorVersion >= 0 && v.majorVersion <= 255)
|
||||
c |= static_cast<std::uint64_t>(v.majorVersion) << 40;
|
||||
@@ -154,7 +137,7 @@ encodeSoftwareVersion(std::string_view versionStr)
|
||||
std::uint64_t
|
||||
getEncodedVersion()
|
||||
{
|
||||
static std::uint64_t const cookie = {encodeSoftwareVersion(getVersionString())};
|
||||
static std::uint64_t const cookie = {encodeSoftwareVersion(versionString)};
|
||||
return cookie;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ TER
|
||||
PermissionedDomainDelete::preclaim(PreclaimContext const& ctx)
|
||||
{
|
||||
auto const domain = ctx.tx.getFieldH256(sfDomainID);
|
||||
auto const sleDomain = ctx.view.read(keylet::permissionedDomain(domain));
|
||||
auto const sleDomain = ctx.view.read({ltPERMISSIONED_DOMAIN, domain});
|
||||
|
||||
if (!sleDomain)
|
||||
return tecNO_ENTRY;
|
||||
@@ -40,7 +40,7 @@ PermissionedDomainDelete::doApply()
|
||||
ctx_.tx.isFieldPresent(sfDomainID),
|
||||
"xrpl::PermissionedDomainDelete::doApply : required field present");
|
||||
|
||||
auto const slePd = view().peek(keylet::permissionedDomain(ctx_.tx.at(sfDomainID)));
|
||||
auto const slePd = view().peek({ltPERMISSIONED_DOMAIN, ctx_.tx.at(sfDomainID)});
|
||||
auto const page = (*slePd)[sfOwnerNode];
|
||||
|
||||
if (!view().dirRemove(keylet::ownerDir(account_), page, slePd->key(), true))
|
||||
|
||||
@@ -227,7 +227,7 @@ public:
|
||||
static typename Base::Key const&
|
||||
extract(Value const& value)
|
||||
{
|
||||
return value; // NOLINT(bugprone-return-const-ref-from-parameter)
|
||||
return value;
|
||||
}
|
||||
|
||||
static Values
|
||||
|
||||
@@ -556,7 +556,7 @@ struct MultiApiJson_test : beast::unit_test::suite
|
||||
static_assert([](auto&& v) {
|
||||
return !requires {
|
||||
v.visitor(
|
||||
decltype(v){}, // cannot bind rvalue
|
||||
std::move(v), // cannot bind rvalue
|
||||
1,
|
||||
[](Json::Value&, auto) {});
|
||||
};
|
||||
|
||||
@@ -223,45 +223,6 @@ public:
|
||||
expect(jv[jss::result][jss::obligations]["USD"] == maxUSD.getText());
|
||||
}
|
||||
|
||||
void
|
||||
testGWBWithMPT()
|
||||
{
|
||||
testcase("Gateway Balances with MPT Escrow");
|
||||
using namespace std::chrono_literals;
|
||||
using namespace jtx;
|
||||
|
||||
// Ensure MPT is enabled
|
||||
FeatureBitset features = testable_amendments() | featureMPTokensV1;
|
||||
Env env(*this, features);
|
||||
|
||||
Account const alice{"alice"};
|
||||
Account const bob{"bob"};
|
||||
|
||||
env.fund(XRP(10000), alice, bob);
|
||||
env.close();
|
||||
|
||||
// Create MPT issuance (Alice) with Escrow capability
|
||||
MPTTester mpt(env, alice, {.holders = {bob}, .fund = false});
|
||||
mpt.create({.flags = tfMPTCanEscrow});
|
||||
|
||||
// Authorize Bob and fund him
|
||||
mpt.authorize({.account = bob, .holderCount = 1});
|
||||
mpt.pay(alice, bob, 1000);
|
||||
|
||||
// Bob creates an escrow of MPT to Alice.
|
||||
auto const MPT = mpt["MPT"];
|
||||
env(escrow::create(bob, alice, MPT(100)), escrow::finish_time(env.now() + 10s));
|
||||
env.close();
|
||||
|
||||
// Query gateway_balances for Bob.
|
||||
auto wsc = makeWSClient(env.app().config());
|
||||
Json::Value qry;
|
||||
qry[jss::account] = bob.human();
|
||||
|
||||
auto jv = wsc->invoke("gateway_balances", qry);
|
||||
expect(jv[jss::status] == "success");
|
||||
}
|
||||
|
||||
void
|
||||
run() override
|
||||
{
|
||||
@@ -272,7 +233,7 @@ public:
|
||||
testGWB(feature);
|
||||
testGWBApiVersions(feature);
|
||||
}
|
||||
testGWBWithMPT();
|
||||
|
||||
testGWBOverflow();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
|
||||
#include <xrpl/basics/Log.h>
|
||||
#include <xrpl/beast/core/CurrentThreadName.h>
|
||||
#include <xrpl/git/Git.h>
|
||||
#include <xrpl/protocol/BuildInfo.h>
|
||||
#include <xrpl/server/Vacuum.h>
|
||||
|
||||
@@ -477,8 +476,12 @@ run(int argc, char** argv)
|
||||
if (vm.count("version"))
|
||||
{
|
||||
std::cout << "rippled version " << BuildInfo::getVersionString() << std::endl;
|
||||
std::cout << "Git commit hash: " << xrpl::git::getCommitHash() << std::endl;
|
||||
std::cout << "Git build branch: " << xrpl::git::getBuildBranch() << std::endl;
|
||||
#ifdef GIT_COMMIT_HASH
|
||||
std::cout << "Git commit hash: " << GIT_COMMIT_HASH << std::endl;
|
||||
#endif
|
||||
#ifdef GIT_BRANCH
|
||||
std::cout << "Git build branch: " << GIT_BRANCH << std::endl;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
#include <xrpl/core/PerfLog.h>
|
||||
#include <xrpl/crypto/RFC1751.h>
|
||||
#include <xrpl/crypto/csprng.h>
|
||||
#include <xrpl/git/Git.h>
|
||||
#include <xrpl/ledger/AmendmentTable.h>
|
||||
#include <xrpl/ledger/OrderBookDB.h>
|
||||
#include <xrpl/protocol/BuildInfo.h>
|
||||
@@ -2594,14 +2593,17 @@ NetworkOPsImp::getServerInfo(bool human, bool admin, bool counters)
|
||||
}
|
||||
}
|
||||
|
||||
if (!xrpl::git::getCommitHash().empty() || !xrpl::git::getBuildBranch().empty())
|
||||
#if defined(GIT_COMMIT_HASH) || defined(GIT_BRANCH)
|
||||
{
|
||||
auto& x = (info[jss::git] = Json::objectValue);
|
||||
if (!xrpl::git::getCommitHash().empty())
|
||||
x[jss::hash] = xrpl::git::getCommitHash();
|
||||
if (!xrpl::git::getBuildBranch().empty())
|
||||
x[jss::branch] = xrpl::git::getBuildBranch();
|
||||
#ifdef GIT_COMMIT_HASH
|
||||
x[jss::hash] = GIT_COMMIT_HASH;
|
||||
#endif
|
||||
#ifdef GIT_BRANCH
|
||||
x[jss::branch] = GIT_BRANCH;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
info[jss::io_latency_ms] = static_cast<Json::UInt>(registry_.app().getIOLatency().count());
|
||||
|
||||
|
||||
@@ -129,7 +129,11 @@ ValidatorSite::load(
|
||||
{
|
||||
try
|
||||
{
|
||||
sites_.emplace_back(uri);
|
||||
// This is not super efficient, but it doesn't happen often.
|
||||
bool found = std::ranges::any_of(
|
||||
sites_, [&uri](auto const& site) { return site.loadedResource->uri == uri; });
|
||||
if (!found)
|
||||
sites_.emplace_back(uri);
|
||||
}
|
||||
catch (std::exception const& e)
|
||||
{
|
||||
@@ -190,6 +194,16 @@ ValidatorSite::setTimer(
|
||||
std::lock_guard<std::mutex> const& site_lock,
|
||||
std::lock_guard<std::mutex> const& state_lock)
|
||||
{
|
||||
if (!sites_.empty() && //
|
||||
std::ranges::all_of(
|
||||
sites_, [](auto const& site) { return site.lastRefreshStatus.has_value(); }))
|
||||
{
|
||||
// If all of the sites have been handled at least once (including
|
||||
// errors and timeouts), call missingSite, which will load the cache
|
||||
// files for any lists that are still unavailable.
|
||||
missingSite(site_lock);
|
||||
}
|
||||
|
||||
auto next = std::min_element(sites_.begin(), sites_.end(), [](Site const& a, Site const& b) {
|
||||
return a.nextRefresh < b.nextRefresh;
|
||||
});
|
||||
@@ -299,12 +313,15 @@ ValidatorSite::onRequestTimeout(std::size_t siteIdx, error_code const& ec)
|
||||
// processes a network error. Usually, this function runs first,
|
||||
// but on extremely rare occasions, the response handler can run
|
||||
// first, which will leave activeResource empty.
|
||||
auto const& site = sites_[siteIdx];
|
||||
auto& site = sites_[siteIdx];
|
||||
if (site.activeResource)
|
||||
JLOG(j_.warn()) << "Request for " << site.activeResource->uri << " took too long";
|
||||
else
|
||||
JLOG(j_.error()) << "Request took too long, but a response has "
|
||||
"already been processed";
|
||||
if (!site.lastRefreshStatus)
|
||||
site.lastRefreshStatus.emplace(
|
||||
Site::Status{clock_type::now(), ListDisposition::invalid, "timeout"});
|
||||
}
|
||||
|
||||
std::lock_guard lock_state{state_mutex_};
|
||||
|
||||
@@ -131,10 +131,6 @@ doGatewayBalances(RPC::JsonContext& context)
|
||||
if (sle->getType() == ltESCROW)
|
||||
{
|
||||
auto const& escrow = sle->getFieldAmount(sfAmount);
|
||||
// Gateway Balance should not include MPTs
|
||||
if (escrow.holds<MPTIssue>())
|
||||
return;
|
||||
|
||||
auto& bal = locked[escrow.getCurrency()];
|
||||
if (bal == beast::zero)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user