mirror of https://github.com/grpc/grpc-java.git
11243: RLS cleanups (#12085)
This commit is contained in:
parent
af7efeb9f5
commit
64322c3243
|
@ -25,8 +25,10 @@ import com.google.common.base.Ticker;
|
|||
import io.grpc.internal.FakeClock;
|
||||
import io.grpc.rls.LruCache.EvictionListener;
|
||||
import io.grpc.rls.LruCache.EvictionType;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import javax.annotation.Nullable;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
|
@ -266,4 +268,91 @@ public class LinkedHashLruCacheTest {
|
|||
return Objects.hash(value, expireTime);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFitToLimitWithReSize() {
|
||||
|
||||
Entry entry1 = new Entry("Entry1", ticker.read() + 10, 4);
|
||||
Entry entry2 = new Entry("Entry2", ticker.read() + 20, 1);
|
||||
Entry entry3 = new Entry("Entry3", ticker.read() + 30, 2);
|
||||
|
||||
cache.cache(1, entry1);
|
||||
cache.cache(2, entry2);
|
||||
cache.cache(3, entry3);
|
||||
|
||||
assertThat(cache.estimatedSize()).isEqualTo(2);
|
||||
assertThat(cache.estimatedSizeBytes()).isEqualTo(3);
|
||||
assertThat(cache.estimatedMaxSizeBytes()).isEqualTo(5);
|
||||
|
||||
cache.resize(2);
|
||||
assertThat(cache.estimatedSize()).isEqualTo(1);
|
||||
assertThat(cache.estimatedSizeBytes()).isEqualTo(2);
|
||||
assertThat(cache.estimatedMaxSizeBytes()).isEqualTo(2);
|
||||
|
||||
assertThat(cache.fitToLimit()).isEqualTo(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFitToLimit() {
|
||||
|
||||
TestFitToLimitEviction localCache = new TestFitToLimitEviction(
|
||||
MAX_SIZE,
|
||||
evictionListener,
|
||||
fakeClock.getTicker()
|
||||
);
|
||||
|
||||
Entry entry1 = new Entry("Entry1", ticker.read() + 10, 4);
|
||||
Entry entry2 = new Entry("Entry2", ticker.read() + 20, 2);
|
||||
Entry entry3 = new Entry("Entry3", ticker.read() + 30, 1);
|
||||
|
||||
localCache.cache(1, entry1);
|
||||
localCache.cache(2, entry2);
|
||||
localCache.cache(3, entry3);
|
||||
|
||||
assertThat(localCache.estimatedSize()).isEqualTo(3);
|
||||
assertThat(localCache.estimatedSizeBytes()).isEqualTo(7);
|
||||
assertThat(localCache.estimatedMaxSizeBytes()).isEqualTo(5);
|
||||
|
||||
localCache.enableEviction();
|
||||
|
||||
assertThat(localCache.fitToLimit()).isEqualTo(true);
|
||||
|
||||
assertThat(localCache.values().contains(entry1)).isFalse();
|
||||
assertThat(localCache.values().containsAll(Arrays.asList(entry2, entry3))).isTrue();
|
||||
|
||||
assertThat(localCache.estimatedSize()).isEqualTo(2);
|
||||
assertThat(localCache.estimatedSizeBytes()).isEqualTo(3);
|
||||
assertThat(localCache.estimatedMaxSizeBytes()).isEqualTo(5);
|
||||
}
|
||||
|
||||
private static class TestFitToLimitEviction extends LinkedHashLruCache<Integer, Entry> {
|
||||
|
||||
private boolean allowEviction = false;
|
||||
|
||||
TestFitToLimitEviction(
|
||||
long estimatedMaxSizeBytes,
|
||||
@Nullable EvictionListener<Integer, Entry> evictionListener,
|
||||
Ticker ticker) {
|
||||
super(estimatedMaxSizeBytes, evictionListener, ticker);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isExpired(Integer key, Entry value, long nowNanos) {
|
||||
return value.expireTime - nowNanos <= 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int estimateSizeOf(Integer key, Entry value) {
|
||||
return value.size;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldInvalidateEldestEntry(Integer eldestKey, Entry eldestValue, long now) {
|
||||
return allowEviction && super.shouldInvalidateEldestEntry(eldestKey, eldestValue, now);
|
||||
}
|
||||
|
||||
public void enableEviction() {
|
||||
allowEviction = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue