Author: tomekr
Date: Wed Nov  2 13:46:57 2016
New Revision: 1767679

URL: http://svn.apache.org/viewvc?rev=1767679&view=rev
Log:
OAK-5038: Extend PersistentCacheStats with async queue-related stats

Modified:
    
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/PersistentCacheStatsMBean.java
    
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
    
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCache.java
    
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCacheStats.java
    
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheActionDispatcher.java
    
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheWriteQueue.java
    
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/AsyncQueueTest.java

Modified: 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/PersistentCacheStatsMBean.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/PersistentCacheStatsMBean.java?rev=1767679&r1=1767678&r2=1767679&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/PersistentCacheStatsMBean.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/PersistentCacheStatsMBean.java
 Wed Nov  2 13:46:57 2016
@@ -36,6 +36,12 @@ public interface PersistentCacheStatsMBe
 
     CompositeData getPutRateHistory();
 
+    CompositeData getPutRejectedAlreadyPersistedRateHistory();
+
+    CompositeData getPutRejectedEntryNotUsedRateHistory();
+
+    CompositeData getPutRejectedQueueFullRateHistory();
+
     CompositeData getInvalidateOneRateHistory();
 
     CompositeData getInvalidateAllRateHistory();

Modified: 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java?rev=1767679&r1=1767678&r2=1767679&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/package-info.java
 Wed Nov  2 13:46:57 2016
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-@Version("3.3.0")
+@Version("3.4.0")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.api.jmx;
 

Modified: 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCache.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCache.java?rev=1767679&r1=1767678&r2=1767679&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCache.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCache.java
 Wed Nov  2 13:46:57 2016
@@ -304,9 +304,21 @@ class NodeCache<K, V> implements Cache<K
     @Override
     public void evicted(K key, V value, RemovalCause cause) {
         if (cache.isAsyncCache() && EVICTION_CAUSES.contains(cause) && value 
!= null) {
-            // invalidations are handled separately
-            if (qualifiesToPersist(memCacheMetadata.remove(key))) {
-                writeQueue.addPut(key, value);
+            CacheMetadata.MetadataEntry metadata = 
memCacheMetadata.remove(key);
+            boolean qualifiesToPersist = true;
+            if (metadata != null && metadata.isReadFromPersistentCache()) {
+                qualifiesToPersist = false;
+                stats.markPutRejectedAlreadyPersisted();
+            } else if (metadata != null && metadata.getAccessCount() < 1) {
+                qualifiesToPersist = false;
+                stats.markPutRejectedEntryNotUsed();
+            }
+
+            if (qualifiesToPersist) {
+                boolean addedToQueue = writeQueue.addPut(key, value);
+                if (!addedToQueue) {
+                    stats.markPutRejectedQueueFull();
+                }
             }
 
             long memory = 0L;
@@ -317,10 +329,6 @@ class NodeCache<K, V> implements Cache<K
         }
     }
 
-    private boolean qualifiesToPersist(CacheMetadata.MetadataEntry metadata) {
-        return metadata == null || (!metadata.isReadFromPersistentCache() && 
metadata.getAccessCount() > 0);
-    }
-
     public PersistentCacheStats getPersistentCacheStats() {
         return stats;
     }

Modified: 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCacheStats.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCacheStats.java?rev=1767679&r1=1767678&r2=1767679&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCacheStats.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/PersistentCacheStats.java
 Wed Nov  2 13:46:57 2016
@@ -40,11 +40,14 @@ public class PersistentCacheStats extend
 
     private static final Boolean ENABLE_READ_TIMER;
     private static final Boolean ENABLE_LOAD_TIMER;
+    private static final Boolean ENABLE_REJECTED_PUT;
     static {
         String enableReadTimer = 
System.getProperty("PersistentCacheStats.readTimer", "false");
         String enableLoadTimer = 
System.getProperty("PersistentCacheStats.loadTimer", "false");
+        String enableRejectedPut = 
System.getProperty("PersistentCacheStats.rejectedPut", "false");
         ENABLE_READ_TIMER = Boolean.parseBoolean(enableReadTimer);
         ENABLE_LOAD_TIMER = Boolean.parseBoolean(enableLoadTimer);
+        ENABLE_REJECTED_PUT = Boolean.parseBoolean(enableRejectedPut);
     }
 
     private static final String HITS = "HITS";
@@ -57,6 +60,9 @@ public class PersistentCacheStats extend
     private static final String INVALIDATE_ALL = "INVALIDATE_ALL";
     private static final String READ_TIMER = "READ_TIMER";
     private static final String USED_DISK_SPACE = "USED_SPACE_BYTES";
+    private static final String PUT_REJECTED_ALREADY_PERSISTED = 
"PUT_REJECTED_ALREADY_PERSISTED";
+    private static final String PUT_REJECTED_ENTRY_NOT_USED = 
"PUT_REJECTED_ENTRY_NOT_USED";
+    private static final String PUT_REJECTED_FULL_QUEUE = 
"PUT_REJECTED_FULL_QUEUE";
 
     private final StatisticsProvider statisticsProvider;
     private final String cacheName;
@@ -85,6 +91,15 @@ public class PersistentCacheStats extend
     private final MeterStats invalidateAllMeter;
     private final TimeSeries invalidateAllRateHistory;
 
+    private final MeterStats putRejectedAlreadyPersistedMeter;
+    private final TimeSeries putRejectedAlreadyPersistedHistory;
+
+    private final MeterStats putRejectedEntryNotUsedMeter;
+    private final TimeSeries putRejectedEntryNotUseHistory;
+
+    private final MeterStats putRejectedByFullQueueMeter;
+    private final TimeSeries putRejectedByFullQueueHistory;
+
     private final TimerStats readTimer;
 
     private final CounterStats usedSpaceByteCounter;
@@ -160,6 +175,33 @@ public class PersistentCacheStats extend
             readTimer = StatisticsProvider.NOOP.getTimer(statName, 
StatsOptions.METRICS_ONLY);
         }
 
