Skip to content

Commit

Permalink
If present, set quorum based on command line.
Browse files Browse the repository at this point in the history
  • Loading branch information
mtrippled committed Apr 6, 2023
1 parent 9346842 commit ec63505
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 18 deletions.
24 changes: 10 additions & 14 deletions src/ripple/app/misc/impl/ValidatorList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1710,6 +1710,15 @@ ValidatorList::calculateQuorum(
std::size_t effectiveUnlSize,
std::size_t seenSize)
{
// Use quorum if specified via command line.
if (minimumQuorum_ && *minimumQuorum_)
{
JLOG(j_.warn()) << "Using potentially unsafe quorum of " <<
*minimumQuorum_
<< " as specified in the command line";
return *minimumQuorum_;
}

// Do not use achievable quorum until lists from all configured
// publishers are available
for (auto const& list : publisherLists_)
Expand Down Expand Up @@ -1752,21 +1761,8 @@ ValidatorList::calculateQuorum(
// Note that the negative UNL protocol introduced the
// AbsoluteMinimumQuorum which is 60% of the original UNL size. The
// effective quorum should not be lower than it.
auto quorum = static_cast<std::size_t>(std::max(
return static_cast<std::size_t>(std::max(
std::ceil(effectiveUnlSize * 0.8f), std::ceil(unlSize * 0.6f)));

// Use lower quorum specified via command line if the normal quorum
// appears unreachable based on the number of recently received
// validations.
if (minimumQuorum_ && *minimumQuorum_ < quorum && seenSize < quorum)
{
quorum = *minimumQuorum_;

JLOG(j_.warn()) << "Using unsafe quorum of " << quorum
<< " as specified in the command line";
}

return quorum;
}

TrustChanges
Expand Down
9 changes: 5 additions & 4 deletions src/test/app/ValidatorList_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1318,7 +1318,7 @@ class ValidatorList_test : public beast::unit_test::suite
BEAST_EXPECT(changes.added == expectedTrusted);
BEAST_EXPECT(trustedKeys->quorum() == minQuorum);

// Use normal quorum when seen validators >= quorum
// Use configured quorum even when seen validators >= quorum
activeValidators.emplace(toBeSeen);
changes = trustedKeys->updateTrusted(
activeValidators,
Expand All @@ -1328,7 +1328,7 @@ class ValidatorList_test : public beast::unit_test::suite
env.app().getHashRouter());
BEAST_EXPECT(changes.removed.empty());
BEAST_EXPECT(changes.added.empty());
BEAST_EXPECT(trustedKeys->quorum() == std::ceil(n * 0.8f));
BEAST_EXPECT(trustedKeys->quorum() == minQuorum);
}
{
// Remove expired published list
Expand Down Expand Up @@ -1828,7 +1828,8 @@ class ValidatorList_test : public beast::unit_test::suite
env.app().getOPs(),
env.app().overlay(),
env.app().getHashRouter());
if (trustedKeys->quorum() == std::ceil(cfgKeys.size() * 0.8f))
if ((minimumQuorum.has_value() && trustedKeys->quorum() == *minimumQuorum) ||
(trustedKeys->quorum() == std::ceil(cfgKeys.size() * 0.8f)))
return trustedKeys;
}
return nullptr;
Expand Down Expand Up @@ -1980,7 +1981,7 @@ class ValidatorList_test : public beast::unit_test::suite
env.app().getOPs(),
env.app().overlay(),
env.app().getHashRouter());
BEAST_EXPECT(validators->quorum() == 48);
BEAST_EXPECT(validators->quorum() == 30);
hash_set<PublicKey> nUnl;
it = unl.begin();
for (std::uint32_t i = 0; i < 20; ++i)
Expand Down

0 comments on commit ec63505

Please sign in to comment.