@Override public boolean apply(ServiceInstance<T> instance) { purge(); Status status = statuses.get(instance); return (status == null) || (status.errorCount.get() < downInstancePolicy.getErrorThreshold()); }
private void purge() { long localLastPurge = lastPurge.get(); long ticksSinceLastPurge = System.currentTimeMillis() - localLastPurge; if (ticksSinceLastPurge < (downInstancePolicy.getTimeoutMs() / 2) ) { return; } if ( !lastPurge.compareAndSet(localLastPurge, System.currentTimeMillis()) ) { return; } Iterator<Map.Entry<ServiceInstance<?>, Status>> it = statuses.entrySet().iterator(); while ( it.hasNext() ) { Map.Entry<ServiceInstance<?>, Status> entry = it.next(); long elapsedMs = System.currentTimeMillis() - entry.getValue().startMs; if ( elapsedMs >= downInstancePolicy.getTimeoutMs() ) { it.remove(); } } } }
private void purge() { long localLastPurge = lastPurge.get(); long ticksSinceLastPurge = System.currentTimeMillis() - localLastPurge; if ( ticksSinceLastPurge < (downInstancePolicy.getTimeoutMs() / 2) ) { return; } if ( !lastPurge.compareAndSet(localLastPurge, System.currentTimeMillis()) ) { return; } Iterator<Entry<ServiceInstance<?>, Status>> it = statuses.entrySet().iterator(); while ( it.hasNext() ) { Entry<ServiceInstance<?>, Status> entry = it.next(); long elapsedMs = System.currentTimeMillis() - entry.getValue().startMs; if ( elapsedMs >= downInstancePolicy.getTimeoutMs() ) { it.remove(); } } } }
@Override public boolean apply(ServiceInstance<T> instance) { purge(); Status status = statuses.get(instance); return (status == null) || (status.errorCount.get() < downInstancePolicy.getErrorThreshold()); }
private void purge() { long localLastPurge = lastPurge.get(); long ticksSinceLastPurge = System.currentTimeMillis() - localLastPurge; if ( ticksSinceLastPurge < (downInstancePolicy.getTimeoutMs() / 2) ) { return; } if ( !lastPurge.compareAndSet(localLastPurge, System.currentTimeMillis()) ) { return; } Iterator<Entry<ServiceInstance<?>, Status>> it = statuses.entrySet().iterator(); while ( it.hasNext() ) { Entry<ServiceInstance<?>, Status> entry = it.next(); long elapsedMs = System.currentTimeMillis() - entry.getValue().startMs; if ( elapsedMs >= downInstancePolicy.getTimeoutMs() ) { it.remove(); } } } }
@Override public boolean apply(ServiceInstance<T> instance) { purge(); Status status = statuses.get(instance); return (status == null) || (status.errorCount.get() < downInstancePolicy.getErrorThreshold()); }