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 md...@apache.org on 2017/03/21 09:50:02 UTC
svn commit: r1787922 - in /jackrabbit/oak/trunk/oak-segment-tar/src:
main/java/org/apache/jackrabbit/oak/segment/file/PriorityCache.java
test/java/org/apache/jackrabbit/oak/segment/file/PriorityCacheTest.java
Author: mduerig
Date: Tue Mar 21 09:50:02 2017
New Revision: 1787922
URL: http://svn.apache.org/viewvc?rev=1787922&view=rev
Log:
OAK-5952: Wrong eviction count reported by PriorityCache statistics
Test case and clarified implementation
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PriorityCache.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/PriorityCacheTest.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PriorityCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PriorityCache.java?rev=1787922&r1=1787921&r2=1787922&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PriorityCache.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/PriorityCache.java Tue Mar 21 09:50:02 2017
@@ -208,6 +208,7 @@ public class PriorityCache<K, V> {
if (entry == Entry.NULL) {
// Empty slot -> use this index
index = i;
+ eviction = false;
break;
} else if (entry.generation <= generation && key.equals(entry.key)) {
// Key exists and generation is greater or equal -> use this index and boost the cost
@@ -216,10 +217,12 @@ public class PriorityCache<K, V> {
if (initialCost < Byte.MAX_VALUE) {
initialCost++;
}
+ eviction = false;
break;
} else if (entry.generation < generation) {
// Old generation -> use this index
index = i;
+ eviction = false;
break;
} else if (entry.cost < cheapest) {
// Candidate slot, keep on searching for even cheaper slots
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/PriorityCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/PriorityCacheTest.java?rev=1787922&r1=1787921&r2=1787922&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/PriorityCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/PriorityCacheTest.java Tue Mar 21 09:50:02 2017
@@ -26,7 +26,11 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
+import java.util.Random;
+
import com.google.common.base.Predicate;
+import com.google.common.cache.Weigher;
+import org.apache.jackrabbit.oak.segment.CacheWeights;
import org.junit.Test;
public class PriorityCacheTest {
@@ -163,4 +167,19 @@ public class PriorityCacheTest {
assertEquals(2147483648L, PriorityCache.nextPowerOfTwo(Integer.MAX_VALUE));
}
+ @Test
+ public void evictionCount() {
+ Random rnd = new Random();
+ Weigher<String, Integer> weigher = CacheWeights.noopWeigher();
+ PriorityCache<String, Integer> cache = new PriorityCache<>(128, 2, weigher);
+ int count = 0;
+ for (int b = Byte.MIN_VALUE; b <= Byte.MAX_VALUE; b++) {
+ if (cache.put("k-" + b + "-" + rnd.nextInt(1000), b, 0, (byte) b)) {
+ count++;
+ }
+ }
+
+ assertEquals(count, cache.size() + cache.getStats().evictionCount());
+ }
+
}