You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2014/01/08 12:19:09 UTC
svn commit: r1556495 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
test/java/org/apache/jackrabbit/oak/cache/CacheTest.java
Author: thomasm
Date: Wed Jan 8 11:19:09 2014
New Revision: 1556495
URL: http://svn.apache.org/r1556495
Log:
OAK-1094 CacheLIRS implementation incomplete
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/cache/CacheTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java?rev=1556495&r1=1556494&r2=1556495&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java Wed Jan 8 11:19:09 2014
@@ -922,8 +922,12 @@ public class CacheLIRS<K, V> implements
V old = get(key, hash);
long start = System.nanoTime();
try {
- ListenableFuture<V> future = loader.reload(key, old);
- value = future.get();
+ if (old == null) {
+ value = loader.load(key);
+ } else {
+ ListenableFuture<V> future = loader.reload(key, old);
+ value = future.get();
+ }
loadSuccessCount++;
} catch (Exception e) {
loadExceptionCount++;
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/cache/CacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/cache/CacheTest.java?rev=1556495&r1=1556494&r2=1556495&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/cache/CacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/cache/CacheTest.java Wed Jan 8 11:19:09 2014
@@ -30,9 +30,15 @@ import java.util.List;
import java.util.Map.Entry;
import java.util.Random;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
import org.junit.Test;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.Weigher;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+
/**
* Tests the LIRS cache.
*/
@@ -603,4 +609,48 @@ public class CacheTest {
assertTrue(map.isEmpty());
}
+ @Test
+ public void testRefresh() throws ExecutionException {
+ CacheLIRS<Integer, String> cache = new CacheLIRS.Builder().
+ maximumWeight(100).
+ weigher(new Weigher<Integer, String>() {
+
+ @Override
+ public int weigh(Integer key, String value) {
+ return key + value.length();
+ }
+
+ }).
+ build(new CacheLoader<Integer, String>() {
+
+ @Override
+ public String load(Integer key) throws Exception {
+ if (key < 0 || key >= 100) {
+ throw new Exception("Out of range");
+ }
+ return "n" + key;
+ }
+
+ @Override
+ public ListenableFuture<String> reload(Integer key, String oldValue) {
+ assertTrue(oldValue != null);
+ SettableFuture<String> f = SettableFuture.create();
+ f.set(oldValue);
+ return f;
+ }
+
+ });
+ assertEquals("n1", cache.get(1));
+ cache.refresh(1);
+ cache.refresh(2);
+ try {
+ cache.get(-1);
+ fail();
+ } catch (Exception e) {
+ // expected
+ }
+ // expected to log a warning, but not fail
+ cache.refresh(-1);
+ }
+
}