Minor refactor of LoadFeeTrack (RIPD-956):

* Load scaling functions are free, and take `Fees`.
* Move LoadFeeTrack to app/misc.
* Update naming convention.
This commit is contained in:
Edward Hennis
2016-07-25 18:46:16 -04:00
parent a252fefede
commit d1ce07ef5d
32 changed files with 205 additions and 185 deletions

View File

@@ -937,6 +937,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\app\misc\impl\LoadFeeTrack.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple\app\misc\impl\Transaction.cpp"> <ClCompile Include="..\..\src\ripple\app\misc\impl\Transaction.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
@@ -949,6 +953,8 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClInclude Include="..\..\src\ripple\app\misc\LoadFeeTrack.h">
</ClInclude>
<ClCompile Include="..\..\src\ripple\app\misc\NetworkOPs.cpp"> <ClCompile Include="..\..\src\ripple\app\misc\NetworkOPs.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
@@ -1149,6 +1155,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\app\tests\LoadFeeTrack.test.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple\app\tests\MultiSign.test.cpp"> <ClCompile Include="..\..\src\ripple\app\tests\MultiSign.test.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
@@ -1982,12 +1992,6 @@
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\core\impl\LoadFeeTrack.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<ClCompile Include="..\..\src\ripple\core\impl\LoadMonitor.cpp"> <ClCompile Include="..\..\src\ripple\core\impl\LoadMonitor.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
@@ -2052,8 +2056,6 @@
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\core\LoadEvent.h"> <ClInclude Include="..\..\src\ripple\core\LoadEvent.h">
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\core\LoadFeeTrack.h">
</ClInclude>
<ClInclude Include="..\..\src\ripple\core\LoadMonitor.h"> <ClInclude Include="..\..\src\ripple\core\LoadMonitor.h">
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\core\SociDB.h"> <ClInclude Include="..\..\src\ripple\core\SociDB.h">
@@ -2072,12 +2074,6 @@
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\core\tests\LoadFeeTrack.test.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release.classic|x64'">..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<ClCompile Include="..\..\src\ripple\core\tests\SociDB.test.cpp"> <ClCompile Include="..\..\src\ripple\core\tests\SociDB.test.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>

View File

@@ -1419,6 +1419,9 @@
<ClCompile Include="..\..\src\ripple\app\misc\impl\AmendmentTable.cpp"> <ClCompile Include="..\..\src\ripple\app\misc\impl\AmendmentTable.cpp">
<Filter>ripple\app\misc\impl</Filter> <Filter>ripple\app\misc\impl</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\app\misc\impl\LoadFeeTrack.cpp">
<Filter>ripple\app\misc\impl</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\app\misc\impl\Transaction.cpp"> <ClCompile Include="..\..\src\ripple\app\misc\impl\Transaction.cpp">
<Filter>ripple\app\misc\impl</Filter> <Filter>ripple\app\misc\impl</Filter>
</ClCompile> </ClCompile>
@@ -1428,6 +1431,9 @@
<ClCompile Include="..\..\src\ripple\app\misc\impl\ValidatorList.cpp"> <ClCompile Include="..\..\src\ripple\app\misc\impl\ValidatorList.cpp">
<Filter>ripple\app\misc\impl</Filter> <Filter>ripple\app\misc\impl</Filter>
</ClCompile> </ClCompile>
<ClInclude Include="..\..\src\ripple\app\misc\LoadFeeTrack.h">
<Filter>ripple\app\misc</Filter>
</ClInclude>
<ClCompile Include="..\..\src\ripple\app\misc\NetworkOPs.cpp"> <ClCompile Include="..\..\src\ripple\app\misc\NetworkOPs.cpp">
<Filter>ripple\app\misc</Filter> <Filter>ripple\app\misc</Filter>
</ClCompile> </ClCompile>
@@ -1623,6 +1629,9 @@
<ClCompile Include="..\..\src\ripple\app\tests\HashRouter_test.cpp"> <ClCompile Include="..\..\src\ripple\app\tests\HashRouter_test.cpp">
<Filter>ripple\app\tests</Filter> <Filter>ripple\app\tests</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\app\tests\LoadFeeTrack.test.cpp">
<Filter>ripple\app\tests</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\app\tests\MultiSign.test.cpp"> <ClCompile Include="..\..\src\ripple\app\tests\MultiSign.test.cpp">
<Filter>ripple\app\tests</Filter> <Filter>ripple\app\tests</Filter>
</ClCompile> </ClCompile>
@@ -2532,9 +2541,6 @@
<ClCompile Include="..\..\src\ripple\core\impl\LoadEvent.cpp"> <ClCompile Include="..\..\src\ripple\core\impl\LoadEvent.cpp">
<Filter>ripple\core\impl</Filter> <Filter>ripple\core\impl</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\core\impl\LoadFeeTrack.cpp">
<Filter>ripple\core\impl</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\core\impl\LoadMonitor.cpp"> <ClCompile Include="..\..\src\ripple\core\impl\LoadMonitor.cpp">
<Filter>ripple\core\impl</Filter> <Filter>ripple\core\impl</Filter>
</ClCompile> </ClCompile>
@@ -2589,9 +2595,6 @@
<ClInclude Include="..\..\src\ripple\core\LoadEvent.h"> <ClInclude Include="..\..\src\ripple\core\LoadEvent.h">
<Filter>ripple\core</Filter> <Filter>ripple\core</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\ripple\core\LoadFeeTrack.h">
<Filter>ripple\core</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ripple\core\LoadMonitor.h"> <ClInclude Include="..\..\src\ripple\core\LoadMonitor.h">
<Filter>ripple\core</Filter> <Filter>ripple\core</Filter>
</ClInclude> </ClInclude>
@@ -2607,9 +2610,6 @@
<ClCompile Include="..\..\src\ripple\core\tests\Coroutine.test.cpp"> <ClCompile Include="..\..\src\ripple\core\tests\Coroutine.test.cpp">
<Filter>ripple\core\tests</Filter> <Filter>ripple\core\tests</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\src\ripple\core\tests\LoadFeeTrack.test.cpp">
<Filter>ripple\core\tests</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\core\tests\SociDB.test.cpp"> <ClCompile Include="..\..\src\ripple\core\tests\SociDB.test.cpp">
<Filter>ripple\core\tests</Filter> <Filter>ripple\core\tests</Filter>
</ClCompile> </ClCompile>

