This is an automated email from the ASF dual-hosted git repository. klund pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push: new 2f277f6 GEODE-6334: Create CachePerfStatsTest and cleanup CachePerfStats (#3137) 2f277f6 is described below commit 2f277f65af440e950cd85349044b2af7d2a6a29f Author: Kirk Lund <kl...@apache.org> AuthorDate: Wed Jan 30 14:13:19 2019 -0800 GEODE-6334: Create CachePerfStatsTest and cleanup CachePerfStats (#3137) --- .../geode/internal/cache/CachePerfStats.java | 583 +++++----- .../geode/internal/cache/DummyCachePerfStats.java | 60 -- .../geode/internal/cache/CachePerfStatsTest.java | 1126 ++++++++++++++++++++ 3 files changed, 1391 insertions(+), 378 deletions(-) diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/CachePerfStats.java b/geode-core/src/main/java/org/apache/geode/internal/cache/CachePerfStats.java index ff86b20..98a68b8 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/CachePerfStats.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/CachePerfStats.java @@ -12,7 +12,6 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ - package org.apache.geode.internal.cache; import org.apache.geode.StatisticDescriptor; @@ -20,147 +19,140 @@ import org.apache.geode.Statistics; import org.apache.geode.StatisticsFactory; import org.apache.geode.StatisticsType; import org.apache.geode.StatisticsTypeFactory; +import org.apache.geode.annotations.VisibleForTesting; import org.apache.geode.distributed.internal.PoolStatHelper; import org.apache.geode.distributed.internal.QueueStatHelper; import org.apache.geode.internal.NanoTimer; import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl; /** - * CachePerfStats tracks statistics about GemFire cache performance. + * CachePerfStats tracks statistics about Geode cache performance and usage. */ public class CachePerfStats { - public static boolean enableClockStats = false; - - ////////////////// Static fields /////////////////////////// + public static boolean enableClockStats; private static final StatisticsType type; - protected static final int loadsInProgressId; - protected static final int loadsCompletedId; - protected static final int loadTimeId; - protected static final int netloadsInProgressId; - protected static final int netloadsCompletedId; - protected static final int netloadTimeId; - protected static final int netsearchesInProgressId; - protected static final int netsearchesCompletedId; - protected static final int netsearchTimeId; - protected static final int cacheWriterCallsInProgressId; - protected static final int cacheWriterCallsCompletedId; - protected static final int cacheWriterCallTimeId; - protected static final int cacheListenerCallsInProgressId; - protected static final int cacheListenerCallsCompletedId; - protected static final int cacheListenerCallTimeId; - protected static final int getInitialImagesInProgressId; - protected static final int getInitialImagesCompletedId; - protected static final int deltaGetInitialImagesCompletedId; - protected static final int getInitialImageTimeId; - protected static final int getInitialImageKeysReceivedId; - protected static final int regionsId; - protected static final int partitionedRegionsId; + static final int loadsInProgressId; + static final int loadsCompletedId; + static final int loadTimeId; + static final int netloadsInProgressId; + static final int netloadsCompletedId; + static final int netloadTimeId; + static final int netsearchesInProgressId; + static final int netsearchesCompletedId; + static final int netsearchTimeId; + static final int cacheWriterCallsInProgressId; + static final int cacheWriterCallsCompletedId; + static final int cacheWriterCallTimeId; + static final int cacheListenerCallsInProgressId; + static final int cacheListenerCallsCompletedId; + static final int cacheListenerCallTimeId; + static final int getInitialImagesInProgressId; + static final int getInitialImagesCompletedId; + static final int deltaGetInitialImagesCompletedId; + static final int getInitialImageTimeId; + static final int getInitialImageKeysReceivedId; + static final int regionsId; + static final int partitionedRegionsId; protected static final int destroysId; - protected static final int createsId; - protected static final int putsId; + static final int createsId; + static final int putsId; protected static final int putTimeId; - protected static final int putallsId; - protected static final int putallTimeId; - protected static final int removeAllsId; - protected static final int removeAllTimeId; + static final int putallsId; + static final int putallTimeId; + static final int removeAllsId; + private static final int removeAllTimeId; protected static final int updatesId; - protected static final int updateTimeId; - protected static final int invalidatesId; - protected static final int getsId; + static final int updateTimeId; + static final int invalidatesId; + static final int getsId; protected static final int getTimeId; protected static final int eventQueueSizeId; - protected static final int eventQueueThrottleTimeId; - protected static final int eventQueueThrottleCountId; - protected static final int eventThreadsId; - protected static final int missesId; + static final int eventQueueThrottleTimeId; + static final int eventQueueThrottleCountId; + static final int eventThreadsId; + static final int missesId; protected static final int queryExecutionsId; - protected static final int queryExecutionTimeId; - protected static final int queryResultsHashCollisionsId; - protected static final int queryResultsHashCollisionProbeTimeId; - protected static final int partitionedRegionQueryRetriesId; - - protected static final int txSuccessLifeTimeId; - protected static final int txFailedLifeTimeId; - protected static final int txRollbackLifeTimeId; - protected static final int txCommitsId; - protected static final int txFailuresId; - protected static final int txRollbacksId; - protected static final int txCommitTimeId; - protected static final int txFailureTimeId; - protected static final int txRollbackTimeId; - protected static final int txCommitChangesId; - protected static final int txFailureChangesId; - protected static final int txRollbackChangesId; - protected static final int txConflictCheckTimeId; - - protected static final int reliableQueuedOpsId; - protected static final int reliableQueueSizeId; - protected static final int reliableQueueMaxId; - protected static final int reliableRegionsId; - protected static final int reliableRegionsMissingId; - protected static final int reliableRegionsQueuingId; - protected static final int reliableRegionsMissingFullAccessId; - protected static final int reliableRegionsMissingLimitedAccessId; - protected static final int reliableRegionsMissingNoAccessId; - protected static final int entryCountId; + static final int queryExecutionTimeId; + static final int queryResultsHashCollisionsId; + static final int queryResultsHashCollisionProbeTimeId; + static final int partitionedRegionQueryRetriesId; + + static final int txSuccessLifeTimeId; + static final int txFailedLifeTimeId; + static final int txRollbackLifeTimeId; + static final int txCommitsId; + static final int txFailuresId; + static final int txRollbacksId; + static final int txCommitTimeId; + static final int txFailureTimeId; + static final int txRollbackTimeId; + static final int txCommitChangesId; + static final int txFailureChangesId; + static final int txRollbackChangesId; + static final int txConflictCheckTimeId; + + static final int reliableQueuedOpsId; + static final int reliableQueueSizeId; + static final int reliableQueueMaxId; + static final int reliableRegionsId; + static final int reliableRegionsMissingId; + static final int reliableRegionsQueuingId; + static final int reliableRegionsMissingFullAccessId; + static final int reliableRegionsMissingLimitedAccessId; + static final int reliableRegionsMissingNoAccessId; + static final int entryCountId; protected static final int eventsQueuedId; - protected static final int retriesId; - - protected static final int diskTasksWaitingId; - protected static final int evictorJobsStartedId; - protected static final int evictorJobsCompletedId; - protected static final int evictorQueueSizeId; + static final int retriesId; - protected static final int evictWorkTimeId; + static final int diskTasksWaitingId; + static final int evictorJobsStartedId; + static final int evictorJobsCompletedId; + static final int evictorQueueSizeId; + static final int evictWorkTimeId; - protected static final int indexUpdateInProgressId; - protected static final int indexUpdateCompletedId; - protected static final int indexUpdateTimeId; - protected static final int clearsId; - protected static final int indexInitializationInProgressId; - protected static final int indexInitializationCompletedId; - protected static final int indexInitializationTimeId; + static final int indexUpdateInProgressId; + static final int indexUpdateCompletedId; + static final int indexUpdateTimeId; + static final int clearsId; + private static final int indexInitializationInProgressId; + private static final int indexInitializationCompletedId; + private static final int indexInitializationTimeId; /** Id of the meta data refresh statistic */ - protected static final int metaDataRefreshCountId; - - protected static final int conflatedEventsId; - protected static final int tombstoneCountId; - protected static final int tombstoneGCCountId; - protected static final int tombstoneOverhead1Id; - protected static final int tombstoneOverhead2Id; - protected static final int clearTimeoutsId; - - protected static final int deltaUpdatesId; - protected static final int deltaUpdatesTimeId; - protected static final int deltaFailedUpdatesId; - - protected static final int deltasPreparedId; - protected static final int deltasPreparedTimeId; - protected static final int deltasSentId; - - protected static final int deltaFullValuesSentId; - protected static final int deltaFullValuesRequestedId; - - protected static final int importedEntriesCountId; - protected static final int importTimeId; - protected static final int exportedEntriesCountId; - protected static final int exportTimeId; - - protected static final int compressionCompressTimeId; - protected static final int compressionDecompressTimeId; - protected static final int compressionCompressionsId; - protected static final int compressionDecompressionsId; - protected static final int compressionPreCompressedBytesId; - protected static final int compressionPostCompressedBytesId; - - /** The Statistics object that we delegate most behavior to */ - protected final Statistics stats; - - //////////////////////// Static methods //////////////////////// + static final int metaDataRefreshCountId; + + static final int conflatedEventsId; + static final int tombstoneCountId; + static final int tombstoneGCCountId; + private static final int tombstoneOverhead1Id; + private static final int tombstoneOverhead2Id; + static final int clearTimeoutsId; + + static final int deltaUpdatesId; + private static final int deltaUpdatesTimeId; + static final int deltaFailedUpdatesId; + + static final int deltasPreparedId; + private static final int deltasPreparedTimeId; + static final int deltasSentId; + + static final int deltaFullValuesSentId; + static final int deltaFullValuesRequestedId; + + static final int importedEntriesCountId; + static final int importTimeId; + static final int exportedEntriesCountId; + static final int exportTimeId; + + static final int compressionCompressTimeId; + static final int compressionDecompressTimeId; + static final int compressionCompressionsId; + static final int compressionDecompressionsId; + static final int compressionPreCompressedBytesId; + static final int compressionPostCompressedBytesId; static { StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton(); @@ -324,25 +316,20 @@ public class CachePerfStats { "The total number of bytes before compressing."; final String compressionPostCompressedBytesDesc = "The total number of bytes after compressing."; - final String evictByCriteria_evictionsDesc = "The total number of entries evicted";// total - // actual - // evictions - // (entries - // evicted) - final String evictByCriteria_evictionTimeDesc = "Time taken for eviction process";// total - // eviction - // time - // including - // product + - // user expr. + + // total actual evictions (entries evicted) + final String evictByCriteria_evictionsDesc = "The total number of entries evicted"; + + // total eviction time including product + user expr. + final String evictByCriteria_evictionTimeDesc = "Time taken for eviction process"; final String evictByCriteria_evictionsInProgressDesc = "Total number of evictions in progress"; - final String evictByCriteria_evaluationsDesc = "Total number of evaluations for eviction";// total - // eviction - // attempts + + // total eviction attempts + final String evictByCriteria_evaluationsDesc = "Total number of evaluations for eviction"; + + // time taken to evaluate user expression. final String evictByCriteria_evaluationTimeDesc = - "Total time taken for evaluation of user expression during eviction";// time taken to - // evaluate user - // expression. + "Total time taken for evaluation of user expression during eviction"; type = f.createType("CachePerfStats", "Statistics about GemFire cache performance", new StatisticDescriptor[] { @@ -505,7 +492,6 @@ public class CachePerfStats { f.createLongCounter("evictByCriteria_evaluationTime", evictByCriteria_evaluationTimeDesc, "nanoseconds")}); - // Initialize id fields loadsInProgressId = type.nameToId("loadsInProgress"); loadsCompletedId = type.nameToId("loadsCompleted"); loadTimeId = type.nameToId("loadTime"); @@ -627,13 +613,17 @@ public class CachePerfStats { compressionPostCompressedBytesId = type.nameToId("postCompressedBytes"); } - //////////////////////// Constructors //////////////////////// + /** The Statistics object that we delegate most behavior to */ + protected final Statistics stats; + + private final Clock clock; /** * Created specially for bug 39348. Should not be invoked in any other case. */ public CachePerfStats() { stats = null; + clock = () -> enableClockStats ? NanoTimer.getTime() : 0; } /** @@ -641,30 +631,40 @@ public class CachePerfStats { * factory. */ public CachePerfStats(StatisticsFactory factory) { - stats = factory.createAtomicStatistics(type, "cachePerfStats"); + this(factory, "cachePerfStats", () -> enableClockStats ? NanoTimer.getTime() : 0); } /** * Creates a new <code>CachePerfStats</code> and registers itself with the given statistics * factory. */ - public CachePerfStats(StatisticsFactory factory, String name) { - stats = factory.createAtomicStatistics(type, "RegionStats-" + name); + public CachePerfStats(StatisticsFactory factory, String regionName) { + this(factory, "RegionStats-" + regionName, () -> enableClockStats ? NanoTimer.getTime() : 0); + } + + @VisibleForTesting + CachePerfStats(StatisticsFactory factory, String textId, Clock clock) { + stats = factory.createAtomicStatistics(type, textId); + this.clock = clock; } /** * Returns the current NanoTime or, if clock stats are disabled, zero. * * @since GemFire 5.0 + * @deprecated Please use instance method {@link #getClockTime()} instead. */ + @Deprecated public static long getStatTime() { return enableClockStats ? NanoTimer.getTime() : 0; } - ////////////////////// Accessing Stats ////////////////////// + public static StatisticsType getStatisticsType() { + return type; + } - public int getLoadsInProgress() { - return stats.getInt(loadsInProgressId); + private long getClockTime() { + return clock.getTime(); } public int getLoadsCompleted() { @@ -675,22 +675,10 @@ public class CachePerfStats { return stats.getLong(loadTimeId); } - public int getNetloadsInProgress() { - return stats.getInt(netloadsInProgressId); - } - public int getNetloadsCompleted() { return stats.getInt(netloadsCompletedId); } - public long getNetloadTime() { - return stats.getLong(netloadTimeId); - } - - public int getNetsearchesInProgress() { - return stats.getInt(netsearchesInProgressId); - } - public int getNetsearchesCompleted() { return stats.getInt(netsearchesCompletedId); } @@ -699,22 +687,14 @@ public class CachePerfStats { return stats.getLong(netsearchTimeId); } - public int getGetInitialImagesInProgress() { - return stats.getInt(getInitialImagesInProgressId); - } - public int getGetInitialImagesCompleted() { return stats.getInt(getInitialImagesCompletedId); } - public int getDeltaGetInitialImagesCompleted() { + int getDeltaGetInitialImagesCompleted() { return stats.getInt(deltaGetInitialImagesCompletedId); } - public long getGetInitialImageTime() { - return stats.getLong(getInitialImageTimeId); - } - public int getGetInitialImageKeysReceived() { return stats.getInt(getInitialImageKeysReceivedId); } @@ -723,10 +703,6 @@ public class CachePerfStats { return stats.getInt(regionsId); } - public int getPartitionedRegions() { - return stats.getInt(partitionedRegionsId); - } - public int getDestroys() { return stats.getInt(destroysId); } @@ -739,11 +715,15 @@ public class CachePerfStats { return stats.getInt(putsId); } + public long getPutTime() { + return stats.getLong(putTimeId); + } + public int getPutAlls() { return stats.getInt(putallsId); } - public int getRemoveAlls() { + int getRemoveAlls() { return stats.getInt(removeAllsId); } @@ -759,6 +739,10 @@ public class CachePerfStats { return stats.getInt(getsId); } + public long getGetTime() { + return stats.getLong(getTimeId); + } + public int getMisses() { return stats.getInt(missesId); } @@ -771,26 +755,14 @@ public class CachePerfStats { stats.incInt(reliableQueuedOpsId, inc); } - public int getReliableQueueSize() { - return stats.getInt(reliableQueueSizeId); - } - public void incReliableQueueSize(int inc) { stats.incInt(reliableQueueSizeId, inc); } - public int getReliableQueueMax() { - return stats.getInt(reliableQueueMaxId); - } - public void incReliableQueueMax(int inc) { stats.incInt(reliableQueueMaxId, inc); } - public int getReliableRegions() { - return stats.getInt(reliableRegionsId); - } - public void incReliableRegions(int inc) { stats.incInt(reliableRegionsId, inc); } @@ -803,10 +775,6 @@ public class CachePerfStats { stats.incInt(reliableRegionsMissingId, inc); } - public int getReliableRegionsQueuing() { - return stats.getInt(reliableRegionsQueuingId); - } - public void incReliableRegionsQueuing(int inc) { stats.incInt(reliableRegionsQueuingId, inc); } @@ -836,18 +804,14 @@ public class CachePerfStats { } public void incQueuedEvents(int inc) { - this.stats.incLong(eventsQueuedId, inc); - } - - public long getQueuedEvents() { - return this.stats.getInt(eventsQueuedId); + stats.incLong(eventsQueuedId, inc); } - public int getDeltaUpdates() { + int getDeltaUpdates() { return stats.getInt(deltaUpdatesId); } - public long getDeltaUpdatesTime() { + long getDeltaUpdatesTime() { return stats.getLong(deltaUpdatesTimeId); } @@ -855,11 +819,11 @@ public class CachePerfStats { return stats.getInt(deltaFailedUpdatesId); } - public int getDeltasPrepared() { + int getDeltasPrepared() { return stats.getInt(deltasPreparedId); } - public long getDeltasPreparedTime() { + long getDeltasPreparedTime() { return stats.getLong(deltasPreparedTimeId); } @@ -871,7 +835,7 @@ public class CachePerfStats { return stats.getInt(deltaFullValuesSentId); } - public int getDeltaFullValuesRequested() { + int getDeltaFullValuesRequested() { return stats.getInt(deltaFullValuesRequestedId); } @@ -899,16 +863,14 @@ public class CachePerfStats { return stats.getLong(compressionPostCompressedBytesId); } - ////////////////////// Updating Stats ////////////////////// - public long startCompression() { stats.incLong(compressionCompressionsId, 1); - return getStatTime(); + return getClockTime(); } public void endCompression(long startTime, long startSize, long endSize) { if (enableClockStats) { - stats.incLong(compressionCompressTimeId, getStatTime() - startTime); + stats.incLong(compressionCompressTimeId, getClockTime() - startTime); } stats.incLong(compressionPreCompressedBytesId, startSize); stats.incLong(compressionPostCompressedBytesId, endSize); @@ -916,12 +878,12 @@ public class CachePerfStats { public long startDecompression() { stats.incLong(compressionDecompressionsId, 1); - return getStatTime(); + return getClockTime(); } public void endDecompression(long startTime) { if (enableClockStats) { - stats.incLong(compressionDecompressTimeId, getStatTime() - startTime); + stats.incLong(compressionDecompressTimeId, getClockTime() - startTime); } } @@ -950,7 +912,7 @@ public class CachePerfStats { */ public long startNetload() { stats.incInt(netloadsInProgressId, 1); - return getStatTime(); + return getClockTime(); } /** @@ -958,7 +920,7 @@ public class CachePerfStats { */ public void endNetload(long start) { if (enableClockStats) { - stats.incLong(netloadTimeId, getStatTime() - start); + stats.incLong(netloadTimeId, getClockTime() - start); } stats.incInt(netloadsInProgressId, -1); stats.incInt(netloadsCompletedId, 1); @@ -989,7 +951,7 @@ public class CachePerfStats { */ public long startCacheWriterCall() { stats.incInt(cacheWriterCallsInProgressId, 1); - return getStatTime(); + return getClockTime(); } /** @@ -997,19 +959,23 @@ public class CachePerfStats { */ public void endCacheWriterCall(long start) { if (enableClockStats) { - stats.incLong(cacheWriterCallTimeId, getStatTime() - start); + stats.incLong(cacheWriterCallTimeId, getClockTime() - start); } stats.incInt(cacheWriterCallsInProgressId, -1); stats.incInt(cacheWriterCallsCompletedId, 1); } + int getCacheWriterCallsCompleted() { + return stats.getInt(cacheWriterCallsCompletedId); + } + /** * @return the timestamp that marks the start of the operation * @since GemFire 3.5 */ public long startCacheListenerCall() { stats.incInt(cacheListenerCallsInProgressId, 1); - return getStatTime(); + return getClockTime(); } /** @@ -1018,18 +984,22 @@ public class CachePerfStats { */ public void endCacheListenerCall(long start) { if (enableClockStats) { - stats.incLong(cacheListenerCallTimeId, getStatTime() - start); + stats.incLong(cacheListenerCallTimeId, getClockTime() - start); } stats.incInt(cacheListenerCallsInProgressId, -1); stats.incInt(cacheListenerCallsCompletedId, 1); } + int getCacheListenerCallsCompleted() { + return stats.getInt(cacheListenerCallsCompletedId); + } + /** * @return the timestamp that marks the start of the operation */ public long startGetInitialImage() { stats.incInt(getInitialImagesInProgressId, 1); - return getStatTime(); + return getClockTime(); } /** @@ -1037,7 +1007,7 @@ public class CachePerfStats { */ public void endGetInitialImage(long start) { if (enableClockStats) { - stats.incLong(getInitialImageTimeId, getStatTime() - start); + stats.incLong(getInitialImageTimeId, getClockTime() - start); } stats.incInt(getInitialImagesInProgressId, -1); stats.incInt(getInitialImagesCompletedId, 1); @@ -1048,12 +1018,12 @@ public class CachePerfStats { */ public void endNoGIIDone(long start) { if (enableClockStats) { - stats.incLong(getInitialImageTimeId, getStatTime() - start); + stats.incLong(getInitialImageTimeId, getClockTime() - start); } stats.incInt(getInitialImagesInProgressId, -1); } - public void incDeltaGIICompleted() { + void incDeltaGIICompleted() { stats.incInt(deltaGetInitialImagesCompletedId, 1); } @@ -1063,23 +1033,27 @@ public class CachePerfStats { public long startIndexUpdate() { stats.incInt(indexUpdateInProgressId, 1); - return getStatTime(); + return getClockTime(); } public void endIndexUpdate(long start) { - long ts = getStatTime(); + long ts = getClockTime(); stats.incLong(indexUpdateTimeId, ts - start); stats.incInt(indexUpdateInProgressId, -1); stats.incInt(indexUpdateCompletedId, 1); } - public long startIndexInitialization() { + int getIndexUpdateCompleted() { + return stats.getInt(indexUpdateCompletedId); + } + + long startIndexInitialization() { stats.incInt(indexInitializationInProgressId, 1); - return getStatTime(); + return getClockTime(); } - public void endIndexInitialization(long start) { - long ts = getStatTime(); + void endIndexInitialization(long start) { + long ts = getClockTime(); stats.incLong(indexInitializationTimeId, ts - start); stats.incInt(indexInitializationInProgressId, -1); stats.incInt(indexInitializationCompletedId, 1); @@ -1113,7 +1087,7 @@ public class CachePerfStats { * @return the timestamp that marks the start of the operation */ public long startGet() { - return getStatTime(); + return getClockTime(); } /** @@ -1121,7 +1095,8 @@ public class CachePerfStats { */ public void endGet(long start, boolean miss) { if (enableClockStats) { - stats.incLong(getTimeId, getStatTime() - start); + long delta = getClockTime() - start; + stats.incLong(getTimeId, delta); } stats.incInt(getsId, 1); if (miss) { @@ -1138,13 +1113,13 @@ public class CachePerfStats { if (isUpdate) { stats.incInt(updatesId, 1); if (enableClockStats) { - total = getStatTime() - start; + total = getClockTime() - start; stats.incLong(updateTimeId, total); } } else { stats.incInt(putsId, 1); if (enableClockStats) { - total = getStatTime() - start; + total = getClockTime() - start; stats.incLong(putTimeId, total); } } @@ -1154,13 +1129,13 @@ public class CachePerfStats { public void endPutAll(long start) { stats.incInt(putallsId, 1); if (enableClockStats) - stats.incLong(putallTimeId, getStatTime() - start); + stats.incLong(putallTimeId, getClockTime() - start); } public void endRemoveAll(long start) { stats.incInt(removeAllsId, 1); if (enableClockStats) - stats.incLong(removeAllTimeId, getStatTime() - start); + stats.incLong(removeAllTimeId, getClockTime() - start); } public void endQueryExecution(long executionTime) { @@ -1170,9 +1145,13 @@ public class CachePerfStats { } } + public int getQueryExecutions() { + return stats.getInt(queryExecutionsId); + } + public void endQueryResultsHashCollisionProbe(long start) { if (enableClockStats) { - stats.incLong(queryResultsHashCollisionProbeTimeId, getStatTime() - start); + stats.incLong(queryResultsHashCollisionProbeTimeId, getClockTime() - start); } } @@ -1253,10 +1232,10 @@ public class CachePerfStats { stats.incLong(txRollbackLifeTimeId, txLifeTime); } - public void endDeltaUpdate(long start) { + void endDeltaUpdate(long start) { stats.incInt(deltaUpdatesId, 1); if (enableClockStats) { - stats.incLong(deltaUpdatesTimeId, getStatTime() - start); + stats.incLong(deltaUpdatesTimeId, getClockTime() - start); } } @@ -1267,7 +1246,7 @@ public class CachePerfStats { public void endDeltaPrepared(long start) { stats.incInt(deltasPreparedId, 1); if (enableClockStats) { - stats.incLong(deltasPreparedTimeId, getStatTime() - start); + stats.incLong(deltasPreparedTimeId, getClockTime() - start); } } @@ -1290,7 +1269,7 @@ public class CachePerfStats { * @since GemFire 3.5 */ void close() { - this.stats.close(); + stats.close(); } /** @@ -1299,71 +1278,83 @@ public class CachePerfStats { * @since GemFire 3.5 */ public boolean isClosed() { - return this.stats.isClosed(); + return stats.isClosed(); } public int getEventQueueSize() { - return this.stats.getInt(eventQueueSizeId); + return stats.getInt(eventQueueSizeId); } public void incEventQueueSize(int items) { - this.stats.incInt(eventQueueSizeId, items); + stats.incInt(eventQueueSizeId, items); } public void incEventQueueThrottleCount(int items) { - this.stats.incInt(eventQueueThrottleCountId, items); + stats.incInt(eventQueueThrottleCountId, items); } protected void incEventQueueThrottleTime(long nanos) { - this.stats.incLong(eventQueueThrottleTimeId, nanos); + stats.incLong(eventQueueThrottleTimeId, nanos); } protected void incEventThreads(int items) { - this.stats.incInt(eventThreadsId, items); + stats.incInt(eventThreadsId, items); } public void incEntryCount(int delta) { - this.stats.incLong(entryCountId, delta); + stats.incLong(entryCountId, delta); } public long getEntries() { - return this.stats.getLong(entryCountId); + return stats.getLong(entryCountId); } public void incRetries() { - this.stats.incInt(retriesId, 1); + stats.incInt(retriesId, 1); + } + + public int getRetries() { + return stats.getInt(retriesId); } public void incDiskTasksWaiting() { - this.stats.incInt(diskTasksWaitingId, 1); + stats.incInt(diskTasksWaitingId, 1); } public void decDiskTasksWaiting() { - this.stats.incInt(diskTasksWaitingId, -1); + stats.incInt(diskTasksWaitingId, -1); } - public int getDiskTasksWaiting() { - return this.stats.getInt(diskTasksWaitingId); + int getDiskTasksWaiting() { + return stats.getInt(diskTasksWaitingId); } public void decDiskTasksWaiting(int count) { - this.stats.incInt(diskTasksWaitingId, -count); + stats.incInt(diskTasksWaitingId, -count); } public void incEvictorJobsStarted() { - this.stats.incInt(evictorJobsStartedId, 1); + stats.incInt(evictorJobsStartedId, 1); + } + + int getEvictorJobsStarted() { + return stats.getInt(evictorJobsStartedId); } public void incEvictorJobsCompleted() { - this.stats.incInt(evictorJobsCompletedId, 1); + stats.incInt(evictorJobsCompletedId, 1); + } + + int getEvictorJobsCompleted() { + return stats.getInt(evictorJobsCompletedId); } public void incEvictorQueueSize(int delta) { - this.stats.incInt(evictorQueueSizeId, delta); + stats.incInt(evictorQueueSizeId, delta); } public void incEvictWorkTime(long delta) { - this.stats.incLong(evictWorkTimeId, delta); + stats.incLong(evictWorkTimeId, delta); } /** @@ -1372,33 +1363,9 @@ public class CachePerfStats { * @since GemFire 3.5 */ public Statistics getStats() { - return this.stats; - } - - // /** - // * Returns a helper object so that the event queue can record its - // * stats to the proper cache perf stats. - // * @since GemFire 3.5 - // */ - // public ThrottledQueueStatHelper getEventQueueHelper() { - // return new ThrottledQueueStatHelper() { - // public void incThrottleCount() { - // incEventQueueThrottleCount(1); - // } - // public void throttleTime(long nanos) { - // incEventQueueThrottleTime(nanos); - // } - // public void add() { - // incEventQueueSize(1); - // } - // public void remove() { - // incEventQueueSize(-1); - // } - // public void remove(int count) { - // incEventQueueSize(-count); - // } - // }; - // } + return stats; + } + /** * Returns a helper object so that the event pool can record its stats to the proper cache perf * stats. @@ -1424,7 +1391,7 @@ public class CachePerfStats { } public void incClearCount() { - this.stats.incInt(clearsId, 1); + stats.incInt(clearsId, 1); } public long getConflatedEventsCount() { @@ -1432,55 +1399,47 @@ public class CachePerfStats { } public void incConflatedEventsCount() { - this.stats.incLong(conflatedEventsId, 1); + stats.incLong(conflatedEventsId, 1); } public int getTombstoneCount() { - return this.stats.getInt(tombstoneCountId); + return stats.getInt(tombstoneCountId); } public void incTombstoneCount(int amount) { - this.stats.incInt(tombstoneCountId, amount); + stats.incInt(tombstoneCountId, amount); } public int getTombstoneGCCount() { - return this.stats.getInt(tombstoneGCCountId); + return stats.getInt(tombstoneGCCountId); } public void incTombstoneGCCount() { - this.stats.incInt(tombstoneGCCountId, 1); + stats.incInt(tombstoneGCCountId, 1); } - public void setReplicatedTombstonesSize(long size) { - this.stats.setLong(tombstoneOverhead1Id, size); + void setReplicatedTombstonesSize(long size) { + stats.setLong(tombstoneOverhead1Id, size); } - public long getReplicatedTombstonesSize() { - return this.stats.getLong(tombstoneOverhead1Id); - } - - public void setNonReplicatedTombstonesSize(long size) { - this.stats.setLong(tombstoneOverhead2Id, size); - } - - public long getNonReplicatedTombstonesSize() { - return this.stats.getLong(tombstoneOverhead2Id); + void setNonReplicatedTombstonesSize(long size) { + stats.setLong(tombstoneOverhead2Id, size); } public int getClearTimeouts() { - return this.stats.getInt(clearTimeoutsId); + return stats.getInt(clearTimeoutsId); } public void incClearTimeouts() { - this.stats.incInt(clearTimeoutsId, 1); + stats.incInt(clearTimeoutsId, 1); } public void incPRQueryRetries() { - this.stats.incLong(partitionedRegionQueryRetriesId, 1); + stats.incLong(partitionedRegionQueryRetriesId, 1); } - public long getPRQueryRetries() { - return this.stats.getLong(partitionedRegionQueryRetriesId); + long getPRQueryRetries() { + return stats.getLong(partitionedRegionQueryRetriesId); } public QueueStatHelper getEvictionQueueStatHelper() { @@ -1503,40 +1462,28 @@ public class CachePerfStats { } public void incMetaDataRefreshCount() { - this.stats.incLong(metaDataRefreshCountId, 1); - } - - public long getMetaDataRefreshCount() { - return this.stats.getLong(metaDataRefreshCountId); - } - - public long getImportedEntriesCount() { - return stats.getLong(importedEntriesCountId); + stats.incLong(metaDataRefreshCountId, 1); } - public long getImportTime() { - return stats.getLong(importTimeId); + long getMetaDataRefreshCount() { + return stats.getLong(metaDataRefreshCountId); } public void endImport(long entryCount, long start) { stats.incLong(importedEntriesCountId, entryCount); if (enableClockStats) { - stats.incLong(importTimeId, getStatTime() - start); + stats.incLong(importTimeId, getClockTime() - start); } } - public long getExportedEntriesCount() { - return stats.getLong(exportedEntriesCountId); - } - - public long getExportTime() { - return stats.getLong(exportTimeId); - } - public void endExport(long entryCount, long start) { stats.incLong(exportedEntriesCountId, entryCount); if (enableClockStats) { - stats.incLong(exportTimeId, getStatTime() - start); + stats.incLong(exportTimeId, getClockTime() - start); } } + + interface Clock { + long getTime(); + } } diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DummyCachePerfStats.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DummyCachePerfStats.java index a707a6b..b5042e9 100755 --- a/geode-core/src/main/java/org/apache/geode/internal/cache/DummyCachePerfStats.java +++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DummyCachePerfStats.java @@ -32,11 +32,6 @@ public class DummyCachePerfStats extends CachePerfStats { // //////////////////// Accessing Stats ////////////////////// @Override - public int getLoadsInProgress() { - return 0; - } - - @Override public int getLoadsCompleted() { return 0; } @@ -47,26 +42,11 @@ public class DummyCachePerfStats extends CachePerfStats { } @Override - public int getNetloadsInProgress() { - return 0; - } - - @Override public int getNetloadsCompleted() { return 0; } @Override - public long getNetloadTime() { - return 0; - } - - @Override - public int getNetsearchesInProgress() { - return 0; - } - - @Override public int getNetsearchesCompleted() { return 0; } @@ -77,21 +57,11 @@ public class DummyCachePerfStats extends CachePerfStats { } @Override - public int getGetInitialImagesInProgress() { - return 0; - } - - @Override public int getGetInitialImagesCompleted() { return 0; } @Override - public long getGetInitialImageTime() { - return 0; - } - - @Override public int getGetInitialImageKeysReceived() { return 0; } @@ -102,11 +72,6 @@ public class DummyCachePerfStats extends CachePerfStats { } @Override - public int getPartitionedRegions() { - return 0; - } - - @Override public int getDestroys() { return 0; } @@ -155,27 +120,12 @@ public class DummyCachePerfStats extends CachePerfStats { public void incReliableQueuedOps(int inc) {} @Override - public int getReliableQueueSize() { - return 0; - } - - @Override public void incReliableQueueSize(int inc) {} @Override - public int getReliableQueueMax() { - return 0; - } - - @Override public void incReliableQueueMax(int inc) {} @Override - public int getReliableRegions() { - return 0; - } - - @Override public void incReliableRegions(int inc) {} @Override @@ -187,11 +137,6 @@ public class DummyCachePerfStats extends CachePerfStats { public void incReliableRegionsMissing(int inc) {} @Override - public int getReliableRegionsQueuing() { - return 0; - } - - @Override public void incReliableRegionsQueuing(int inc) {} @Override @@ -221,11 +166,6 @@ public class DummyCachePerfStats extends CachePerfStats { @Override public void incQueuedEvents(int inc) {} - @Override - public long getQueuedEvents() { - return 0; - } - // //////////////////// Updating Stats ////////////////////// @Override diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/CachePerfStatsTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/CachePerfStatsTest.java new file mode 100644 index 0000000..aef2a9e --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/internal/cache/CachePerfStatsTest.java @@ -0,0 +1,1126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ +package org.apache.geode.internal.cache; + +import static org.apache.geode.internal.cache.CachePerfStats.cacheListenerCallsCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.cacheWriterCallsCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.clearsId; +import static org.apache.geode.internal.cache.CachePerfStats.createsId; +import static org.apache.geode.internal.cache.CachePerfStats.deltaFailedUpdatesId; +import static org.apache.geode.internal.cache.CachePerfStats.deltaFullValuesRequestedId; +import static org.apache.geode.internal.cache.CachePerfStats.deltaFullValuesSentId; +import static org.apache.geode.internal.cache.CachePerfStats.deltaGetInitialImagesCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.deltaUpdatesId; +import static org.apache.geode.internal.cache.CachePerfStats.deltasPreparedId; +import static org.apache.geode.internal.cache.CachePerfStats.deltasSentId; +import static org.apache.geode.internal.cache.CachePerfStats.destroysId; +import static org.apache.geode.internal.cache.CachePerfStats.evictorJobsCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.evictorJobsStartedId; +import static org.apache.geode.internal.cache.CachePerfStats.getInitialImagesCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.getTimeId; +import static org.apache.geode.internal.cache.CachePerfStats.getsId; +import static org.apache.geode.internal.cache.CachePerfStats.indexUpdateCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.invalidatesId; +import static org.apache.geode.internal.cache.CachePerfStats.loadsCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.missesId; +import static org.apache.geode.internal.cache.CachePerfStats.netloadsCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.netsearchesCompletedId; +import static org.apache.geode.internal.cache.CachePerfStats.putTimeId; +import static org.apache.geode.internal.cache.CachePerfStats.putallsId; +import static org.apache.geode.internal.cache.CachePerfStats.putsId; +import static org.apache.geode.internal.cache.CachePerfStats.queryExecutionsId; +import static org.apache.geode.internal.cache.CachePerfStats.removeAllsId; +import static org.apache.geode.internal.cache.CachePerfStats.retriesId; +import static org.apache.geode.internal.cache.CachePerfStats.txCommitChangesId; +import static org.apache.geode.internal.cache.CachePerfStats.txCommitsId; +import static org.apache.geode.internal.cache.CachePerfStats.txFailureChangesId; +import static org.apache.geode.internal.cache.CachePerfStats.txFailuresId; +import static org.apache.geode.internal.cache.CachePerfStats.txRollbackChangesId; +import static org.apache.geode.internal.cache.CachePerfStats.txRollbacksId; +import static org.apache.geode.internal.cache.CachePerfStats.updatesId; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; + +import org.apache.geode.Statistics; +import org.apache.geode.StatisticsFactory; +import org.apache.geode.StatisticsType; +import org.apache.geode.internal.cache.CachePerfStats.Clock; +import org.apache.geode.internal.statistics.StatisticsManager; +import org.apache.geode.internal.stats50.Atomic50StatisticsImpl; + +/** + * Unit tests for {@link CachePerfStats}. + */ +public class CachePerfStatsTest { + + private static final String TEXT_ID = "cachePerfStats"; + private static final long CLOCK_TIME = 10; + + private Statistics statistics; + private CachePerfStats cachePerfStats; + + @Before + public void setUp() { + StatisticsType statisticsType = CachePerfStats.getStatisticsType(); + + StatisticsManager statisticsManager = mock(StatisticsManager.class); + StatisticsFactory statisticsFactory = mock(StatisticsFactory.class); + Clock clock = mock(Clock.class); + + statistics = spy(new Atomic50StatisticsImpl(statisticsType, TEXT_ID, 1, 1, + statisticsManager)); + + when(clock.getTime()).thenReturn(CLOCK_TIME); + when(statisticsFactory.createAtomicStatistics(eq(statisticsType), eq(TEXT_ID))) + .thenReturn(statistics); + + CachePerfStats.enableClockStats = true; + cachePerfStats = new CachePerfStats(statisticsFactory, TEXT_ID, clock); + } + + @Test + public void getPutsDelegatesToStatistics() { + statistics.incInt(putsId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getPuts()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code puts} is to invoke + * {@code endPut}. + */ + @Test + public void endPutIncrementsPuts() { + cachePerfStats.endPut(0, false); + + assertThat(statistics.getInt(putsId)).isEqualTo(1); + } + + /** + * Characterization test: {@code puts} currently wraps to negative from max integer value. + */ + @Test + public void putsWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(putsId, Integer.MAX_VALUE); + + cachePerfStats.endPut(0, false); + + assertThat(cachePerfStats.getPuts()).isNegative(); + } + + @Test + public void getGetsDelegatesToStatistics() { + statistics.incInt(getsId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getGets()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code gets} is to invoke + * {@code endGet}. + */ + @Test + public void endGetIncrementsGets() { + cachePerfStats.endGet(0, false); + + assertThat(statistics.getInt(getsId)).isEqualTo(1); + } + + /** + * Characterization test: {@code gets} currently wraps to negative from max integer value. + */ + @Test + public void getsWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(getsId, Integer.MAX_VALUE); + + cachePerfStats.endGet(0, false); + + assertThat(cachePerfStats.getGets()).isNegative(); + } + + @Test + public void getPutTimeDelegatesToStatistics() { + statistics.incLong(putTimeId, Long.MAX_VALUE); + + assertThat(cachePerfStats.getPutTime()).isEqualTo(Long.MAX_VALUE); + + } + + /** + * Characterization test: Note that the only way to increment {@code putTime} is to invoke + * {@code endPut}. + */ + @Test + public void endPutIncrementsPutTime() { + cachePerfStats.endPut(0, false); + + assertThat(statistics.getLong(putTimeId)).isEqualTo(CLOCK_TIME); + } + + @Test + public void getGetTimeDelegatesToStatistics() { + statistics.incLong(getTimeId, Long.MAX_VALUE); + + assertThat(cachePerfStats.getGetTime()).isEqualTo(Long.MAX_VALUE); + + } + + /** + * Characterization test: Note that the only way to increment {@code getTime} is to invoke + * {@code endGet}. + */ + @Test + public void endGetIncrementsGetTime() { + cachePerfStats.endGet(0, false); + + assertThat(statistics.getLong(getTimeId)).isEqualTo(CLOCK_TIME); + } + + @Test + public void getDestroysDelegatesToStatistics() { + statistics.incInt(destroysId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getDestroys()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incDestroysIncrementsDestroys() { + cachePerfStats.incDestroys(); + + assertThat(statistics.getInt(destroysId)).isEqualTo(1); + } + + /** + * Characterization test: {@code destroys} currently wraps to negative from max integer value. + */ + @Test + public void destroysWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(destroysId, Integer.MAX_VALUE); + + cachePerfStats.incDestroys(); + + assertThat(cachePerfStats.getDestroys()).isNegative(); + } + + @Test + public void getCreatesDelegatesToStatistics() { + statistics.incInt(createsId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getCreates()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incCreatesIncrementsDestroys() { + cachePerfStats.incCreates(); + + assertThat(statistics.getInt(createsId)).isEqualTo(1); + } + + /** + * Characterization test: {@code creates} currently wraps to negative from max integer value. + */ + @Test + public void createsWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(createsId, Integer.MAX_VALUE); + + cachePerfStats.incCreates(); + + assertThat(cachePerfStats.getCreates()).isNegative(); + } + + @Test + public void getPutAllsDelegatesToStatistics() { + statistics.incInt(putallsId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getPutAlls()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code putalls} is to invoke + * {@code endPutAll}. + */ + @Test + public void endPutAllIncrementsDestroys() { + cachePerfStats.endPutAll(0); + + assertThat(statistics.getInt(putallsId)).isEqualTo(1); + } + + /** + * Characterization test: {@code putAlls} currently wraps to negative from max integer value. + */ + @Test + public void putAllsWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(putallsId, Integer.MAX_VALUE); + + cachePerfStats.endPutAll(0); + + assertThat(cachePerfStats.getPutAlls()).isNegative(); + } + + @Test + public void getRemoveAllsDelegatesToStatistics() { + statistics.incInt(removeAllsId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getRemoveAlls()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code removeAlls} is to invoke + * {@code endRemoveAll}. + */ + @Test + public void endRemoveAllIncrementsDestroys() { + cachePerfStats.endRemoveAll(0); + + assertThat(statistics.getInt(removeAllsId)).isEqualTo(1); + } + + /** + * Characterization test: {@code removeAlls} currently wraps to negative from max integer value. + */ + @Test + public void removeAllsWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(removeAllsId, Integer.MAX_VALUE); + + cachePerfStats.endRemoveAll(0); + + assertThat(cachePerfStats.getRemoveAlls()).isNegative(); + } + + @Test + public void getUpdatesDelegatesToStatistics() { + statistics.incInt(updatesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getUpdates()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code updates} is to invoke + * {@code endPut}. + */ + @Test + public void endPutIncrementsUpdates() { + cachePerfStats.endPut(0, true); + + assertThat(statistics.getInt(updatesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code updates} currently wraps to negative from max integer value. + */ + @Test + public void updatesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(updatesId, Integer.MAX_VALUE); + + cachePerfStats.endPut(0, true); + + assertThat(cachePerfStats.getUpdates()).isNegative(); + } + + @Test + public void getInvalidatesDelegatesToStatistics() { + statistics.incInt(invalidatesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getInvalidates()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incInvalidatesIncrementsInvalidates() { + cachePerfStats.incInvalidates(); + + assertThat(statistics.getInt(invalidatesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code invalidates} currently wraps to negative from max integer value. + */ + @Test + public void invalidatesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(invalidatesId, Integer.MAX_VALUE); + + cachePerfStats.incInvalidates(); + + assertThat(cachePerfStats.getInvalidates()).isNegative(); + } + + @Test + public void getMissesDelegatesToStatistics() { + statistics.incInt(missesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getMisses()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code misses} is to invoke + * {@code endGet}. + */ + @Test + public void endGetIncrementsMisses() { + cachePerfStats.endGet(0, true); + + assertThat(statistics.getInt(missesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code misses} currently wraps to negative from max integer value. + */ + @Test + public void missesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(missesId, Integer.MAX_VALUE); + + cachePerfStats.endGet(0, true); + + assertThat(cachePerfStats.getMisses()).isNegative(); + } + + @Test + public void getRetriesDelegatesToStatistics() { + statistics.incInt(retriesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getRetries()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incRetriesIncrementsRetries() { + cachePerfStats.incRetries(); + + assertThat(statistics.getInt(retriesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code retries} currently wraps to negative from max integer value. + */ + @Test + public void retriesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(retriesId, Integer.MAX_VALUE); + + cachePerfStats.incRetries(); + + assertThat(cachePerfStats.getRetries()).isNegative(); + } + + @Test + public void getClearsDelegatesToStatistics() { + statistics.incInt(clearsId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getClearCount()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incClearCountIncrementsClears() { + cachePerfStats.incClearCount(); + + assertThat(statistics.getInt(clearsId)).isEqualTo(1); + } + + /** + * Characterization test: {@code clears} currently wraps to negative from max integer value. + */ + @Test + public void clearsWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(clearsId, Integer.MAX_VALUE); + + cachePerfStats.incClearCount(); + + assertThat(cachePerfStats.getClearCount()).isNegative(); + } + + @Test + public void getLoadsCompletedDelegatesToStatistics() { + statistics.incInt(loadsCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getLoadsCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code loadsCompleted} is to invoke + * {@code endLoad}. + */ + @Test + public void endLoadIncrementsMisses() { + cachePerfStats.endLoad(0); + + assertThat(statistics.getInt(loadsCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code loads} currently wraps to negative from max integer value. + */ + @Test + public void loadsCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(loadsCompletedId, Integer.MAX_VALUE); + + cachePerfStats.endLoad(0); + + assertThat(cachePerfStats.getLoadsCompleted()).isNegative(); + } + + @Test + public void getNetloadsCompletedDelegatesToStatistics() { + statistics.incInt(netloadsCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getNetloadsCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code netloadsCompleted} is to + * invoke {@code endNetload}. + */ + @Test + public void endNetloadIncrementsNetloadsCompleted() { + cachePerfStats.endNetload(0); + + assertThat(statistics.getInt(netloadsCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code netloadsComplete} currently wraps to negative from max integer + * value. + */ + @Test + public void netloadsCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(netloadsCompletedId, Integer.MAX_VALUE); + + cachePerfStats.endNetload(0); + + assertThat(cachePerfStats.getNetloadsCompleted()).isNegative(); + } + + @Test + public void getNetsearchesCompletedDelegatesToStatistics() { + statistics.incInt(netsearchesCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getNetsearchesCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code netsearchesCompleted} is to + * invoke {@code endNetsearch}. + */ + @Test + public void endLoadIncrementsNetsearchesCompleted() { + cachePerfStats.endNetsearch(0); + + assertThat(statistics.getInt(netsearchesCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code netsearchesCompleted} currently wraps to negative from max + * integer value. + */ + @Test + public void netsearchesCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(netsearchesCompletedId, Integer.MAX_VALUE); + + cachePerfStats.endNetsearch(0); + + assertThat(cachePerfStats.getNetsearchesCompleted()).isNegative(); + } + + @Test + public void getCacheWriterCallsCompletedDelegatesToStatistics() { + statistics.incInt(cacheWriterCallsCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getCacheWriterCallsCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code cacheWriterCallsCompleted} is + * to invoke {@code endCacheWriterCall}. + */ + @Test + public void endCacheWriterCallIncrementsCacheWriterCallsCompleted() { + cachePerfStats.endCacheWriterCall(0); + + assertThat(statistics.getInt(cacheWriterCallsCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code cacheWriterCallsCompleted} currently wraps to negative from max + * integer value. + */ + @Test + public void cacheWriterCallsCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(cacheWriterCallsCompletedId, Integer.MAX_VALUE); + + cachePerfStats.endCacheWriterCall(0); + + assertThat(cachePerfStats.getCacheWriterCallsCompleted()).isNegative(); + } + + @Test + public void getCacheListenerCallsCompletedDelegatesToStatistics() { + statistics.incInt(cacheListenerCallsCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getCacheListenerCallsCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code cacheListenerCallsCompleted} + * is to invoke {@code endCacheListenerCall}. + */ + @Test + public void endCacheWriterCallIncrementsCacheListenerCallsCompleted() { + cachePerfStats.endCacheListenerCall(0); + + assertThat(statistics.getInt(cacheListenerCallsCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code cacheListenerCallsCompleted} currently wraps to negative from max + * integer value. + */ + @Test + public void cacheListenerCallsCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(cacheListenerCallsCompletedId, Integer.MAX_VALUE); + + cachePerfStats.endCacheListenerCall(0); + + assertThat(cachePerfStats.getCacheListenerCallsCompleted()).isNegative(); + } + + @Test + public void getGetInitialImagesCompletedDelegatesToStatistics() { + statistics.incInt(getInitialImagesCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getGetInitialImagesCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code getInitialImagesCompleted} + * is to invoke {@code endGetInitialImage}. + */ + @Test + public void endCacheWriterCallIncrementsGetInitialImagesCompleted() { + cachePerfStats.endGetInitialImage(0); + + assertThat(statistics.getInt(getInitialImagesCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code getInitialImagesCompleted} currently wraps to negative from max + * integer value. + */ + @Test + public void getInitialImagesCompletedCallsCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(getInitialImagesCompletedId, Integer.MAX_VALUE); + + cachePerfStats.endGetInitialImage(0); + + assertThat(cachePerfStats.getGetInitialImagesCompleted()).isNegative(); + } + + @Test + public void getDeltaGetInitialImagesCompletedDelegatesToStatistics() { + statistics.incInt(deltaGetInitialImagesCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getDeltaGetInitialImagesCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incDeltaGIICompletedIncrementsDeltaGetInitialImagesCompleted() { + cachePerfStats.incDeltaGIICompleted(); + + assertThat(statistics.getInt(deltaGetInitialImagesCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code deltaGetInitialImagesCompleted} currently wraps to negative from + * max integer value. + */ + @Test + public void deltaGetInitialImagesCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(deltaGetInitialImagesCompletedId, Integer.MAX_VALUE); + + cachePerfStats.incDeltaGIICompleted(); + + assertThat(cachePerfStats.getDeltaGetInitialImagesCompleted()).isNegative(); + } + + @Test + public void getQueryExecutionsDelegatesToStatistics() { + statistics.incInt(queryExecutionsId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getQueryExecutions()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code queryExecutions} is to invoke + * {@code endQueryExecution}. + */ + @Test + public void endQueryExecutionIncrementsQueryExecutions() { + cachePerfStats.endQueryExecution(1); + + assertThat(statistics.getInt(queryExecutionsId)).isEqualTo(1); + } + + /** + * Characterization test: {@code queryExecutions} currently wraps to negative from max integer + * value. + */ + @Test + public void queryExecutionsWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(queryExecutionsId, Integer.MAX_VALUE); + + cachePerfStats.endQueryExecution(1); + + assertThat(cachePerfStats.getQueryExecutions()).isNegative(); + } + + @Test + public void getTxCommitsDelegatesToStatistics() { + statistics.incInt(txCommitsId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getTxCommits()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code txCommits} is to invoke + * {@code txSuccess}. + */ + @Test + public void txSuccessIncrementsTxCommits() { + cachePerfStats.txSuccess(1, 1, 1); + + assertThat(statistics.getInt(txCommitsId)).isEqualTo(1); + } + + /** + * Characterization test: {@code txCommits} currently wraps to negative from max integer value. + */ + @Test + public void txCommitsWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(txCommitsId, Integer.MAX_VALUE); + + cachePerfStats.txSuccess(1, 1, 1); + + assertThat(cachePerfStats.getTxCommits()).isNegative(); + } + + @Test + public void getTxFailuresDelegatesToStatistics() { + statistics.incInt(txFailuresId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getTxFailures()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code txFailures} is to invoke + * {@code txFailure}. + */ + @Test + public void txFailureIncrementsTxFailures() { + cachePerfStats.txFailure(1, 1, 1); + + assertThat(statistics.getInt(txFailuresId)).isEqualTo(1); + } + + /** + * Characterization test: {@code txFailures} currently wraps to negative from max integer value. + */ + @Test + public void txFailuresWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(txFailuresId, Integer.MAX_VALUE); + + cachePerfStats.txFailure(1, 1, 1); + + assertThat(cachePerfStats.getTxFailures()).isNegative(); + } + + @Test + public void getTxRollbacksDelegatesToStatistics() { + statistics.incInt(txRollbacksId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getTxRollbacks()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code txRollbacks} is to invoke + * {@code txRollback}. + */ + @Test + public void txRollbackIncrementsTxRollbacks() { + cachePerfStats.txRollback(1, 1, 1); + + assertThat(statistics.getInt(txRollbacksId)).isEqualTo(1); + } + + /** + * Characterization test: {@code txRollbacks} currently wraps to negative from max integer value. + */ + @Test + public void txRollbacksWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(txRollbacksId, Integer.MAX_VALUE); + + cachePerfStats.txRollback(1, 1, 1); + + assertThat(cachePerfStats.getTxRollbacks()).isNegative(); + } + + @Test + public void getTxCommitChangesDelegatesToStatistics() { + statistics.incInt(txCommitChangesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getTxCommitChanges()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code txCommitChanges} is to invoke + * {@code txSuccess}. + */ + @Test + public void txSuccessIncrementsTxCommitChanges() { + cachePerfStats.txSuccess(1, 1, 1); + + assertThat(statistics.getInt(txCommitChangesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code txCommitChanges} currently wraps to negative from max integer + * value. + */ + @Test + public void txCommitChangesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(txCommitChangesId, Integer.MAX_VALUE); + + cachePerfStats.txSuccess(1, 1, 1); + + assertThat(cachePerfStats.getTxCommitChanges()).isNegative(); + } + + @Test + public void getTxFailureChangesDelegatesToStatistics() { + statistics.incInt(txFailureChangesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getTxFailureChanges()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code txFailureChanges} is to + * invoke {@code txFailure}. + */ + @Test + public void txFailureIncrementsTxFailureChanges() { + cachePerfStats.txFailure(1, 1, 1); + + assertThat(statistics.getInt(txFailureChangesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code txFailureChanges} currently wraps to negative from max integer + * value. + */ + @Test + public void txFailureChangesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(txFailureChangesId, Integer.MAX_VALUE); + + cachePerfStats.txFailure(1, 1, 1); + + assertThat(cachePerfStats.getTxFailureChanges()).isNegative(); + } + + @Test + public void getTxRollbackChangesDelegatesToStatistics() { + statistics.incInt(txRollbackChangesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getTxRollbackChanges()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code txRollbackChanges} is to + * invoke {@code txRollback}. + */ + @Test + public void txRollbackIncrementsTxRollbackChanges() { + cachePerfStats.txRollback(1, 1, 1); + + assertThat(statistics.getInt(txRollbackChangesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code txRollbackChanges} currently wraps to negative from max integer + * value. + */ + @Test + public void txRollbackChangesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(txRollbackChangesId, Integer.MAX_VALUE); + + cachePerfStats.txRollback(1, 1, 1); + + assertThat(cachePerfStats.getTxRollbackChanges()).isNegative(); + } + + @Test + public void getEvictorJobsStartedChangesDelegatesToStatistics() { + statistics.incInt(evictorJobsStartedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getEvictorJobsStarted()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incEvictorJobsStartedIncrementsEvictorJobsStarted() { + cachePerfStats.incEvictorJobsStarted(); + + assertThat(statistics.getInt(evictorJobsStartedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code evictorJobsStarted} currently wraps to negative from max integer + * value. + */ + @Test + public void evictorJobsStartedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(evictorJobsStartedId, Integer.MAX_VALUE); + + cachePerfStats.incEvictorJobsStarted(); + + assertThat(cachePerfStats.getEvictorJobsStarted()).isNegative(); + } + + @Test + public void getEvictorJobsCompletedChangesDelegatesToStatistics() { + statistics.incInt(evictorJobsCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getEvictorJobsCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incEvictorJobsCompletedIncrementsEvictorJobsCompleted() { + cachePerfStats.incEvictorJobsCompleted(); + + assertThat(statistics.getInt(evictorJobsCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code evictorJobsCompleted} currently wraps to negative from max + * integer value. + */ + @Test + public void evictorJobsCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(evictorJobsCompletedId, Integer.MAX_VALUE); + + cachePerfStats.incEvictorJobsCompleted(); + + assertThat(cachePerfStats.getEvictorJobsCompleted()).isNegative(); + } + + @Test + public void getIndexUpdateCompletedChangesDelegatesToStatistics() { + statistics.incInt(indexUpdateCompletedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getIndexUpdateCompleted()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code indexUpdateCompleted} is to + * invoke {@code endIndexUpdate}. + */ + @Test + public void endIndexUpdateIncrementsEvictorJobsCompleted() { + cachePerfStats.endIndexUpdate(1); + + assertThat(statistics.getInt(indexUpdateCompletedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code indexUpdateCompleted} currently wraps to negative from max + * integer value. + */ + @Test + public void indexUpdateCompletedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(indexUpdateCompletedId, Integer.MAX_VALUE); + + cachePerfStats.endIndexUpdate(1); + + assertThat(cachePerfStats.getIndexUpdateCompleted()).isNegative(); + } + + @Test + public void getDeltaUpdatesDelegatesToStatistics() { + statistics.incInt(deltaUpdatesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getDeltaUpdates()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code deltaUpdates} is to + * invoke {@code endDeltaUpdate}. + */ + @Test + public void endDeltaUpdateIncrementsDeltaUpdates() { + cachePerfStats.endDeltaUpdate(1); + + assertThat(statistics.getInt(deltaUpdatesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code deltaUpdatesId} currently wraps to negative from max integer + * value. + */ + @Test + public void deltaUpdatesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(deltaUpdatesId, Integer.MAX_VALUE); + + cachePerfStats.endDeltaUpdate(1); + + assertThat(cachePerfStats.getDeltaUpdates()).isNegative(); + } + + @Test + public void getDeltaFailedUpdatesDelegatesToStatistics() { + statistics.incInt(deltaFailedUpdatesId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getDeltaFailedUpdates()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incDeltaFailedUpdatesIncrementsDeltaFailedUpdates() { + cachePerfStats.incDeltaFailedUpdates(); + + assertThat(statistics.getInt(deltaFailedUpdatesId)).isEqualTo(1); + } + + /** + * Characterization test: {@code deltaFailedUpdates} currently wraps to negative from max + * integer value. + */ + @Test + public void deltaFailedUpdatesWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(deltaFailedUpdatesId, Integer.MAX_VALUE); + + cachePerfStats.incDeltaFailedUpdates(); + + assertThat(cachePerfStats.getDeltaFailedUpdates()).isNegative(); + } + + @Test + public void getDeltasPreparedUpdatesDelegatesToStatistics() { + statistics.incInt(deltasPreparedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getDeltasPrepared()).isEqualTo(Integer.MAX_VALUE); + } + + /** + * Characterization test: Note that the only way to increment {@code deltasPrepared} is to + * invoke {@code endDeltaPrepared}. + */ + @Test + public void endDeltaPreparedIncrementsDeltasPrepared() { + cachePerfStats.endDeltaPrepared(1); + + assertThat(statistics.getInt(deltasPreparedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code deltasPrepared} currently wraps to negative from max + * integer value. + */ + @Test + public void deltasPreparedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(deltasPreparedId, Integer.MAX_VALUE); + + cachePerfStats.endDeltaPrepared(1); + + assertThat(cachePerfStats.getDeltasPrepared()).isNegative(); + } + + @Test + public void getDeltasSentDelegatesToStatistics() { + statistics.incInt(deltasSentId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getDeltasSent()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incDeltasSentPreparedIncrementsDeltasSent() { + cachePerfStats.incDeltasSent(); + + assertThat(statistics.getInt(deltasSentId)).isEqualTo(1); + } + + /** + * Characterization test: {@code deltasSent} currently wraps to negative from max integer value. + */ + @Test + public void deltasSentWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(deltasSentId, Integer.MAX_VALUE); + + cachePerfStats.incDeltasSent(); + + assertThat(cachePerfStats.getDeltasSent()).isNegative(); + } + + @Test + public void getDeltaFullValuesSentDelegatesToStatistics() { + statistics.incInt(deltaFullValuesSentId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getDeltaFullValuesSent()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incDeltaFullValuesSentIncrementsDeltaFullValuesSent() { + cachePerfStats.incDeltaFullValuesSent(); + + assertThat(statistics.getInt(deltaFullValuesSentId)).isEqualTo(1); + } + + /** + * Characterization test: {@code deltaFullValuesSent} currently wraps to negative from max integer + * value. + */ + @Test + public void deltaFullValuesSentWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(deltaFullValuesSentId, Integer.MAX_VALUE); + + cachePerfStats.incDeltaFullValuesSent(); + + assertThat(cachePerfStats.getDeltaFullValuesSent()).isNegative(); + } + + @Test + public void getDeltaFullValuesRequestedDelegatesToStatistics() { + statistics.incInt(deltaFullValuesRequestedId, Integer.MAX_VALUE); + + assertThat(cachePerfStats.getDeltaFullValuesRequested()).isEqualTo(Integer.MAX_VALUE); + } + + @Test + public void incDeltaFullValuesRequestedIncrementsDeltaFullValuesRequested() { + cachePerfStats.incDeltaFullValuesRequested(); + + assertThat(statistics.getInt(deltaFullValuesRequestedId)).isEqualTo(1); + } + + /** + * Characterization test: {@code deltaFullValuesRequested} currently wraps to negative from max + * integer value. + */ + @Test + public void deltaFullValuesRequestedWrapsFromMaxIntegerToNegativeValue() { + statistics.incInt(deltaFullValuesRequestedId, Integer.MAX_VALUE); + + cachePerfStats.incDeltaFullValuesRequested(); + + assertThat(cachePerfStats.getDeltaFullValuesRequested()).isNegative(); + } +}