diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index 4791083b1..5f2f60f2c 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -106,49 +106,39 @@ bool LoadManager::adjust(LoadSource& source, int credits) const return false; } -uint64 LoadTrack::scaleFee(uint64 fee) +uint64 LoadFeeTrack::scaleFee(uint64 fee) { static uint64 midrange(0x00000000FFFFFFFF); int factor = (mLocalTxnLoadFee > mRemoteTxnLoadFee) ? mLocalTxnLoadFee : mRemoteTxnLoadFee; if (fee > midrange) // large fee, divide first - return (fee >> 16) * factor; + return (fee / lftNormalFee) * factor; else // small fee, multiply first - return (fee * factor) >> 16; + return (fee * factor) / lftNormalFee; } -void LoadTrack::raiseRemoteFee() +void LoadFeeTrack::setRemoteFee(uint32 f) { - 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 + mRemoteTxnLoadFee = f; } -void LoadTrack::lowerRemoteFee() -{ - mLocalTxnLoadFee -= (mLocalTxnLoadFee >> 4); // reduce by 1/16th - - if (mLocalTxnLoadFee < 256) - mLocalTxnLoadFee = 256; -} - -void LoadTrack::raiseLocalFee() +void LoadFeeTrack::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 + mLocalTxnLoadFee += (mLocalTxnLoadFee / lftFeeIncFraction); // increment by 1/16th + + if (mLocalTxnLoadFee > lftFeeMax) + mLocalTxnLoadFee = lftFeeMax; } -void LoadTrack::lowerLocalFee() +void LoadFeeTrack::lowerLocalFee() { - mLocalTxnLoadFee -= (mLocalTxnLoadFee >> 4); // reduce by 1/16th + mLocalTxnLoadFee -= (mLocalTxnLoadFee / lftFeeDecFraction ); // reduce by 1/16th - if (mLocalTxnLoadFee < 256) - mLocalTxnLoadFee = 256; + if (mLocalTxnLoadFee < lftNormalFee) + mLocalTxnLoadFee = lftNormalFee; } // vim:ts=4 diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index a49ece3f3..9280f3b53 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -62,25 +62,30 @@ public: bool adjust(LoadSource&, int credits) const; // return value: false = balance okay, true = warn/cutoff }; -class LoadTrack +class LoadFeeTrack { // structure that tracks our current fee/load schedule protected: - uint32 mLocalTxnLoadFee; // Scale factor, 256 = normal fee - uint32 mRemoteTxnLoadFee; // Scale factor, 256 = normal fee + static const int lftNormalFee = 256; // 256 is the minimum/normal load factor + static const int lftFeeIncFraction = 16; // increase fee by 1/16 + static const int lftFeeDecFraction = 16; // decrease fee by 1/16 + static const int lftFeeMax = lftNormalFee * 1000000; + + uint32 mLocalTxnLoadFee; // Scale factor, lftNormalFee = normal fee + uint32 mRemoteTxnLoadFee; // Scale factor, lftNormalFee = 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) + LoadFeeTrack() + : mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee), mPeerLoadSchedule(0), mClientLoadSchedule(0) { ; } uint64 scaleFee(uint64 fee); - void raiseRemoteFee(); + void setRemoteFee(uint32); void raiseLocalFee(); - void lowerRemoteFee(); void lowerLocalFee(); };