+        statName = getStatName(PUT_REJECTED_ALREADY_PERSISTED, cacheName);
+        if (ENABLE_REJECTED_PUT) {
+            putRejectedAlreadyPersistedMeter = 
statisticsProvider.getMeter(statName, StatsOptions.DEFAULT);
+            putRejectedAlreadyPersistedHistory = getTimeSeries(statName);
+        } else {
+            putRejectedAlreadyPersistedMeter = 
StatisticsProvider.NOOP.getMeter(statName, StatsOptions.DEFAULT);
+            putRejectedAlreadyPersistedHistory = 
StatisticsProvider.NOOP.getStats().getTimeSeries(statName, false);
+        }
+
+        statName = getStatName(PUT_REJECTED_ENTRY_NOT_USED, cacheName);
+        if (ENABLE_REJECTED_PUT) {
+            putRejectedEntryNotUsedMeter = 
statisticsProvider.getMeter(statName, StatsOptions.DEFAULT);
+            putRejectedEntryNotUseHistory = getTimeSeries(statName);
+        } else {
+            putRejectedEntryNotUsedMeter = 
StatisticsProvider.NOOP.getMeter(statName, StatsOptions.DEFAULT);
+            putRejectedEntryNotUseHistory = 
StatisticsProvider.NOOP.getStats().getTimeSeries(statName, false);
+        }
+
+        statName = getStatName(PUT_REJECTED_FULL_QUEUE, cacheName);
+        if (ENABLE_REJECTED_PUT) {
+            putRejectedByFullQueueMeter = 
statisticsProvider.getMeter(statName, StatsOptions.DEFAULT);
+            putRejectedByFullQueueHistory = getTimeSeries(statName);
+        } else {
+            putRejectedByFullQueueMeter = 
StatisticsProvider.NOOP.getMeter(statName, StatsOptions.DEFAULT);
+            putRejectedByFullQueueHistory = 
StatisticsProvider.NOOP.getStats().getTimeSeries(statName, false);
+        }
+
         diskStats = new UsedSpaceTracker(usedSpaceByteCounter);
     }
 
@@ -193,6 +235,18 @@ public class PersistentCacheStats extend
         invalidateAllMeter.mark();
     }
 
