From 26e9b5e2f6f52d56f679d845d0fe8356cec381ec Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 4 Dec 2012 13:29:51 -0800 Subject: [PATCH] Updates to local and remote transaction fee factor tracking. --- src/cpp/ripple/LoadManager.cpp | 47 ++++++++++++++++++++++++++++++++++ src/cpp/ripple/LoadManager.h | 27 +++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index 7ccb72060..4791083b1 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -105,3 +105,50 @@ bool LoadManager::adjust(LoadSource& source, int credits) const return false; } + +uint64 LoadTrack::scaleFee(uint64 fee) +{ + static uint64 midrange(0x00000000FFFFFFFF); + int factor = (mLocalTxnLoadFee > mRemoteTxnLoadFee) ? mLocalTxnLoadFee : mRemoteTxnLoadFee; + + if (fee > midrange) // large fee, divide first + return (fee >> 16) * factor; + else // small fee, multiply first + return (fee * factor) >> 16; +} + +void LoadTrack::raiseRemoteFee() +{ + if (mRemoteTxnLoadFee < mLocalTxnLoadFee) // make sure this fee takes effect + mRemoteTxnLoadFee = mLocalTxnLoadFee; + + if (mRemoteTxnLoadFee < 268435456) // no more than a million + mRemoteTxnLoadFee += (mRemoteTxnLoadFee >> 4); // increment by 1/16th +} + +void LoadTrack::lowerRemoteFee() +{ + mLocalTxnLoadFee -= (mLocalTxnLoadFee >> 4); // reduce by 1/16th + + if (mLocalTxnLoadFee < 256) + mLocalTxnLoadFee = 256; +} + +void LoadTrack::raiseLocalFee() +{ + if (mLocalTxnLoadFee < mLocalTxnLoadFee) // make sure this fee takes effect + mLocalTxnLoadFee = mLocalTxnLoadFee; + + if (mLocalTxnLoadFee < 268435456) // no more than a million + mLocalTxnLoadFee += (mLocalTxnLoadFee >> 4); // increment by 1/16th +} + +void LoadTrack::lowerLocalFee() +{ + mLocalTxnLoadFee -= (mLocalTxnLoadFee >> 4); // reduce by 1/16th + + if (mLocalTxnLoadFee < 256) + mLocalTxnLoadFee = 256; +} + +// vim:ts=4 diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index 5b9e2207b..a49ece3f3 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -3,6 +3,8 @@ #include +#include "types.h" + class LoadSource { // a single endpoint that can impose load friend class LoadManager; @@ -60,4 +62,29 @@ public: bool adjust(LoadSource&, int credits) const; // return value: false = balance okay, true = warn/cutoff }; +class LoadTrack +{ // structure that tracks our current fee/load schedule +protected: + + uint32 mLocalTxnLoadFee; // Scale factor, 256 = normal fee + uint32 mRemoteTxnLoadFee; // Scale factor, 256 = normal fee + uint32 mPeerLoadSchedule; // Schedule setting, 0 = normal schedule + uint32 mClientLoadSchedule; // Schedule setting, 0 = normal schedule + +public: + + LoadTrack() : mLocalTxnLoadFee(256), mRemoteTxnLoadFee(256), mPeerLoadSchedule(0), mClientLoadSchedule(0) + { ; } + + uint64 scaleFee(uint64 fee); + + void raiseRemoteFee(); + void raiseLocalFee(); + void lowerRemoteFee(); + void lowerLocalFee(); +}; + + #endif + +// vim:ts=4