mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-27 14:35:52 +00:00
More work on the feature table.
This commit is contained in:
@@ -5,15 +5,19 @@
|
||||
#include <boost/unordered_set.hpp>
|
||||
#include <boost/thread/mutex.hpp>
|
||||
|
||||
#include "../json/value.h"
|
||||
|
||||
#include "uint256.h"
|
||||
|
||||
struct FeatureSet
|
||||
class FeatureSet
|
||||
{ // the status of all features requested in a given window
|
||||
uint32 mLedgerSequence;
|
||||
public:
|
||||
uint32 mCloseTime;
|
||||
int mTrustedValidations; // number of trusted validations
|
||||
|
||||
boost::unordered_map<uint256, int> mVotes; // yes votes by feature
|
||||
|
||||
FeatureSet(uint32 ct, int tv) : mCloseTime(ct), mTrustedValidations(tv) { ; }
|
||||
void addVote(const uint256& feature) { ++mVotes[feature]; }
|
||||
};
|
||||
|
||||
class FeatureTable
|
||||
@@ -26,28 +30,31 @@ protected:
|
||||
bool mVetoed; // We don't want this feature enabled
|
||||
bool mEnabled;
|
||||
|
||||
int mEnableVotes; // Trusted votes to enable this feature
|
||||
int mDisableVotes; // Trusted votes to disable this feature
|
||||
uint32 mFirstMajority; // First time we saw a majority (ledger sequence)
|
||||
uint32 mLastMajority; // Most recent time we saw a majority
|
||||
uint32 mFirstMajority; // First time we saw a majority (close time)
|
||||
uint32 mLastMajority; // Most recent time we saw a majority (close time)
|
||||
|
||||
FeatureState() : mVetoed(false), mEnabled(false), mEnableVotes(0), mDisableVotes(0),
|
||||
mFirstMajority(0), mLastMajority(0) { ; }
|
||||
FeatureState() : mVetoed(false), mEnabled(false), mFirstMajority(0), mLastMajority(0) { ; }
|
||||
};
|
||||
|
||||
typedef boost::unordered_map<uint256, FeatureState> featureMap_t;
|
||||
typedef std::pair<uint256, FeatureState> featureIt_t;
|
||||
typedef boost::unordered_set<uint256> featureList_t;
|
||||
|
||||
boost::mutex mMutex;
|
||||
featureMap_t mFeatureMap;
|
||||
int mMajorityTime; // Seconds a feature must hold a majority
|
||||
int mMajorityFraction; // 256 = 100%
|
||||
uint32 mFirstReport; // close time of first majority report
|
||||
uint32 mLastReport; // close time of most recent majority report
|
||||
|
||||
FeatureState* getCreateFeature(const uint256& feature, bool create);
|
||||
bool shouldEnable (uint32 closeTime, const FeatureState& fs);
|
||||
|
||||
public:
|
||||
|
||||
FeatureTable(uint32 majorityTime, int mMajorityFraction) : mMajorityTime(majorityTime) { ; }
|
||||
FeatureTable(uint32 majorityTime, int majorityFraction)
|
||||
: mMajorityTime(majorityTime), mMajorityFraction(majorityFraction), mFirstReport(0)
|
||||
{ ; }
|
||||
|
||||
bool vetoFeature(const uint256& feature);
|
||||
bool unVetoFeature(const uint256& feature);
|
||||
@@ -59,9 +66,11 @@ public:
|
||||
|
||||
featureList_t getVetoedFeatures();
|
||||
featureList_t getEnabledFeatures();
|
||||
featureList_t getFeaturesToEnable(uint32 sequence); // gets features we would vote to enable
|
||||
featureList_t getFeaturesToEnable(uint32 closeTime); // gets features we would vote to enable
|
||||
|
||||
void reportValidations(const FeatureSet&);
|
||||
|
||||
Json::Value getJson(int);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user