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 2015/07/15 15:58:55 UTC

svn commit: r1691218 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment: SegmentNodeStoreService.java SegmentTracker.java StringCache.java

Author: mduerig
Date: Wed Jul 15 13:58:54 2015
New Revision: 1691218

URL: http://svn.apache.org/r1691218
Log:
OAK-3007: SegmentStore cache does not take "string" map into account
CacheStatsMBean for the string cache

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.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

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1691218&r1=1691217&r2=1691218&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java Wed Jul 15 13:58:54 2015
@@ -51,7 +51,9 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean;
 import org.apache.jackrabbit.oak.api.jmx.CheckpointMBean;
+import org.apache.jackrabbit.oak.cache.CacheStats;
 import org.apache.jackrabbit.oak.osgi.ObserverTracker;
 import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard;
 import org.apache.jackrabbit.oak.plugins.blob.BlobGC;
@@ -256,6 +258,7 @@ public class SegmentNodeStoreService ext
     private Registration revisionGCRegistration;
     private Registration blobGCRegistration;
     private Registration compactionStrategyRegistration;
+    private Registration stringCacheMBean;
     private Registration fsgcMonitorMBean;
     private WhiteboardExecutor executor;
     private boolean customBlobStore;
@@ -396,6 +399,13 @@ public class SegmentNodeStoreService ext
                 .getCompactionStrategy();
         store.setCompactionStrategy(compactionStrategy);
 
+        CacheStats stringCacheStats = store.getTracker().getStringCacheStats();
+        if (stringCacheStats != null) {
+            stringCacheMBean = registerMBean(whiteboard, CacheStatsMBean.class,
+                    stringCacheStats,
+                    CacheStats.TYPE, stringCacheStats.getName());
+        }
+
         FileStoreGCMonitor fsgcMonitor = new FileStoreGCMonitor(Clock.SIMPLE);
         fsgcMonitorMBean = new CompositeRegistration(
                 whiteboard.register(GCMonitor.class, fsgcMonitor, emptyMap()),
@@ -490,6 +500,10 @@ public class SegmentNodeStoreService ext
     }
 
     private void unregisterNodeStore() {
+        if (stringCacheMBean != null) {
+            stringCacheMBean.unregister();
+            stringCacheMBean = null;
+        }
         if(providerRegistration != null){
             providerRegistration.unregister();
             providerRegistration = null;

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=1691218&r1=1691217&r2=1691218&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 Wed Jul 15 13:58:54 2015
@@ -27,8 +27,10 @@ import java.util.Queue;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 
+import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
+import org.apache.jackrabbit.oak.cache.CacheStats;
 import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
 import org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy;
 import org.slf4j.Logger;
@@ -133,6 +135,13 @@ public class SegmentTracker {
         this(store, DEFAULT_MEMORY_CACHE_SIZE, SegmentVersion.V_11);
     }
 
+    @CheckForNull
+    public CacheStats getStringCacheStats() {
+        return stringCache == null
+            ? null
+            : stringCache.getStats();
+    }
+
     public SegmentWriter getWriter() {
         return writer;
     }
@@ -151,10 +160,10 @@ public class SegmentTracker {
         }
         currentSize = 0;
     }
-    
+
     /**
      * Get the string cache, if there is one.
-     * 
+     *
      * @return the string cache or {@code null} if none is configured
      */
     StringCache getStringCache() {

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=1691218&r1=1691217&r2=1691218&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 Wed Jul 15 13:58:54 2015
@@ -21,8 +21,11 @@ package org.apache.jackrabbit.oak.plugin
 
 import java.util.Arrays;
 
+import javax.annotation.Nonnull;
+
 import com.google.common.base.Function;
 import org.apache.jackrabbit.oak.cache.CacheLIRS;
+import org.apache.jackrabbit.oak.cache.CacheStats;
 
 /**
  * A string cache. It has two components: a fast cache for small strings, based
@@ -47,9 +50,14 @@ public class StringCache {
      */
     StringCache(int maxSize) {
         cache = CacheLIRS.<StringCacheEntry, String>newBuilder()
-            .maximumSize(maxSize)
-            .averageWeight(100)
-            .build();
+                .maximumSize(maxSize)
+                .averageWeight(100)
+                .build();
+    }
+
+    @Nonnull
+    public CacheStats getStats() {
+        return new CacheStats(cache, "String Cache", null, -1);
     }
 
     /**