More work on the feature table.

This commit is contained in:
JoelKatz
2012-12-02 17:01:53 -08:00
parent 5f7d655d7d
commit 6b77a141d8
2 changed files with 136 additions and 11 deletions

View File

@@ -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