View File

@@ -29,14 +29,13 @@
#include <ripple/app/ledger/TransactionMaster.h> #include <ripple/app/ledger/TransactionMaster.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/HashRouter.h> #include <ripple/app/misc/HashRouter.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/basics/contract.h> #include <ripple/basics/contract.h>
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/basics/StringUtilities.h> #include <ripple/basics/StringUtilities.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/DatabaseCon.h> #include <ripple/core/DatabaseCon.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/JobQueue.h> #include <ripple/core/JobQueue.h>
#include <ripple/core/SociDB.h> #include <ripple/core/SociDB.h>
#include <ripple/json/to_string.h> #include <ripple/json/to_string.h>

View File

@@ -21,7 +21,7 @@
#include <ripple/app/ledger/LedgerCleaner.h> #include <ripple/app/ledger/LedgerCleaner.h>
#include <ripple/app/ledger/InboundLedgers.h> #include <ripple/app/ledger/InboundLedgers.h>
#include <ripple/app/ledger/LedgerMaster.h> #include <ripple/app/ledger/LedgerMaster.h>
#include <ripple/core/LoadFeeTrack.h> #include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/core/ThreadEntry.h> #include <ripple/core/ThreadEntry.h>
#include <ripple/protocol/JsonFields.h> #include <ripple/protocol/JsonFields.h>
#include <ripple/beast/core/Thread.h> #include <ripple/beast/core/Thread.h>

View File

