* Increased sendProcessingTime limits and added testSuccessTime
to avoid unwanted throttling
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
2009-05-27 Mathiasdm
|
||||||
|
* Increased sendProcessingTime limits and added testSuccessTime
|
||||||
|
to avoid unwanted throttling
|
||||||
|
|
||||||
2009-05-26 Mathiasdm
|
2009-05-26 Mathiasdm
|
||||||
* Throttling extension by looking at sendProcessingTime
|
* Throttling extension by looking at sendProcessingTime
|
||||||
|
|
||||||
|
@ -112,35 +112,60 @@ class RouterThrottleImpl implements RouterThrottle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Reject tunnels if the time to process messages and send them is too large. Too much time implies congestion.
|
//Reject tunnels if the time to process messages and send them is too large. Too much time implies congestion.
|
||||||
if(r != null) {
|
Rate r2 = _context.statManager().getRate("tunnel.testSuccessTime").getRate(60*1000);
|
||||||
double totalEvents = r.getCurrentEventCount() + r.getLastEventCount();
|
if(r != null && r2 != null) {
|
||||||
double avg = 0;
|
double totalSendProcessingTimeEvents = r.getCurrentEventCount() + r.getLastEventCount();
|
||||||
double current = 0;
|
double avgSendProcessingTime = 0;
|
||||||
double last = 0;
|
double currentSendProcessingTime = 0;
|
||||||
|
double lastSendProcessingTime = 0;
|
||||||
|
|
||||||
|
double totalTestSuccessTimeEvents = r2.getCurrentEventCount() + r2.getLastEventCount();
|
||||||
|
double avgTestSuccessTime = 0;
|
||||||
|
double currentTestSuccessTime = 0;
|
||||||
|
double lastTestSuccessTime = 0;
|
||||||
|
|
||||||
//Calculate times
|
//Calculate times
|
||||||
if(r.getCurrentEventCount() > 0) {
|
if(r.getCurrentEventCount() > 0) {
|
||||||
current = r.getCurrentTotalValue()/r.getCurrentEventCount();
|
currentSendProcessingTime = r.getCurrentTotalValue()/r.getCurrentEventCount();
|
||||||
}
|
}
|
||||||
if(r.getLastEventCount() > 0) {
|
if(r.getLastEventCount() > 0) {
|
||||||
last = r.getLastTotalValue()/r.getLastEventCount();
|
lastSendProcessingTime = r.getLastTotalValue()/r.getLastEventCount();
|
||||||
}
|
}
|
||||||
if(totalEvents > 0) {
|
if(totalSendProcessingTimeEvents > 0) {
|
||||||
avg = (r.getCurrentTotalValue() + r.getLastTotalValue())/totalEvents;
|
avgSendProcessingTime = (r.getCurrentTotalValue() + r.getLastTotalValue())/totalSendProcessingTimeEvents;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
avg = r.getAverageValue();
|
avgSendProcessingTime = r.getAverageValue();
|
||||||
if(_log.shouldLog(Log.WARN)) {
|
if(_log.shouldLog(Log.WARN)) {
|
||||||
_log.warn("No events occurred. Using 1 minute average to look at message delay.");
|
_log.warn("No events occurred. Using 1 minute average to look at message delay.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//Set throttling if necessary
|
|
||||||
if(avg > 400 || current > 500 || last > 500) {
|
if(r2.getCurrentEventCount() > 0) {
|
||||||
|
currentTestSuccessTime = r2.getCurrentTotalValue()/r.getCurrentEventCount();
|
||||||
|
}
|
||||||
|
if(r2.getLastEventCount() > 0) {
|
||||||
|
lastTestSuccessTime = r2.getLastTotalValue()/r2.getLastEventCount();
|
||||||
|
}
|
||||||
|
if(totalTestSuccessTimeEvents > 0) {
|
||||||
|
avgTestSuccessTime = (r2.getCurrentTotalValue() + r.getLastTotalValue())/totalTestSuccessTimeEvents;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
avgTestSuccessTime = r2.getAverageValue();
|
||||||
if(_log.shouldLog(Log.WARN)) {
|
if(_log.shouldLog(Log.WARN)) {
|
||||||
_log.warn("Refusing tunnel request due to sendProcessingTime of " + avg
|
_log.warn("No events occurred. Using 1 minute average to look at message delay.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set throttling if necessary
|
||||||
|
if((avgSendProcessingTime > 800 || currentSendProcessingTime > 1000 || lastSendProcessingTime > 1000)
|
||||||
|
&& (currentTestSuccessTime > 3000 || lastTestSuccessTime > 3000)) {
|
||||||
|
if(_log.shouldLog(Log.WARN)) {
|
||||||
|
_log.warn("Refusing tunnel request due to sendProcessingTime of " + avgSendProcessingTime
|
||||||
+ " ms over the last two minutes, which is too much.");
|
+ " ms over the last two minutes, which is too much.");
|
||||||
}
|
}
|
||||||
setTunnelStatus("Rejecting tunnels: High message delay implying possible congestion");
|
setTunnelStatus("Rejecting tunnels: congestion");
|
||||||
return TunnelHistory.TUNNEL_REJECT_TRANSIENT_OVERLOAD;
|
return TunnelHistory.TUNNEL_REJECT_BANDWIDTH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user