* Build Handler: Drop rather than reject requests when near
conn limits and the next hop is not connected, to reduce connection congestion
This commit is contained in:
@ -65,6 +65,7 @@ class BuildHandler {
|
|||||||
|
|
||||||
_context.statManager().createRateStat("tunnel.rejectOverloaded", "How long we had to wait before processing the request (when it was rejected)", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
_context.statManager().createRateStat("tunnel.rejectOverloaded", "How long we had to wait before processing the request (when it was rejected)", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
||||||
_context.statManager().createRateStat("tunnel.acceptLoad", "Delay before processing the accepted request", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
_context.statManager().createRateStat("tunnel.acceptLoad", "Delay before processing the accepted request", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
||||||
|
_context.statManager().createRateStat("tunnel.dropConnLimits", "Drop instead of reject due to conn limits", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
||||||
_context.statManager().createRateStat("tunnel.dropLoad", "How long we had to wait before finally giving up on an inbound request (period is queue count)?", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
_context.statManager().createRateStat("tunnel.dropLoad", "How long we had to wait before finally giving up on an inbound request (period is queue count)?", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
||||||
_context.statManager().createRateStat("tunnel.dropLoadDelay", "How long we had to wait before finally giving up on an inbound request?", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
_context.statManager().createRateStat("tunnel.dropLoadDelay", "How long we had to wait before finally giving up on an inbound request?", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
||||||
_context.statManager().createRateStat("tunnel.dropLoadBacklog", "How many requests were pending when they were so lagged that we had to drop a new inbound request??", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
_context.statManager().createRateStat("tunnel.dropLoadBacklog", "How many requests were pending when they were so lagged that we had to drop a new inbound request??", "Tunnels", new long[] { 60*1000, 10*60*1000 });
|
||||||
@ -466,7 +467,6 @@ class BuildHandler {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String PROP_REJECT_NONPARTICIPANT = "router.participantOnly";
|
|
||||||
private void handleReq(RouterInfo nextPeerInfo, BuildMessageState state, BuildRequestRecord req, Hash nextPeer) {
|
private void handleReq(RouterInfo nextPeerInfo, BuildMessageState state, BuildRequestRecord req, Hash nextPeer) {
|
||||||
long ourId = req.readReceiveTunnelId();
|
long ourId = req.readReceiveTunnelId();
|
||||||
long nextId = req.readNextTunnelId();
|
long nextId = req.readNextTunnelId();
|
||||||
@ -569,6 +569,17 @@ class BuildHandler {
|
|||||||
(isOutEnd ? "outbound endpoint" : isInGW ? "inbound gw" : "participant"));
|
(isOutEnd ? "outbound endpoint" : isInGW ? "inbound gw" : "participant"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Connection congestion control:
|
||||||
|
// If we rejected the request, are near our conn limits, and aren't connected to the next hop,
|
||||||
|
// just drop it.
|
||||||
|
if (response != 0 &&
|
||||||
|
(! _context.routerHash().equals(nextPeer)) &&
|
||||||
|
(! _context.commSystem().haveOutboundCapacity()) &&
|
||||||
|
(! _context.commSystem().isEstablished(nextPeer))) {
|
||||||
|
_context.statManager().addRateData("tunnel.dropConnLimits", 1, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BuildResponseRecord resp = new BuildResponseRecord();
|
BuildResponseRecord resp = new BuildResponseRecord();
|
||||||
byte reply[] = resp.create(_context, response, req.readReplyKey(), req.readReplyIV(), state.msg.getUniqueId());
|
byte reply[] = resp.create(_context, response, req.readReplyKey(), req.readReplyIV(), state.msg.getUniqueId());
|
||||||
for (int j = 0; j < TunnelBuildMessage.RECORD_COUNT; j++) {
|
for (int j = 0; j < TunnelBuildMessage.RECORD_COUNT; j++) {
|
||||||
|
Reference in New Issue
Block a user