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:
@@ -43,9 +43,19 @@ public class EHCacheAdapter
|
|||||||
* cache manager when it knows that Depot and any other clients no longer need it.
|
* cache manager when it knows that Depot and any other clients no longer need it.
|
||||||
*/
|
*/
|
||||||
public EHCacheAdapter (CacheManager cachemgr)
|
public EHCacheAdapter (CacheManager cachemgr)
|
||||||
|
{
|
||||||
|
this(cachemgr, 1000, 300, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EHCacheAdapter (CacheManager cachemgr, int maxElementsInMemory,
|
||||||
|
int timeToIdleSeconds, int timeToLiveSeconds)
|
||||||
{
|
{
|
||||||
_cachemgr = cachemgr;
|
_cachemgr = cachemgr;
|
||||||
|
|
||||||
|
_maxElementsInMemory = maxElementsInMemory;
|
||||||
|
_timeToIdleSeconds = timeToIdleSeconds;
|
||||||
|
_timeToLiveSeconds = timeToLiveSeconds;
|
||||||
|
|
||||||
CacheManagerPeerListener listener = _cachemgr.getCachePeerListener();
|
CacheManagerPeerListener listener = _cachemgr.getCachePeerListener();
|
||||||
CacheManagerPeerProvider provider = _cachemgr.getCachePeerProvider();
|
CacheManagerPeerProvider provider = _cachemgr.getCachePeerProvider();
|
||||||
if ((provider != null) != (listener != null)) {
|
if ((provider != null) != (listener != null)) {
|
||||||
|
|||||||
@@ -81,10 +81,9 @@ public class Throttle
|
|||||||
System.arraycopy(_ops, _lastOp, ops, lastOp, _ops.length - _lastOp);
|
System.arraycopy(_ops, _lastOp, ops, lastOp, _ops.length - _lastOp);
|
||||||
|
|
||||||
} else if (operations < _ops.length) {
|
} else if (operations < _ops.length) {
|
||||||
// copy to a smaller buffer, truncating older operations
|
// if we're truncating, copy the first (oldest) stamps into ops[0..]
|
||||||
int lastOp = (_lastOp + _ops.length - operations) % _ops.length;
|
int endCount = Math.min(operations, _ops.length - _lastOp);
|
||||||
int endCount = Math.min(_ops.length - lastOp, operations);
|
System.arraycopy(_ops, _lastOp, ops, 0, endCount);
|
||||||
System.arraycopy(_ops, lastOp, ops, 0, endCount);
|
|
||||||
System.arraycopy(_ops, 0, ops, endCount, operations - endCount);
|
System.arraycopy(_ops, 0, ops, endCount, operations - endCount);
|
||||||
_lastOp = 0;
|
_lastOp = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user