More cluster status work.

This commit is contained in:
JoelKatz
2013-07-10 11:58:53 -07:00
parent b135ca2fee
commit ea7730a419
5 changed files with 49 additions and 19 deletions

View File

@@ -81,11 +81,10 @@ message TMHello
message TMClusterNode
{
required bytes publicKey = 1;
required uint32 reportSeq = 2;
optional string nodeName = 3;
optional uint32 nodeLoad = 4;
optional uint32 lastHeard = 5;
optional string address = 6;
required uint32 reportTime = 2;
required uint32 nodeLoad = 3;
optional string nodeName = 4;
optional string address = 5;
}
// The status of all nodes in the cluster

View File

@@ -8,15 +8,14 @@ class ClusterNodeStatus
{
public:
ClusterNodeStatus() : mSeq(0), mLoadFee(0), mReportTime(0)
ClusterNodeStatus() : mLoadFee(0), mReportTime(0)
{ ; }
ClusterNodeStatus(std::string const& name) : mNodeName(name), mSeq(0), mLoadFee(0), mReportTime(0)
ClusterNodeStatus(std::string const& name) : mNodeName(name), mLoadFee(0), mReportTime(0)
{ ; }
ClusterNodeStatus(uint32 seq, const std::string& name, uint32 fee, uint32 rtime) :
ClusterNodeStatus(const std::string& name, uint32 fee, uint32 rtime) :
mNodeName(name),
mSeq(seq),
mLoadFee(fee),
mReportTime(rtime)
{ ; }
@@ -26,11 +25,6 @@ public:
return mNodeName;
}
uint32 getSeq()
{
return mSeq;
}
uint32 getLoadFee()
{
return mLoadFee;
@@ -43,9 +37,8 @@ public:
void update(ClusterNodeStatus const& status)
{
if (status.mSeq > mSeq)
if (status.mReportTime > mReportTime)
{
mSeq = status.mSeq;
mLoadFee = status.mLoadFee;
mReportTime = status.mReportTime;
if (mNodeName.empty() || !status.mNodeName.empty())
@@ -55,7 +48,6 @@ public:
private:
std::string mNodeName;
uint32 mSeq;
uint32 mLoadFee;
uint32 mReportTime;
};

View File

@@ -1429,9 +1429,18 @@ void PeerImp::recvCluster (protocol::TMCluster& packet)
{
protocol::TMClusterNode const& node = packet.clusternodes(i);
// Extract RippleAddress and build ClusterNodeStatus
// WRITEME
std::string name;
if (node.has_nodename())
name = node.nodename();
ClusterNodeStatus s(name, node.nodeload(), node.reporttime());
RippleAddress nodePub;
nodePub.setNodePublic(node.publickey());
getApp().getUNL().nodeUpdate(nodePub, s);
}
getApp().getFeeTrack().setClusterFee(getApp().getUNL().getClusterFee());
}
void PeerImp::recvGetValidation (protocol::TMGetValidations& packet)

View File

@@ -342,6 +342,35 @@ public:
//--------------------------------------------------------------------------
uint32 getClusterFee ()
{
uint64 totFee = 0;
int totCount = 0;
int thresh = getApp().getOPs().getNetworkTimeNC();
if (thresh <= 120)
thresh = 1;
else
thresh -= 120;
boost::recursive_mutex::scoped_lock sl (mUNLLock);
{
for (std::map<RippleAddress, ClusterNodeStatus>::iterator it = m_clusterNodes.begin(),
end = m_clusterNodes.end(); it != end; ++it)
{
if (it->second.getReportTime() >= thresh)
{
++totCount;
totFee += it->second.getLoadFee();
}
}
}
return (totCount == 0) ? 0 : static_cast<uint32>(totFee / totCount);
}
//--------------------------------------------------------------------------
void nodeBootstrap ()
{
int iDomains = 0;

View File

@@ -47,6 +47,7 @@ public:
virtual bool nodeInCluster (const RippleAddress& naNodePublic, std::string& name) = 0;
virtual void nodeUpdate (const RippleAddress& naNodePublic, ClusterNodeStatus const& cnsStatus) = 0;
virtual std::map<RippleAddress, ClusterNodeStatus> getClusterStatus () = 0;
virtual uint32 getClusterFee () = 0;
virtual void nodeBootstrap () = 0;
virtual bool nodeLoad (boost::filesystem::path pConfig) = 0;