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 2015/08/14 15:00:56 UTC

svn commit: r1695887 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/cache/ main/java/org/apache/jackrabbit/oak/plugins/blob/ main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/ main/java/org/apache/jackrabbit/oak/p...

Author: thomasm
Date: Fri Aug 14 13:00:55 2015
New Revision: 1695887

URL: http://svn.apache.org/r1695887
Log:
OAK-3229 Log initialization of the cache and the persistent cache

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/StringCache.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=1695887&r1=1695886&r2=1695887&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 Fri Aug 14 13:00:55 2015
@@ -27,6 +27,7 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -73,6 +74,7 @@ import org.slf4j.LoggerFactory;
 public class CacheLIRS<K, V> implements LoadingCache<K, V> {
 
     private static final Logger LOG = LoggerFactory.getLogger(CacheLIRS.class);
+    private static final AtomicInteger NEXT_CACHE_ID = new AtomicInteger();
 
     /**
      * Listener for items that are evicted from the cache. The listener
@@ -98,6 +100,8 @@ public class CacheLIRS<K, V> implements
          */
         void evicted(@Nonnull K key, @Nullable V value);
     }
+    
+    private final int cacheId = NEXT_CACHE_ID.getAndIncrement();
 
     /**
      * The maximum memory this cache should use.
@@ -142,7 +146,7 @@ public class CacheLIRS<K, V> implements
      * @param maxEntries the maximum number of entries
      */
     public CacheLIRS(int maxEntries) {
-        this(null, maxEntries, 1, 16, maxEntries / 100, null, null);
+        this(null, maxEntries, 1, 16, maxEntries / 100, null, null, null);
     }
 
     /**
@@ -158,7 +162,9 @@ public class CacheLIRS<K, V> implements
     @SuppressWarnings("unchecked")
     CacheLIRS(Weigher<K, V> weigher, long maxMemory, int averageMemory,
             int segmentCount, int stackMoveDistance, final CacheLoader<K, V> loader,
-            EvictionCallback<K, V> evicted) {
+            EvictionCallback<K, V> evicted, String module) {
+        LOG.debug("Init #{}, module={}, maxMemory={}, segmentCount={}, stackMoveDistance={}",
+                cacheId, module, maxMemory, segmentCount, segmentCount);
         this.weigher = weigher;
         setMaxMemory(maxMemory);
         setAverageMemory(averageMemory);
@@ -846,6 +852,9 @@ public class CacheLIRS<K, V> implements
          * @return the value, or null if there is no resident entry
          */
         V get(Object key, int hash) {
+            if (LOG.isTraceEnabled()) {
+                LOG.trace("#{} get hash {} key {}", cache.cacheId, hash, key);
+            }
             Entry<K, V> e = find(key, hash);
             if (e == null) {
                 // the entry was not found
@@ -1474,6 +1483,7 @@ public class CacheLIRS<K, V> implements
      */
     public static class Builder<K, V> {
 
+        private String module;
         private Weigher<K, V> weigher;
         private long maxWeight;
         private int averageWeight = 100;
@@ -1484,6 +1494,11 @@ public class CacheLIRS<K, V> implements
         public Builder<K, V> recordStats() {
             return this;
         }
+        
+        public Builder<K, V> module(String module) {
+            this.module = module;
+            return this;
+        }
 
         public Builder<K, V> weigher(Weigher<K, V> weigher) {
             this.weigher = weigher;
@@ -1535,7 +1550,7 @@ public class CacheLIRS<K, V> implements
 
         public CacheLIRS<K, V> build(CacheLoader<K, V> cacheLoader) {
             return new CacheLIRS<K, V>(weigher, maxWeight, averageWeight,
-                    segmentCount, stackMoveDistance, cacheLoader, evicted);
+                    segmentCount, stackMoveDistance, cacheLoader, evicted, module);
         }
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java?rev=1695887&r1=1695886&r2=1695887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CachingBlobStore.java Fri Aug 14 13:00:55 2015
@@ -35,6 +35,7 @@ public abstract class CachingBlobStore e
     public CachingBlobStore(long cacheSize) {
         this.blobCacheSize = cacheSize;
         cache = CacheLIRS.<String, byte[]>newBuilder().
+                module("CachingBlobStore").
                 maximumWeight(cacheSize).
                 averageWeight(getBlockSize() / 2).
                 weigher(new Weigher<String, byte[]>() {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java?rev=1695887&r1=1695886&r2=1695887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java Fri Aug 14 13:00:55 2015
@@ -107,6 +107,7 @@ public class DataStoreBlobStore implemen
         this.encodeLengthInId = encodeLengthInId;
 
         this.cache = CacheLIRS.<String, byte[]>newBuilder()
+                .module("DataStoreBlobStore")
                 .maximumWeight(cacheSizeInMB * FileUtils.ONE_MB)
                 .weigher(new Weigher<String, byte[]>() {
                     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java?rev=1695887&r1=1695886&r2=1695887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java Fri Aug 14 13:00:55 2015
@@ -868,7 +868,7 @@ public class DocumentMK {
                 DocumentNodeStore docNodeStore,
                 DocumentStore docStore
                 ) {
-            Cache<K, V> cache = buildCache(maxWeight);
+            Cache<K, V> cache = buildCache(cacheType.name(), maxWeight);
             PersistentCache p = getPersistentCache();
             if (p != null) {
                 if (docNodeStore != null) {
@@ -895,6 +895,7 @@ public class DocumentMK {
         }
         
         private <K extends CacheValue, V extends CacheValue> Cache<K, V> buildCache(
+                String module,
                 long maxWeight) {
             // by default, use the LIRS cache when using the persistent cache,
             // but don't use it otherwise
@@ -905,6 +906,7 @@ public class DocumentMK {
             }
             if (useLirs) {
                 return CacheLIRS.<K, V>newBuilder().
+                        module(module).
                         weigher(new Weigher<K, V>() {
                             @Override
                             public int weigh(K key, V value) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java?rev=1695887&r1=1695886&r2=1695887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCache.java Fri Aug 14 13:00:55 2015
@@ -71,7 +71,7 @@ public class PersistentCache {
     private int exceptionCount;
 
     public PersistentCache(String url) {
-        LOG.info("start version 1");
+        LOG.info("start, url={}", url);
         String[] parts = url.split(",");
         String dir = parts[0];
         for (String p : parts) {
@@ -299,6 +299,9 @@ public class PersistentCache {
     
     public synchronized GarbageCollectableBlobStore wrapBlobStore(
             GarbageCollectableBlobStore base) {
+        if (maxBinaryEntry == 0) {
+            return base;
+        }
         BlobCache c = new BlobCache(this, base);
         initGenerationCache(c);
         return c;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java?rev=1695887&r1=1695886&r2=1695887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java Fri Aug 14 13:00:55 2015
@@ -125,6 +125,7 @@ public class SegmentTracker {
         }
         stringCache = c;
         segmentCache = CacheLIRS.<SegmentId, Segment>newBuilder()
+            .module("SegmentTracker")
             .maximumSize((int) Math.min(Integer.MAX_VALUE, cacheSizeMB * MB))
             .averageWeight(Segment.MAX_SEGMENT_SIZE/2)
             .evictionCallback(new EvictionCallback<SegmentId, Segment>() {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/StringCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/StringCache.java?rev=1695887&r1=1695886&r2=1695887&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/StringCache.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/StringCache.java Fri Aug 14 13:00:55 2015
@@ -50,6 +50,7 @@ public class StringCache {
      */
     StringCache(int maxSize) {
         cache = CacheLIRS.<StringCacheEntry, String>newBuilder()
+                .module("StringCache")
                 .maximumSize(maxSize)
                 .averageWeight(100)
                 .build();
@@ -207,6 +208,15 @@ public class StringCache {
             return o.hash == hash && o.msb == msb && o.lsb == lsb &&
                     o.offset == offset;
         }
+        
+        @Override
+        public String toString() {
+            StringBuilder buff = new StringBuilder();
+            buff.append(Long.toHexString(msb)).
+                append(':').append(Long.toHexString(lsb)).
+                append('+').append(Integer.toHexString(offset));
+            return buff.toString();
+        }
 
     }
 

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=1695887&r1=1695886&r2=1695887&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 Fri Aug 14 13:00:55 2015
@@ -577,7 +577,7 @@ public class CacheTest {
     }
 
     private static <K, V> CacheLIRS<K, V> createCache(int maxSize, int averageSize) {
-        return new CacheLIRS<K, V>(null, maxSize, averageSize, 1, 0, null, null);
+        return new CacheLIRS<K, V>(null, maxSize, averageSize, 1, 0, null, null, null);
     }
     
     @Test