Skip to content

Commit 15a725e

Browse files
committed
Add new throttling metrics
1 parent d2e6be1 commit 15a725e

7 files changed

+22
-7
lines changed

src/overlay/FlowControl.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,13 @@ FlowControl::maybeReleaseCapacityAndTriggerSend(StellarMessage const& msg)
111111

112112
if (msg.type() == SEND_MORE || msg.type() == SEND_MORE_EXTENDED)
113113
{
114+
if (mNoOutboundCapacity)
115+
{
116+
mApp.getOverlayManager()
117+
.getOverlayMetrics()
118+
.mConnectionFloodThrottle.Update(mApp.getClock().now() -
119+
*mNoOutboundCapacity);
120+
}
114121
mNoOutboundCapacity.reset();
115122

116123
mFlowControlCapacity->releaseOutboundCapacity(msg);

src/overlay/OverlayMetrics.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ OverlayMetrics::OverlayMetrics(Application& app)
3232
{"overlay", "timeout", "straggler"}, "timeout"))
3333
, mConnectionLatencyTimer(
3434
app.getMetrics().NewTimer({"overlay", "connection", "latency"}))
35+
, mConnectionReadThrottle(
36+
app.getMetrics().NewTimer({"overlay", "connection", "read-throttle"}))
37+
, mConnectionFloodThrottle(app.getMetrics().NewTimer(
38+
{"overlay", "connection", "flood-throttle"}))
3539

3640
, mItemFetcherNextPeer(app.getMetrics().NewMeter(
3741
{"overlay", "item-fetcher", "next-peer"}, "item-fetcher"))

src/overlay/OverlayMetrics.h

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ struct OverlayMetrics
3434
medida::Meter& mTimeoutIdle;
3535
medida::Meter& mTimeoutStraggler;
3636
medida::Timer& mConnectionLatencyTimer;
37+
medida::Timer& mConnectionReadThrottle;
38+
medida::Timer& mConnectionFloodThrottle;
3739

3840
medida::Meter& mItemFetcherNextPeer;
3941

src/overlay/Peer.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,13 @@ Peer::endMessageProcessing(StellarMessage const& msg)
170170
mFlowControl->endMessageProcessing(msg, shared_from_this());
171171

172172
releaseAssert(canRead());
173-
if (mIsPeerThrottled)
173+
if (mLastThrottle)
174174
{
175175
CLOG_DEBUG(Overlay, "Stop throttling reading from peer {}",
176176
mApp.getConfig().toShortString(getPeerID()));
177-
mIsPeerThrottled = false;
177+
getOverlayMetrics().mConnectionReadThrottle.Update(
178+
mApp.getClock().now() - *mLastThrottle);
179+
mLastThrottle.reset();
178180
scheduleRead();
179181
}
180182
}

src/overlay/Peer.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ class Peer : public std::enable_shared_from_this<Peer>,
201201
};
202202

203203
// Is this peer currently throttled due to lack of capacity
204-
bool mIsPeerThrottled{false};
204+
std::optional<VirtualClock::time_point> mLastThrottle;
205205

206206
// Does local node have capacity to read from this peer
207207
bool canRead() const;

src/overlay/TCPPeer.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ TCPPeer::scheduleRead()
461461
// this will be throttled to try to balance input rates across peers.
462462
ZoneScoped;
463463

464-
if (mIsPeerThrottled)
464+
if (mLastThrottle)
465465
{
466466
return;
467467
}
@@ -543,7 +543,7 @@ TCPPeer::startRead()
543543
// Break and wait until more capacity frees up
544544
CLOG_DEBUG(Overlay, "Throttle reading from peer {}!",
545545
mApp.getConfig().toShortString(getPeerID()));
546-
mIsPeerThrottled = true;
546+
mLastThrottle = mApp.getClock().now();
547547
return;
548548
}
549549
if (mApp.getClock().shouldYield())
@@ -689,7 +689,7 @@ TCPPeer::readBodyHandler(asio::error_code const& error,
689689
CLOG_DEBUG(Overlay,
690690
"TCPPeer::readBodyHandler: throttle reading from {}",
691691
mApp.getConfig().toShortString(getPeerID()));
692-
mIsPeerThrottled = true;
692+
mLastThrottle = mApp.getClock().now();
693693
return;
694694
}
695695

src/overlay/test/LoopbackPeer.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ LoopbackPeer::processInQueue()
231231
{
232232
if (!canRead())
233233
{
234-
mIsPeerThrottled = true;
234+
mLastThrottle = mApp.getClock().now();
235235
return;
236236
}
237237

0 commit comments

Comments
 (0)