+    public void markPutRejectedAlreadyPersisted() {
+        putRejectedAlreadyPersistedMeter.mark();
+    }
+
+    public void markPutRejectedEntryNotUsed() {
+        putRejectedEntryNotUsedMeter.mark();
+    }
+
+    public void markPutRejectedQueueFull() {
+        putRejectedByFullQueueMeter.mark();
+    }
+
     public TimerStats.Context startReadTimer() {
         return this.readTimer.time();
     }
@@ -341,6 +395,21 @@ public class PersistentCacheStats extend
     }
 
     @Override
+    public CompositeData getPutRejectedAlreadyPersistedRateHistory() {
+        return 
TimeSeriesStatsUtil.asCompositeData(putRejectedAlreadyPersistedHistory, 
"Persistent cache put rejected (already persisted)");
+    }
+
+    @Override
+    public CompositeData getPutRejectedEntryNotUsedRateHistory() {
+        return 
TimeSeriesStatsUtil.asCompositeData(putRejectedEntryNotUseHistory, "Persistent 
cache put rejected (entry not used)");
+    }
+
+    @Override
+    public CompositeData getPutRejectedQueueFullRateHistory() {
+        return 
TimeSeriesStatsUtil.asCompositeData(putRejectedByFullQueueHistory, "Persistent 
cache put rejected (queue is full)");
+    }
+
+    @Override
     public CompositeData getInvalidateOneRateHistory() {
         return TimeSeriesStatsUtil.asCompositeData(invalidateOneRateHistory, 
"Persistent cache invalidate one entry");
     }

Modified: 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheActionDispatcher.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheActionDispatcher.java?rev=1767679&r1=1767678&r2=1767679&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheActionDispatcher.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheActionDispatcher.java
 Wed Nov  2 13:46:57 2016
@@ -67,9 +67,7 @@ public class CacheActionDispatcher imple
      *
      * @param action to be added
      */
-    void add(CacheAction<?, ?> action) {
-        if (!queue.offer(action)) {
-            LOG.trace("The queue is full, element {} has been rejected", 
action);
-        }
+    boolean add(CacheAction<?, ?> action) {
+        return queue.offer(action);
     }
 }
\ No newline at end of file

Modified: 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheWriteQueue.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheWriteQueue.java?rev=1767679&r1=1767678&r2=1767679&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheWriteQueue.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/async/CacheWriteQueue.java
 Wed Nov  2 13:46:57 2016
@@ -34,12 +34,12 @@ public class CacheWriteQueue<K, V> {
         this.map = map;
     }
 
-    public void addPut(K key, V value) {
-        dispatcher.add(new PutToCacheAction<K, V>(key, value, this));
+    public boolean addPut(K key, V value) {
+        return dispatcher.add(new PutToCacheAction<K, V>(key, value, this));
     }
 
-    public void addInvalidate(Iterable<K> keys) {
-        dispatcher.add(new InvalidateCacheAction<K, V>(keys, this));
+    public boolean addInvalidate(Iterable<K> keys) {
+        return dispatcher.add(new InvalidateCacheAction<K, V>(keys, this));
     }
 
     PersistentCache getCache() {

Modified: 
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/AsyncQueueTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/AsyncQueueTest.java?rev=1767679&r1=1767678&r2=1767679&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/AsyncQueueTest.java
 (original)
+++ 
jackrabbit/oak/branches/1.4/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/AsyncQueueTest.java
 Wed Nov  2 13:46:57 2016
@@ -142,14 +142,14 @@ public class AsyncQueueTest {
         }
 
         @Override
-        public void addPut(PathRev key, StringValue value) {
+        public boolean addPut(PathRev key, StringValue value) {
             putActions.add(key);
-            wrapped.addPut(key, value);
+            return wrapped.addPut(key, value);
         }
 
-        public void addInvalidate(Iterable<PathRev> keys) {
+        public boolean addInvalidate(Iterable<PathRev> keys) {
             invalidateActions.addAll(newArrayList(keys));
-            wrapped.addInvalidate(keys);
+            return wrapped.addInvalidate(keys);
         }
     }
 


Reply via email to