mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 22:50:59 +01:00
net: move send/recv statistics to CConnman
This commit is contained in:
63
src/net.cpp
63
src/net.cpp
@@ -298,15 +298,6 @@ bool IsReachable(const CNetAddr& addr)
|
||||
return IsReachable(net);
|
||||
}
|
||||
|
||||
uint64_t CNode::nTotalBytesRecv = 0;
|
||||
uint64_t CNode::nTotalBytesSent = 0;
|
||||
CCriticalSection CNode::cs_totalBytesRecv;
|
||||
CCriticalSection CNode::cs_totalBytesSent;
|
||||
|
||||
uint64_t CNode::nMaxOutboundLimit = 0;
|
||||
uint64_t CNode::nMaxOutboundTotalBytesSentInCycle = 0;
|
||||
uint64_t CNode::nMaxOutboundTimeframe = 60*60*24; //1 day
|
||||
uint64_t CNode::nMaxOutboundCycleStartTime = 0;
|
||||
|
||||
CNode* CConnman::FindNode(const CNetAddr& ip)
|
||||
{
|
||||
@@ -804,7 +795,6 @@ size_t SocketSendData(CNode *pnode)
|
||||
pnode->nLastSend = GetTime();
|
||||
pnode->nSendBytes += nBytes;
|
||||
pnode->nSendOffset += nBytes;
|
||||
pnode->RecordBytesSent(nBytes);
|
||||
nSentSize += nBytes;
|
||||
if (pnode->nSendOffset == data.size()) {
|
||||
pnode->nSendOffset = 0;
|
||||
@@ -1176,9 +1166,15 @@ void CConnman::ThreadSocketHandler()
|
||||
// * We process a message in the buffer (message handler thread).
|
||||
{
|
||||
TRY_LOCK(pnode->cs_vSend, lockSend);
|
||||
if (lockSend && !pnode->vSendMsg.empty()) {
|
||||
FD_SET(pnode->hSocket, &fdsetSend);
|
||||
continue;
|
||||
if (lockSend) {
|
||||
if (pnode->nOptimisticBytesWritten) {
|
||||
RecordBytesSent(pnode->nOptimisticBytesWritten);
|
||||
pnode->nOptimisticBytesWritten = 0;
|
||||
}
|
||||
if (!pnode->vSendMsg.empty()) {
|
||||
FD_SET(pnode->hSocket, &fdsetSend);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
@@ -1257,7 +1253,7 @@ void CConnman::ThreadSocketHandler()
|
||||
messageHandlerCondition.notify_one();
|
||||
pnode->nLastRecv = GetTime();
|
||||
pnode->nRecvBytes += nBytes;
|
||||
pnode->RecordBytesRecv(nBytes);
|
||||
RecordBytesRecv(nBytes);
|
||||
}
|
||||
else if (nBytes == 0)
|
||||
{
|
||||
@@ -1289,8 +1285,11 @@ void CConnman::ThreadSocketHandler()
|
||||
if (FD_ISSET(pnode->hSocket, &fdsetSend))
|
||||
{
|
||||
TRY_LOCK(pnode->cs_vSend, lockSend);
|
||||
if (lockSend)
|
||||
SocketSendData(pnode);
|
||||
if (lockSend) {
|
||||
size_t nBytes = SocketSendData(pnode);
|
||||
if (nBytes)
|
||||
RecordBytesSent(nBytes);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -2060,6 +2059,13 @@ NodeId CConnman::GetNewNodeId()
|
||||
|
||||
bool CConnman::Start(boost::thread_group& threadGroup, CScheduler& scheduler, std::string& strNodeError)
|
||||
{
|
||||
nTotalBytesRecv = 0;
|
||||
nTotalBytesSent = 0;
|
||||
nMaxOutboundLimit = 0;
|
||||
nMaxOutboundTotalBytesSentInCycle = 0;
|
||||
nMaxOutboundTimeframe = 60*60*24; //1 day
|
||||
nMaxOutboundCycleStartTime = 0;
|
||||
|
||||
uiInterface.InitMessage(_("Loading addresses..."));
|
||||
// Load addresses from peers.dat
|
||||
int64_t nStart = GetTimeMillis();
|
||||
@@ -2344,13 +2350,13 @@ void CConnman::RelayTransaction(const CTransaction& tx)
|
||||
}
|
||||
}
|
||||
|
||||
void CNode::RecordBytesRecv(uint64_t bytes)
|
||||
void CConnman::RecordBytesRecv(uint64_t bytes)
|
||||
{
|
||||
LOCK(cs_totalBytesRecv);
|
||||
nTotalBytesRecv += bytes;
|
||||
}
|
||||
|
||||
void CNode::RecordBytesSent(uint64_t bytes)
|
||||
void CConnman::RecordBytesSent(uint64_t bytes)
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
nTotalBytesSent += bytes;
|
||||
@@ -2367,7 +2373,7 @@ void CNode::RecordBytesSent(uint64_t bytes)
|
||||
nMaxOutboundTotalBytesSentInCycle += bytes;
|
||||
}
|
||||
|
||||
void CNode::SetMaxOutboundTarget(uint64_t limit)
|
||||
void CConnman::SetMaxOutboundTarget(uint64_t limit)
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
uint64_t recommendedMinimum = (nMaxOutboundTimeframe / 600) * MAX_BLOCK_SERIALIZED_SIZE;
|
||||
@@ -2377,19 +2383,19 @@ void CNode::SetMaxOutboundTarget(uint64_t limit)
|
||||
LogPrintf("Max outbound target is very small (%s bytes) and will be overshot. Recommended minimum is %s bytes.\n", nMaxOutboundLimit, recommendedMinimum);
|
||||
}
|
||||
|
||||
uint64_t CNode::GetMaxOutboundTarget()
|
||||
uint64_t CConnman::GetMaxOutboundTarget()
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
return nMaxOutboundLimit;
|
||||
}
|
||||
|
||||
uint64_t CNode::GetMaxOutboundTimeframe()
|
||||
uint64_t CConnman::GetMaxOutboundTimeframe()
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
return nMaxOutboundTimeframe;
|
||||
}
|
||||
|
||||
uint64_t CNode::GetMaxOutboundTimeLeftInCycle()
|
||||
uint64_t CConnman::GetMaxOutboundTimeLeftInCycle()
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
if (nMaxOutboundLimit == 0)
|
||||
@@ -2403,7 +2409,7 @@ uint64_t CNode::GetMaxOutboundTimeLeftInCycle()
|
||||
return (cycleEndTime < now) ? 0 : cycleEndTime - GetTime();
|
||||
}
|
||||
|
||||
void CNode::SetMaxOutboundTimeframe(uint64_t timeframe)
|
||||
void CConnman::SetMaxOutboundTimeframe(uint64_t timeframe)
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
if (nMaxOutboundTimeframe != timeframe)
|
||||
@@ -2415,7 +2421,7 @@ void CNode::SetMaxOutboundTimeframe(uint64_t timeframe)
|
||||
nMaxOutboundTimeframe = timeframe;
|
||||
}
|
||||
|
||||
bool CNode::OutboundTargetReached(bool historicalBlockServingLimit)
|
||||
bool CConnman::OutboundTargetReached(bool historicalBlockServingLimit)
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
if (nMaxOutboundLimit == 0)
|
||||
@@ -2435,7 +2441,7 @@ bool CNode::OutboundTargetReached(bool historicalBlockServingLimit)
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t CNode::GetOutboundTargetBytesLeft()
|
||||
uint64_t CConnman::GetOutboundTargetBytesLeft()
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
if (nMaxOutboundLimit == 0)
|
||||
@@ -2444,13 +2450,13 @@ uint64_t CNode::GetOutboundTargetBytesLeft()
|
||||
return (nMaxOutboundTotalBytesSentInCycle >= nMaxOutboundLimit) ? 0 : nMaxOutboundLimit - nMaxOutboundTotalBytesSentInCycle;
|
||||
}
|
||||
|
||||
uint64_t CNode::GetTotalBytesRecv()
|
||||
uint64_t CConnman::GetTotalBytesRecv()
|
||||
{
|
||||
LOCK(cs_totalBytesRecv);
|
||||
return nTotalBytesRecv;
|
||||
}
|
||||
|
||||
uint64_t CNode::GetTotalBytesSent()
|
||||
uint64_t CConnman::GetTotalBytesSent()
|
||||
{
|
||||
LOCK(cs_totalBytesSent);
|
||||
return nTotalBytesSent;
|
||||
@@ -2548,6 +2554,7 @@ CNode::CNode(NodeId idIn, SOCKET hSocketIn, const CAddress& addrIn, const std::s
|
||||
lastSentFeeFilter = 0;
|
||||
nextSendTimeFeeFilter = 0;
|
||||
id = idIn;
|
||||
nOptimisticBytesWritten = 0;
|
||||
|
||||
GetRandBytes((unsigned char*)&nLocalHostNonce, sizeof(nLocalHostNonce));
|
||||
|
||||
@@ -2665,7 +2672,7 @@ void CNode::EndMessage(const char* pszCommand) UNLOCK_FUNCTION(cs_vSend)
|
||||
|
||||
// If write queue empty, attempt "optimistic write"
|
||||
if (it == vSendMsg.begin())
|
||||
SocketSendData(this);
|
||||
nOptimisticBytesWritten += SocketSendData(this);
|
||||
|
||||
LEAVE_CRITICAL_SECTION(cs_vSend);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user