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);
+    }
+    
 }