When we reinitialize the Throttle with a smaller number of allowed operations within a time period, we should preserve the oldest rather than the newest ones, or we'll most likely be in immediate and unfair violation of the limit.

git-svn-id: https://samskivert.googlecode.com/svn/trunk@2469 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
par.winzell
2008-11-05 00:18:21 +00:00
parent 26ca5335c6
commit 2045c0d563
2 changed files with 13 additions and 4 deletions
@@ -43,9 +43,19 @@ public class EHCacheAdapter
* cache manager when it knows that Depot and any other clients no longer need it.
*/
public EHCacheAdapter (CacheManager cachemgr)
{
this(cachemgr, 1000, 300, 20);
}
public EHCacheAdapter (CacheManager cachemgr, int maxElementsInMemory,
int timeToIdleSeconds, int timeToLiveSeconds)
{
_cachemgr = cachemgr;
_maxElementsInMemory = maxElementsInMemory;
_timeToIdleSeconds = timeToIdleSeconds;
_timeToLiveSeconds = timeToLiveSeconds;
CacheManagerPeerListener listener = _cachemgr.getCachePeerListener();
CacheManagerPeerProvider provider = _cachemgr.getCachePeerProvider();
if ((provider != null) != (listener != null)) {
+3 -4
View File
@@ -81,10 +81,9 @@ public class Throttle
System.arraycopy(_ops, _lastOp, ops, lastOp, _ops.length - _lastOp);
} else if (operations < _ops.length) {
// copy to a smaller buffer, truncating older operations
int lastOp = (_lastOp + _ops.length - operations) % _ops.length;
int endCount = Math.min(_ops.length - lastOp, operations);
System.arraycopy(_ops, lastOp, ops, 0, endCount);
// if we're truncating, copy the first (oldest) stamps into ops[0..]
int endCount = Math.min(operations, _ops.length - _lastOp);
System.arraycopy(_ops, _lastOp, ops, 0, endCount);
System.arraycopy(_ops, 0, ops, endCount, operations - endCount);
_lastOp = 0;
}