@@ -31,6 +31,7 @@
#include <ripple/app/misc/AmendmentTable.h> #include <ripple/app/misc/AmendmentTable.h>
#include <ripple/app/misc/CanonicalTXSet.h> #include <ripple/app/misc/CanonicalTXSet.h>
#include <ripple/app/misc/HashRouter.h> #include <ripple/app/misc/HashRouter.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/app/misc/TxQ.h> #include <ripple/app/misc/TxQ.h>
#include <ripple/app/misc/Validations.h> #include <ripple/app/misc/Validations.h>
@@ -40,7 +41,6 @@
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/JobQueue.h> #include <ripple/core/JobQueue.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/TimeKeeper.h> #include <ripple/core/TimeKeeper.h>
#include <ripple/json/to_string.h> #include <ripple/json/to_string.h>
#include <ripple/overlay/Overlay.h> #include <ripple/overlay/Overlay.h>
@@ -1765,11 +1765,12 @@ void LedgerConsensusImp::startRound (
void LedgerConsensusImp::addLoad(STValidation::ref val) void LedgerConsensusImp::addLoad(STValidation::ref val)
{ {
auto const& feeTrack = app_.getFeeTrack();
std::uint32_t fee = std::max( std::uint32_t fee = std::max(
app_.getFeeTrack().getLocalFee(), feeTrack.getLocalFee(),
app_.getFeeTrack().getClusterFee()); feeTrack.getClusterFee());
if (fee > app_.getFeeTrack().getLoadBase()) if (fee > feeTrack.getLoadBase())
val->setFieldU32(sfLoadFee, fee); val->setFieldU32(sfLoadFee, fee);
} }

View File

@@ -27,6 +27,7 @@
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/AmendmentTable.h> #include <ripple/app/misc/AmendmentTable.h>
#include <ripple/app/misc/HashRouter.h> #include <ripple/app/misc/HashRouter.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/app/misc/SHAMapStore.h> #include <ripple/app/misc/SHAMapStore.h>
#include <ripple/app/misc/Transaction.h> #include <ripple/app/misc/Transaction.h>
@@ -37,7 +38,6 @@
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/basics/TaggedCache.h> #include <ripple/basics/TaggedCache.h>
#include <ripple/basics/UptimeTimer.h> #include <ripple/basics/UptimeTimer.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/TimeKeeper.h> #include <ripple/core/TimeKeeper.h>
#include <ripple/overlay/Overlay.h> #include <ripple/overlay/Overlay.h>
#include <ripple/overlay/Peer.h> #include <ripple/overlay/Peer.h>

View File

@@ -38,6 +38,7 @@
#include <ripple/app/main/NodeStoreScheduler.h> #include <ripple/app/main/NodeStoreScheduler.h>
#include <ripple/app/misc/AmendmentTable.h> #include <ripple/app/misc/AmendmentTable.h>
#include <ripple/app/misc/HashRouter.h> #include <ripple/app/misc/HashRouter.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/app/misc/SHAMapStore.h> #include <ripple/app/misc/SHAMapStore.h>
#include <ripple/app/misc/TxQ.h> #include <ripple/app/misc/TxQ.h>
@@ -55,7 +56,6 @@
#include <ripple/json/to_string.h> #include <ripple/json/to_string.h>
#include <ripple/core/ConfigSections.h> #include <ripple/core/ConfigSections.h>
#include <ripple/core/DeadlineTimer.h> #include <ripple/core/DeadlineTimer.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/TimeKeeper.h> #include <ripple/core/TimeKeeper.h>
#include <ripple/ledger/CachedSLEs.h> #include <ripple/ledger/CachedSLEs.h>
#include <ripple/nodestore/Database.h> #include <ripple/nodestore/Database.h>

View File

@@ -20,9 +20,9 @@
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/app/main/LoadManager.h> #include <ripple/app/main/LoadManager.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/basics/UptimeTimer.h> #include <ripple/basics/UptimeTimer.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/ThreadEntry.h> #include <ripple/core/ThreadEntry.h>
#include <ripple/json/to_string.h> #include <ripple/json/to_string.h>
#include <ripple/beast/core/Thread.h> #include <ripple/beast/core/Thread.h>

View File

@@ -28,6 +28,8 @@
namespace ripple { namespace ripple {
struct Fees;
/** Manages the current fee schedule. /** Manages the current fee schedule.
The "base" fee is the cost to send a reference transaction under no load, The "base" fee is the cost to send a reference transaction under no load,
@@ -37,51 +39,42 @@ namespace ripple {
reference transaction. This fee fluctuates based on the load of the reference transaction. This fee fluctuates based on the load of the
server. server.
*/ */
// VFALCO TODO Rename "load" to "current". class LoadFeeTrack final
class LoadFeeTrack
{ {
public: public:
explicit LoadFeeTrack (beast::Journal journal = beast::Journal()) explicit LoadFeeTrack (beast::Journal journal = beast::Journal())
: m_journal (journal) : j_ (journal)
, mLocalTxnLoadFee (lftNormalFee) , localTxnLoadFee_ (lftNormalFee)
, mRemoteTxnLoadFee (lftNormalFee) , remoteTxnLoadFee_ (lftNormalFee)
, mClusterTxnLoadFee (lftNormalFee) , clusterTxnLoadFee_ (lftNormalFee)
, raiseCount (0) , raiseCount_ (0)
{ {
} }
virtual ~LoadFeeTrack () { } ~LoadFeeTrack() = default;
// Scale from fee units to millionths of a ripple
std::uint64_t scaleFeeBase (std::uint64_t fee, std::uint64_t baseFee,
std::uint32_t referenceFeeUnits) const;
// Scale using load as well as base rate
std::uint64_t scaleFeeLoad (std::uint64_t fee, std::uint64_t baseFee,
std::uint32_t referenceFeeUnits, bool bUnlimited) const;
void setRemoteFee (std::uint32_t f) void setRemoteFee (std::uint32_t f)
{ {
ScopedLockType sl (mLock); std::lock_guard <std::mutex> sl (lock_);
mRemoteTxnLoadFee = f; remoteTxnLoadFee_ = f;
} }
std::uint32_t getRemoteFee () const std::uint32_t getRemoteFee () const
{ {
ScopedLockType sl (mLock); std::lock_guard <std::mutex> sl (lock_);
return mRemoteTxnLoadFee; return remoteTxnLoadFee_;
} }
std::uint32_t getLocalFee () const std::uint32_t getLocalFee () const
{ {
ScopedLockType sl (mLock); std::lock_guard <std::mutex> sl (lock_);
return mLocalTxnLoadFee; return localTxnLoadFee_;
} }
std::uint32_t getClusterFee () const std::uint32_t getClusterFee () const
{ {
ScopedLockType sl (mLock); std::lock_guard <std::mutex> sl (lock_);
return mClusterTxnLoadFee; return clusterTxnLoadFee_;
} }
std::uint32_t getLoadBase () const std::uint32_t getLoadBase () const
@@ -91,15 +84,25 @@ public:
std::uint32_t getLoadFactor () const std::uint32_t getLoadFactor () const
{ {
ScopedLockType sl (mLock); std::lock_guard <std::mutex> sl (lock_);
return std::max({ mClusterTxnLoadFee, mLocalTxnLoadFee, mRemoteTxnLoadFee }); return std::max({ clusterTxnLoadFee_, localTxnLoadFee_, remoteTxnLoadFee_ });
}
std::pair<std::uint32_t, std::uint32_t>
getScalingFactors() const
{
std::lock_guard<std::mutex> sl(lock_);
return std::make_pair(
std::max(localTxnLoadFee_, remoteTxnLoadFee_),
std::max(remoteTxnLoadFee_, clusterTxnLoadFee_));
} }
void setClusterFee (std::uint32_t fee) void setClusterFee (std::uint32_t fee)
{ {
ScopedLockType sl (mLock); std::lock_guard <std::mutex> sl (lock_);
mClusterTxnLoadFee = fee; clusterTxnLoadFee_ = fee;
} }
bool raiseLocalFee (); bool raiseLocalFee ();
@@ -107,33 +110,41 @@ public:
bool isLoadedLocal () const bool isLoadedLocal () const
{ {
ScopedLockType sl (mLock); std::lock_guard <std::mutex> sl (lock_);
return (raiseCount != 0) || (mLocalTxnLoadFee != lftNormalFee); return (raiseCount_ != 0) || (localTxnLoadFee_ != lftNormalFee);
} }
bool isLoadedCluster () const bool isLoadedCluster () const
{ {
ScopedLockType sl (mLock); std::lock_guard <std::mutex> sl (lock_);
return (raiseCount != 0) || (mLocalTxnLoadFee != lftNormalFee) || (mClusterTxnLoadFee != lftNormalFee); return (raiseCount_ != 0) || (localTxnLoadFee_ != lftNormalFee) ||
(clusterTxnLoadFee_ != lftNormalFee);
} }
private: private:
static const int lftNormalFee = 256; // 256 is the minimum/normal load factor static std::uint32_t constexpr lftNormalFee = 256; // 256 is the minimum/normal load factor
static const int lftFeeIncFraction = 4; // increase fee by 1/4 static std::uint32_t constexpr lftFeeIncFraction = 4; // increase fee by 1/4
static const int lftFeeDecFraction = 4; // decrease fee by 1/4 static std::uint32_t constexpr lftFeeDecFraction = 4; // decrease fee by 1/4
static const int lftFeeMax = lftNormalFee * 1000000; static std::uint32_t constexpr lftFeeMax = lftNormalFee * 1000000;
beast::Journal m_journal; beast::Journal j_;
using LockType = std::mutex; std::mutex mutable lock_;
using ScopedLockType = std::lock_guard <LockType>;
LockType mutable mLock;
std::uint32_t mLocalTxnLoadFee; // Scale factor, lftNormalFee = normal fee std::uint32_t localTxnLoadFee_; // Scale factor, lftNormalFee = normal fee
std::uint32_t mRemoteTxnLoadFee; // Scale factor, lftNormalFee = normal fee std::uint32_t remoteTxnLoadFee_; // Scale factor, lftNormalFee = normal fee
std::uint32_t mClusterTxnLoadFee; // Scale factor, lftNormalFee = normal fee std::uint32_t clusterTxnLoadFee_; // Scale factor, lftNormalFee = normal fee
int raiseCount; std::uint32_t raiseCount_;
}; };
//------------------------------------------------------------------------------
// Scale from fee units to millionths of a ripple
std::uint64_t scaleFeeBase(std::uint64_t fee, Fees const& fees);
// Scale using load as well as base rate
std::uint64_t scaleFeeLoad(std::uint64_t fee, LoadFeeTrack const& feeTrack,
Fees const& fees, bool bUnlimited);
} // ripple } // ripple
#endif #endif

View File

@@ -36,6 +36,7 @@
#include <ripple/app/ledger/TransactionMaster.h> #include <ripple/app/ledger/TransactionMaster.h>
#include <ripple/app/main/LoadManager.h> #include <ripple/app/main/LoadManager.h>
#include <ripple/app/misc/HashRouter.h> #include <ripple/app/misc/HashRouter.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/Transaction.h> #include <ripple/app/misc/Transaction.h>
#include <ripple/app/misc/TxQ.h> #include <ripple/app/misc/TxQ.h>
#include <ripple/app/misc/Validations.h> #include <ripple/app/misc/Validations.h>
@@ -53,7 +54,6 @@
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/ConfigSections.h> #include <ripple/core/ConfigSections.h>
#include <ripple/core/DeadlineTimer.h> #include <ripple/core/DeadlineTimer.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/TimeKeeper.h> #include <ripple/core/TimeKeeper.h>
#include <ripple/crypto/csprng.h> #include <ripple/crypto/csprng.h>
#include <ripple/crypto/RFC1751.h> #include <ripple/crypto/RFC1751.h>
@@ -1581,13 +1581,14 @@ void NetworkOPsImp::pubServer ()
if (!mSubServer.empty ()) if (!mSubServer.empty ())
{ {
Json::Value jvObj (Json::objectValue); Json::Value jvObj (Json::objectValue);
auto const& feeTrack = app_.getFeeTrack();
jvObj [jss::type] = "serverStatus"; jvObj [jss::type] = "serverStatus";
jvObj [jss::server_status] = strOperatingMode (); jvObj [jss::server_status] = strOperatingMode ();
jvObj [jss::load_base] = jvObj [jss::load_base] =
(mLastLoadBase = app_.getFeeTrack ().getLoadBase ()); (mLastLoadBase = feeTrack.getLoadBase ());
jvObj [jss::load_factor] = jvObj [jss::load_factor] =
(mLastLoadFactor = app_.getFeeTrack ().getLoadFactor ()); (mLastLoadFactor = feeTrack.getLoadFactor ());
for (auto i = mSubServer.begin (); i != mSubServer.end (); ) for (auto i = mSubServer.begin (); i != mSubServer.end (); )
{ {
@@ -2358,8 +2359,9 @@ void NetworkOPsImp::pubLedger (
void NetworkOPsImp::reportFeeChange () void NetworkOPsImp::reportFeeChange ()
{ {
if ((app_.getFeeTrack ().getLoadBase () == mLastLoadBase) && auto const& feeTrack = app_.getFeeTrack();
(app_.getFeeTrack ().getLoadFactor () == mLastLoadFactor)) if ((feeTrack.getLoadBase () == mLastLoadBase) &&
(feeTrack.getLoadFactor () == mLastLoadFactor))
return; return;
m_job_queue.addJob ( m_job_queue.addJob (
@@ -2724,10 +2726,11 @@ bool NetworkOPsImp::subServer (InfoSub::ref isrListener, Json::Value& jvResult,
uRandom.size(), uRandom.size(),
crypto_prng()); crypto_prng());
auto const& feeTrack = app_.getFeeTrack();
jvResult[jss::random] = to_string (uRandom); jvResult[jss::random] = to_string (uRandom);
jvResult[jss::server_status] = strOperatingMode (); jvResult[jss::server_status] = strOperatingMode ();
jvResult[jss::load_base] = app_.getFeeTrack ().getLoadBase (); jvResult[jss::load_base] = feeTrack.getLoadBase ();
jvResult[jss::load_factor] = app_.getFeeTrack ().getLoadFactor (); jvResult[jss::load_factor] = feeTrack.getLoadFactor ();
jvResult [jss::hostid] = getHostId (admin); jvResult [jss::hostid] = getHostId (admin);
jvResult[jss::pubkey_node] = toBase58 ( jvResult[jss::pubkey_node] = toBase58 (
TokenType::TOKEN_NODE_PUBLIC, TokenType::TOKEN_NODE_PUBLIC,

View File

@@ -24,7 +24,6 @@
#include <ripple/ledger/OpenView.h> #include <ripple/ledger/OpenView.h>
#include <ripple/ledger/ApplyView.h> #include <ripple/ledger/ApplyView.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/protocol/TER.h> #include <ripple/protocol/TER.h>
#include <ripple/protocol/STTx.h> #include <ripple/protocol/STTx.h>
#include <boost/intrusive/set.hpp> #include <boost/intrusive/set.hpp>

View File

@@ -18,28 +18,79 @@
//============================================================================== //==============================================================================
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/basics/contract.h> #include <ripple/basics/contract.h>
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/basics/mulDiv.h> #include <ripple/basics/mulDiv.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/ledger/ReadView.h>
#include <ripple/protocol/STAmount.h> #include <ripple/protocol/STAmount.h>
#include <ripple/protocol/JsonFields.h> #include <ripple/protocol/JsonFields.h>
namespace ripple { namespace ripple {
bool
LoadFeeTrack::raiseLocalFee ()
{
std::lock_guard <std::mutex> sl (lock_);
if (++raiseCount_ < 2)
return false;
std::uint32_t origFee = localTxnLoadFee_;
// make sure this fee takes effect
if (localTxnLoadFee_ < remoteTxnLoadFee_)
localTxnLoadFee_ = remoteTxnLoadFee_;
// Increase slowly
localTxnLoadFee_ += (localTxnLoadFee_ / lftFeeIncFraction);
if (localTxnLoadFee_ > lftFeeMax)
localTxnLoadFee_ = lftFeeMax;
if (origFee == localTxnLoadFee_)
return false;
JLOG(j_.debug()) << "Local load fee raised from " <<
origFee << " to " << localTxnLoadFee_;
return true;
}
bool
LoadFeeTrack::lowerLocalFee ()
{
std::lock_guard <std::mutex> sl (lock_);
std::uint32_t origFee = localTxnLoadFee_;
raiseCount_ = 0;
// Reduce slowly
localTxnLoadFee_ -= (localTxnLoadFee_ / lftFeeDecFraction );
if (localTxnLoadFee_ < lftNormalFee)
localTxnLoadFee_ = lftNormalFee;
if (origFee == localTxnLoadFee_)
return false;
JLOG(j_.debug()) << "Local load fee lowered from " <<
origFee << " to " << localTxnLoadFee_;
return true;
}
//------------------------------------------------------------------------------
// Scale from fee units to millionths of a ripple // Scale from fee units to millionths of a ripple
std::uint64_t std::uint64_t
LoadFeeTrack::scaleFeeBase (std::uint64_t fee, std::uint64_t baseFee, scaleFeeBase(std::uint64_t fee, Fees const& fees)
std::uint32_t referenceFeeUnits) const
{ {
return mulDivThrow (fee, baseFee, referenceFeeUnits); return mulDivThrow (fee, fees.base, fees.units);
} }
// Scale using load as well as base rate // Scale using load as well as base rate
std::uint64_t std::uint64_t
LoadFeeTrack::scaleFeeLoad (std::uint64_t fee, std::uint64_t baseFee, scaleFeeLoad(std::uint64_t fee, LoadFeeTrack const& feeTrack,
std::uint32_t referenceFeeUnits, bool bUnlimited) const Fees const& fees, bool bUnlimited)
{ {
if (fee == 0) if (fee == 0)
return fee; return fee;
@@ -47,25 +98,24 @@ LoadFeeTrack::scaleFeeLoad (std::uint64_t fee, std::uint64_t baseFee,
std::uint32_t uRemFee; std::uint32_t uRemFee;
{ {
// Collect the fee rates // Collect the fee rates
std::lock_guard<std::mutex> sl(mLock); std::tie(feeFactor, uRemFee) = feeTrack.getScalingFactors();
feeFactor = std::max(mLocalTxnLoadFee, mRemoteTxnLoadFee);
uRemFee = std::max(mRemoteTxnLoadFee, mClusterTxnLoadFee);
} }
// Let privileged users pay the normal fee until // Let privileged users pay the normal fee until
// the local load exceeds four times the remote. // the local load exceeds four times the remote.
if (bUnlimited && (feeFactor > uRemFee) && (feeFactor < (4 * uRemFee))) if (bUnlimited && (feeFactor > uRemFee) && (feeFactor < (4 * uRemFee)))
feeFactor = uRemFee; feeFactor = uRemFee;
auto baseFee = fees.base;
// Compute: // Compute:
// fee = fee * baseFee * feeFactor / (referenceFeeUnits * lftNormalFee); // fee = fee * baseFee * feeFactor / (fees.units * lftNormalFee);
// without overflow, and as accurately as possible // without overflow, and as accurately as possible
// The denominator of the fraction we're trying to compute. // The denominator of the fraction we're trying to compute.
// referenceFeeUnits and lftNormalFee are both 32 bit, // fees.units and lftNormalFee are both 32 bit,
// so the multiplication can't overflow. // so the multiplication can't overflow.
auto den = static_cast<std::uint64_t>(referenceFeeUnits) auto den = static_cast<std::uint64_t>(fees.units)
* static_cast<std::uint64_t>(lftNormalFee); * static_cast<std::uint64_t>(feeTrack.getLoadBase());
// Reduce fee * baseFee * feeFactor / (referenceFeeUnits * lftNormalFee) // Reduce fee * baseFee * feeFactor / (fees.units * lftNormalFee)
// to lowest terms. // to lowest terms.
lowestTerms(fee, den); lowestTerms(fee, den);
lowestTerms(baseFee, den); lowestTerms(baseFee, den);
@@ -102,53 +152,4 @@ LoadFeeTrack::scaleFeeLoad (std::uint64_t fee, std::uint64_t baseFee,
return fee; return fee;
} }
bool
LoadFeeTrack::raiseLocalFee ()
{
ScopedLockType sl (mLock);
if (++raiseCount < 2)
return false;
std::uint32_t origFee = mLocalTxnLoadFee;
// make sure this fee takes effect
if (mLocalTxnLoadFee < mRemoteTxnLoadFee)
mLocalTxnLoadFee = mRemoteTxnLoadFee;
// Increase slowly
mLocalTxnLoadFee += (mLocalTxnLoadFee / lftFeeIncFraction);
if (mLocalTxnLoadFee > lftFeeMax)
mLocalTxnLoadFee = lftFeeMax;
if (origFee == mLocalTxnLoadFee)
return false;
JLOG(m_journal.debug()) << "Local load fee raised from " <<
origFee << " to " << mLocalTxnLoadFee;
return true;
}
bool
LoadFeeTrack::lowerLocalFee ()
{
ScopedLockType sl (mLock);
std::uint32_t origFee = mLocalTxnLoadFee;
raiseCount = 0;
// Reduce slowly
mLocalTxnLoadFee -= (mLocalTxnLoadFee / lftFeeDecFraction );
if (mLocalTxnLoadFee < lftNormalFee)
mLocalTxnLoadFee = lftNormalFee;
if (origFee == mLocalTxnLoadFee)
return false;
JLOG(m_journal.debug()) << "Local load fee lowered from " <<
origFee << " to " << mLocalTxnLoadFee;
return true;
}
} // ripple } // ripple

View File

@@ -20,6 +20,7 @@
#include <ripple/app/misc/TxQ.h> #include <ripple/app/misc/TxQ.h>
#include <ripple/app/ledger/OpenLedger.h> #include <ripple/app/ledger/OpenLedger.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/tx/apply.h> #include <ripple/app/tx/apply.h>
#include <ripple/protocol/st.h> #include <ripple/protocol/st.h>
#include <ripple/protocol/Feature.h> #include <ripple/protocol/Feature.h>

View File

@@ -23,10 +23,10 @@
#include <ripple/app/paths/PathRequest.h> #include <ripple/app/paths/PathRequest.h>
#include <ripple/app/paths/PathRequests.h> #include <ripple/app/paths/PathRequests.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/net/RPCErr.h> #include <ripple/net/RPCErr.h>
#include <ripple/protocol/ErrorCodes.h> #include <ripple/protocol/ErrorCodes.h>
#include <ripple/protocol/UintTypes.h> #include <ripple/protocol/UintTypes.h>

View File

@@ -18,9 +18,10 @@
//============================================================================== //==============================================================================
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/core/LoadFeeTrack.h> #include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/beast/unit_test.h> #include <ripple/beast/unit_test.h>
#include <ripple/ledger/ReadView.h>
namespace ripple { namespace ripple {
@@ -31,17 +32,26 @@ public:
{ {
Config d; // get a default configuration object Config d; // get a default configuration object
LoadFeeTrack l; LoadFeeTrack l;
Fees const fees = [&]()
{
Fees f;
f.base = d.FEE_DEFAULT;
f.units = d.TRANSACTION_FEE_BASE;
f.reserve = 200 * SYSTEM_CURRENCY_PARTS;
f.increment = 50 * SYSTEM_CURRENCY_PARTS;
return f;
}();
BEAST_EXPECT(l.scaleFeeBase (10000, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 10000); BEAST_EXPECT (scaleFeeBase (10000, fees) == 10000);
BEAST_EXPECT(l.scaleFeeLoad (10000, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE, false) == 10000); BEAST_EXPECT (scaleFeeLoad (10000, l, fees, false) == 10000);
BEAST_EXPECT(l.scaleFeeBase (1, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 1); BEAST_EXPECT (scaleFeeBase (1, fees) == 1);
BEAST_EXPECT(l.scaleFeeLoad (1, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE, false) == 1); BEAST_EXPECT (scaleFeeLoad (1, l, fees, false) == 1);
// Check new default fee values give same fees as old defaults // Check new default fee values give same fees as old defaults
BEAST_EXPECT(l.scaleFeeBase (d.FEE_DEFAULT, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 10); BEAST_EXPECT (scaleFeeBase (d.FEE_DEFAULT, fees) == 10);
BEAST_EXPECT(l.scaleFeeBase (d.FEE_ACCOUNT_RESERVE, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 200 * SYSTEM_CURRENCY_PARTS); BEAST_EXPECT (scaleFeeBase (d.FEE_ACCOUNT_RESERVE, fees) == 200 * SYSTEM_CURRENCY_PARTS);
BEAST_EXPECT(l.scaleFeeBase (d.FEE_OWNER_RESERVE, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 50 * SYSTEM_CURRENCY_PARTS); BEAST_EXPECT (scaleFeeBase (d.FEE_OWNER_RESERVE, fees) == 50 * SYSTEM_CURRENCY_PARTS);
BEAST_EXPECT(l.scaleFeeBase (d.FEE_OFFER, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 10); BEAST_EXPECT (scaleFeeBase (d.FEE_OFFER, fees) == 10);
} }
}; };

View File

@@ -18,10 +18,10 @@
//============================================================================== //==============================================================================
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/TxQ.h> #include <ripple/app/misc/TxQ.h>
#include <ripple/app/ledger/LedgerConsensus.h> #include <ripple/app/ledger/LedgerConsensus.h>
#include <ripple/app/tx/apply.h> #include <ripple/app/tx/apply.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/basics/mulDiv.h> #include <ripple/basics/mulDiv.h>
#include <ripple/basics/TestSuite.h> #include <ripple/basics/TestSuite.h>

View File

@@ -19,13 +19,13 @@
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/tx/apply.h> #include <ripple/app/tx/apply.h>
#include <ripple/app/tx/impl/Transactor.h> #include <ripple/app/tx/impl/Transactor.h>
#include <ripple/app/tx/impl/SignerEntries.h> #include <ripple/app/tx/impl/SignerEntries.h>
#include <ripple/basics/contract.h> #include <ripple/basics/contract.h>
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/json/to_string.h> #include <ripple/json/to_string.h>
#include <ripple/ledger/View.h> #include <ripple/ledger/View.h>
#include <ripple/protocol/Feature.h> #include <ripple/protocol/Feature.h>
@@ -107,8 +107,8 @@ XRPAmount
calculateFee(Application& app, std::uint64_t const baseFee, calculateFee(Application& app, std::uint64_t const baseFee,
Fees const& fees, ApplyFlags flags) Fees const& fees, ApplyFlags flags)
{ {
return app.getFeeTrack().scaleFeeLoad( return scaleFeeLoad(baseFee, app.getFeeTrack(),
baseFee, fees.base, fees.units, flags & tapUNLIMITED); fees, flags & tapUNLIMITED);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------

View File

@@ -19,7 +19,6 @@
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/basics/contract.h> #include <ripple/basics/contract.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/ConfigSections.h> #include <ripple/core/ConfigSections.h>
#include <ripple/basics/TestSuite.h> #include <ripple/basics/TestSuite.h>

View File

@@ -26,6 +26,7 @@
#include <ripple/app/ledger/LedgerTiming.h> #include <ripple/app/ledger/LedgerTiming.h>
#include <ripple/app/ledger/InboundTransactions.h> #include <ripple/app/ledger/InboundTransactions.h>
#include <ripple/app/misc/HashRouter.h> #include <ripple/app/misc/HashRouter.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/app/misc/Transaction.h> #include <ripple/app/misc/Transaction.h>
#include <ripple/app/misc/Validations.h> #include <ripple/app/misc/Validations.h>

View File

@@ -29,7 +29,6 @@
#include <ripple/resource/Fees.h> #include <ripple/resource/Fees.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/Job.h> #include <ripple/core/Job.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/core/LoadEvent.h> #include <ripple/core/LoadEvent.h>
#include <ripple/protocol/Protocol.h> #include <ripple/protocol/Protocol.h>
#include <ripple/protocol/STTx.h> #include <ripple/protocol/STTx.h>

View File

@@ -21,7 +21,7 @@
#include <ripple/rpc/handlers/LedgerHandler.h> #include <ripple/rpc/handlers/LedgerHandler.h>
#include <ripple/app/ledger/LedgerToJson.h> #include <ripple/app/ledger/LedgerToJson.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/core/LoadFeeTrack.h> #include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/json/Object.h> #include <ripple/json/Object.h>
#include <ripple/protocol/ErrorCodes.h> #include <ripple/protocol/ErrorCodes.h>
#include <ripple/protocol/JsonFields.h> #include <ripple/protocol/JsonFields.h>

View File

@@ -24,7 +24,6 @@
#include <ripple/app/ledger/LedgerToJson.h> #include <ripple/app/ledger/LedgerToJson.h>
#include <ripple/app/ledger/LedgerMaster.h> #include <ripple/app/ledger/LedgerMaster.h>
#include <ripple/ledger/ReadView.h> #include <ripple/ledger/ReadView.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/json/Object.h> #include <ripple/json/Object.h>
#include <ripple/protocol/JsonFields.h> #include <ripple/protocol/JsonFields.h>
#include <ripple/rpc/Context.h> #include <ripple/rpc/Context.h>

View File

@@ -19,8 +19,8 @@
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/paths/RippleState.h> #include <ripple/app/paths/RippleState.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/ledger/ReadView.h> #include <ripple/ledger/ReadView.h>
#include <ripple/net/RPCErr.h> #include <ripple/net/RPCErr.h>
#include <ripple/protocol/ErrorCodes.h> #include <ripple/protocol/ErrorCodes.h>
@@ -44,8 +44,8 @@ static void fillTransaction (
auto& fees = ledger.fees(); auto& fees = ledger.fees();
// Convert the reference transaction cost in fee units to drops // Convert the reference transaction cost in fee units to drops
// scaled to represent the current fee load. // scaled to represent the current fee load.
txArray["Fee"] = Json::UInt (context.app.getFeeTrack().scaleFeeLoad( txArray["Fee"] = Json::UInt (scaleFeeLoad(fees.units,
fees.units, fees.base, fees.units, false)); context.app.getFeeTrack(), fees, false));
} }
// { // {

View File

@@ -19,7 +19,7 @@
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/core/LoadFeeTrack.h> #include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/core/TimeKeeper.h> #include <ripple/core/TimeKeeper.h>
#include <ripple/overlay/Cluster.h> #include <ripple/overlay/Cluster.h>
#include <ripple/overlay/Overlay.h> #include <ripple/overlay/Overlay.h>

View File

@@ -21,6 +21,7 @@
#include <ripple/rpc/RipplePathFind.h> #include <ripple/rpc/RipplePathFind.h>
#include <ripple/app/ledger/LedgerMaster.h> #include <ripple/app/ledger/LedgerMaster.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/app/paths/AccountCurrencies.h> #include <ripple/app/paths/AccountCurrencies.h>
#include <ripple/app/paths/PathRequest.h> #include <ripple/app/paths/PathRequest.h>
@@ -28,7 +29,6 @@
#include <ripple/app/paths/RippleCalc.h> #include <ripple/app/paths/RippleCalc.h>
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/core/Config.h> #include <ripple/core/Config.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/json/json_reader.h> #include <ripple/json/json_reader.h>
#include <ripple/json/json_writer.h> #include <ripple/json/json_writer.h>
#include <ripple/ledger/PaymentSandbox.h> #include <ripple/ledger/PaymentSandbox.h>

View File

@@ -19,11 +19,11 @@
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/core/Job.h> #include <ripple/core/Job.h>
#include <ripple/core/JobQueue.h> #include <ripple/core/JobQueue.h>
#include <ripple/rpc/impl/LegacyPathFind.h> #include <ripple/rpc/impl/LegacyPathFind.h>
#include <ripple/rpc/impl/Tuning.h> #include <ripple/rpc/impl/Tuning.h>
#include <ripple/core/LoadFeeTrack.h>
namespace ripple { namespace ripple {
namespace RPC { namespace RPC {

View File

@@ -22,13 +22,13 @@
#include <ripple/app/ledger/LedgerMaster.h> #include <ripple/app/ledger/LedgerMaster.h>
#include <ripple/app/ledger/OpenLedger.h> #include <ripple/app/ledger/OpenLedger.h>
#include <ripple/app/main/Application.h> #include <ripple/app/main/Application.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/Transaction.h> #include <ripple/app/misc/Transaction.h>
#include <ripple/app/misc/TxQ.h> #include <ripple/app/misc/TxQ.h>
#include <ripple/app/paths/Pathfinder.h> #include <ripple/app/paths/Pathfinder.h>
#include <ripple/app/tx/apply.h> // Validity::Valid #include <ripple/app/tx/apply.h> // Validity::Valid
#include <ripple/basics/Log.h> #include <ripple/basics/Log.h>
#include <ripple/basics/mulDiv.h> #include <ripple/basics/mulDiv.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/json/json_writer.h> #include <ripple/json/json_writer.h>
#include <ripple/net/RPCErr.h> #include <ripple/net/RPCErr.h>
#include <ripple/protocol/Sign.h> #include <ripple/protocol/Sign.h>
@@ -690,8 +690,8 @@ Json::Value checkFee (
// Administrative and identified endpoints are exempt from local fees. // Administrative and identified endpoints are exempt from local fees.
std::uint64_t const loadFee = std::uint64_t const loadFee =
feeTrack.scaleFeeLoad (feeDefault, scaleFeeLoad (feeDefault, feeTrack,
ledger->fees().base, ledger->fees().units, isUnlimited (role)); ledger->fees(), isUnlimited (role));
std::uint64_t fee = loadFee; std::uint64_t fee = loadFee;
{ {
auto const assumeTx = request.isMember("x_assume_tx") && auto const assumeTx = request.isMember("x_assume_tx") &&
@@ -711,9 +711,8 @@ Json::Value checkFee (
} }
} }
auto const limit = mulDivThrow(feeTrack.scaleFeeBase ( auto const limit = mulDivThrow(scaleFeeBase (
feeDefault, ledger->fees().base, ledger->fees().units), feeDefault, ledger->fees()), mult, div);
mult, div);
if (fee > limit && fee != loadFee && if (fee > limit && fee != loadFee &&
request.isMember("x_queue_okay") && request.isMember("x_queue_okay") &&

View File

@@ -18,9 +18,9 @@
//============================================================================== //==============================================================================
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/TxQ.h> #include <ripple/app/misc/TxQ.h>
#include <ripple/basics/contract.h> #include <ripple/basics/contract.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/json/json_reader.h> #include <ripple/json/json_reader.h>
#include <ripple/protocol/ErrorCodes.h> #include <ripple/protocol/ErrorCodes.h>
#include <ripple/protocol/Feature.h> #include <ripple/protocol/Feature.h>
@@ -1843,7 +1843,7 @@ public:
{ {
test::jtx::Env env(*this); test::jtx::Env env(*this);
auto ledger = env.current(); auto ledger = env.current();
LoadFeeTrack const& feeTrack = env.app().getFeeTrack(); auto const& feeTrack = env.app().getFeeTrack();
{ {
Json::Value req; Json::Value req;

View File

@@ -16,8 +16,8 @@
//============================================================================== //==============================================================================
#include <BeastConfig.h> #include <BeastConfig.h>
#include <ripple/app/misc/LoadFeeTrack.h>
#include <ripple/app/misc/NetworkOPs.h> #include <ripple/app/misc/NetworkOPs.h>
#include <ripple/core/LoadFeeTrack.h>
#include <ripple/protocol/JsonFields.h> #include <ripple/protocol/JsonFields.h>
#include <ripple/test/WSClient.h> #include <ripple/test/WSClient.h>
#include <ripple/test/jtx.h> #include <ripple/test/jtx.h>
@@ -47,8 +47,9 @@ public:
{ {
// Raise fee to cause an update // Raise fee to cause an update
auto& feeTrack = env.app().getFeeTrack();
for(int i = 0; i < 5; ++i) for(int i = 0; i < 5; ++i)
env.app().getFeeTrack().raiseLocalFee(); feeTrack.raiseLocalFee();
env.app().getOPs().reportFeeChange(); env.app().getOPs().reportFeeChange();
// Check stream update // Check stream update
@@ -67,8 +68,9 @@ public:
{ {
// Raise fee to cause an update // Raise fee to cause an update
auto& feeTrack = env.app().getFeeTrack();
for (int i = 0; i < 5; ++i) for (int i = 0; i < 5; ++i)
env.app().getFeeTrack().raiseLocalFee(); feeTrack.raiseLocalFee();
env.app().getOPs().reportFeeChange(); env.app().getOPs().reportFeeChange();
// Check stream update // Check stream update

View File

@@ -28,6 +28,7 @@
#include <ripple/app/misc/impl/AccountTxPaging.cpp> #include <ripple/app/misc/impl/AccountTxPaging.cpp>
#include <ripple/app/misc/impl/AmendmentTable.cpp> #include <ripple/app/misc/impl/AmendmentTable.cpp>
#include <ripple/app/misc/impl/LoadFeeTrack.cpp>
#include <ripple/app/misc/impl/Transaction.cpp> #include <ripple/app/misc/impl/Transaction.cpp>
#include <ripple/app/misc/impl/TxQ.cpp> #include <ripple/app/misc/impl/TxQ.cpp>
#include <ripple/app/misc/impl/ValidatorList.cpp> #include <ripple/app/misc/impl/ValidatorList.cpp>

View File

@@ -25,6 +25,7 @@
#include <ripple/app/tests/DeliverMin.test.cpp> #include <ripple/app/tests/DeliverMin.test.cpp>
#include <ripple/app/tests/Flow_test.cpp> #include <ripple/app/tests/Flow_test.cpp>
#include <ripple/app/tests/HashRouter_test.cpp> #include <ripple/app/tests/HashRouter_test.cpp>
#include <ripple/app/tests/LoadFeeTrack.test.cpp>
#include <ripple/app/tests/MultiSign.test.cpp> #include <ripple/app/tests/MultiSign.test.cpp>
#include <ripple/app/tests/OfferStream.test.cpp> #include <ripple/app/tests/OfferStream.test.cpp>
#include <ripple/app/tests/Offer.test.cpp> #include <ripple/app/tests/Offer.test.cpp>

View File

@@ -22,7 +22,6 @@
#include <ripple/core/impl/Config.cpp> #include <ripple/core/impl/Config.cpp>
#include <ripple/core/impl/DatabaseCon.cpp> #include <ripple/core/impl/DatabaseCon.cpp>
#include <ripple/core/impl/DeadlineTimer.cpp> #include <ripple/core/impl/DeadlineTimer.cpp>
#include <ripple/core/impl/LoadFeeTrack.cpp>
#include <ripple/core/impl/LoadEvent.cpp> #include <ripple/core/impl/LoadEvent.cpp>
#include <ripple/core/impl/LoadMonitor.cpp> #include <ripple/core/impl/LoadMonitor.cpp>
#include <ripple/core/impl/Job.cpp> #include <ripple/core/impl/Job.cpp>
@@ -35,6 +34,5 @@
#include <ripple/core/tests/Config.test.cpp> #include <ripple/core/tests/Config.test.cpp>
#include <ripple/core/tests/Coroutine.test.cpp> #include <ripple/core/tests/Coroutine.test.cpp>
#include <ripple/core/tests/LoadFeeTrack.test.cpp>
#include <ripple/core/tests/Stoppable.test.cpp> #include <ripple/core/tests/Stoppable.test.cpp>