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