From 86972e132336527af85f57c47ef19b5a580c7ca7 Mon Sep 17 00:00:00 2001 From: vdpyatkov Date: Wed, 25 May 2016 14:32:14 +0300 Subject: [PATCH 1/3] IGNITE-3190 OffHeap cache metrics do not detected get from OffHeap --- .../processors/cache/GridCacheSwapManager.java | 3 + .../cache/local/CacheOffHeapMetricsTest.java | 359 +++++++++++++++++++++ .../IgniteCacheMetricsSelfTestSuite.java | 2 + 3 files changed, 364 insertions(+) create mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java index 7f6a83f..30159fa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSwapManager.java @@ -820,6 +820,9 @@ public boolean containsKey(KeyCacheObject key, int part) throws IgniteCheckedExc IgniteBiTuple ptr = offheap.valuePointer(spaceName, part, key, key.valueBytes(cctx.cacheObjectContext())); + if (cctx.config().isStatisticsEnabled()) + cctx.cache().metrics0().onOffHeapRead(ptr != null); + if (ptr != null) { assert ptr.get1() != null; assert ptr.get2() != null; diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java new file mode 100644 index 0000000..eeda703 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java @@ -0,0 +1,359 @@ +/* + * 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. + */ + +/* + * 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.ignite.internal.processors.cache.local; + +import org.apache.ignite.IgniteCache; +import org.apache.ignite.cache.CacheAtomicityMode; +import org.apache.ignite.cache.CacheMemoryMode; +import org.apache.ignite.cache.CacheMode; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.spi.swapspace.file.FileSwapSpaceSpi; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; + +/** + * + */ +public class CacheOffHeapMetricsTest extends GridCommonAbstractTest { + /** Grid count. */ + private static final int GRID_CNT = 1; + + /** Keys count. */ + private static final int KEYS_CNT = 1000; + + /** Entry size. */ + private static final int ENTRY_SIZE = 86; // Calculated as allocated size divided on entries count. + + /** Offheap max count. */ + private static final int OFFHEAP_MAX_CNT = KEYS_CNT / 2; + + /** Offheap max size. */ + private static final int OFFHEAP_MAX_SIZE = ENTRY_SIZE * OFFHEAP_MAX_CNT; + + /** Cache. */ + private IgniteCache cache; + + /** {@inheritDoc} */ + @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { + IgniteConfiguration cfg = super.getConfiguration(gridName); + + cfg.setSwapSpaceSpi(new FileSwapSpaceSpi()); + + return cfg; + } + + /** + * @param offHeapSize Max off-heap size. + * @param swapEnabled Swap enabled. + */ + private void createCache(int offHeapSize, boolean swapEnabled) { + CacheConfiguration ccfg = defaultCacheConfiguration(); + + ccfg.setStatisticsEnabled(true); + + ccfg.setCacheMode(CacheMode.LOCAL); + ccfg.setAtomicityMode(CacheAtomicityMode.ATOMIC); + ccfg.setMemoryMode(CacheMemoryMode.OFFHEAP_TIERED); + + ccfg.setOffHeapMaxMemory(offHeapSize); + ccfg.setSwapEnabled(swapEnabled); + + cache = grid(0).getOrCreateCache(ccfg); + } + + /** {@inheritDoc} */ + @Override protected void beforeTestsStarted() throws Exception { + super.beforeTestsStarted(); + + startGrids(GRID_CNT); + } + + /** {@inheritDoc} */ + @Override protected void afterTestsStopped() throws Exception { + super.afterTestsStopped(); + + stopAllGrids(); + } + + /** {@inheritDoc} */ + @Override protected void afterTest() throws Exception { + if (cache != null) + cache.destroy(); + } + + /** + * @throws Exception if failed. + */ + public void testOffHeapMetrics() throws Exception { + createCache(0, false); + + for (int i = 0; i < KEYS_CNT; i++) + cache.put(i, i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapGets()); + assertEquals(0, cache.localMetrics().getOffHeapHits()); + assertEquals(0f, cache.localMetrics().getOffHeapHitPercentage()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); + assertEquals(100f, cache.localMetrics().getOffHeapMissPercentage()); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(0, cache.localMetrics().getOffHeapEvictions()); + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapHits()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(0, cache.localMetrics().getOffHeapEvictions()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapHits()); + assertEquals(100 / 3.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); + assertEquals(100 - (100 / 3.0), cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(0, cache.localMetrics().getOffHeapEvictions()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.remove(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 4, cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapHits()); + assertEquals(100 * (KEYS_CNT * 2.0) / (KEYS_CNT * 4.0), + cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); + assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0), + cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(0, cache.localMetrics().getOffHeapEvictions()); + assertEquals(0, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + } + + /** + * @throws Exception if failed. + */ + public void testOffHeapAndSwapMetrics() throws Exception { + createCache(OFFHEAP_MAX_SIZE, true); + + for (int i = 0; i < KEYS_CNT; i++) + cache.put(i, i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapGets()); + assertEquals(0, cache.localMetrics().getOffHeapHits()); + assertEquals(0f, cache.localMetrics().getOffHeapHitPercentage()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); + assertEquals(100f, cache.localMetrics().getOffHeapMissPercentage()); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapGets()); + assertEquals(0, cache.localMetrics().getSwapHits()); + assertEquals(0f, cache.localMetrics().getSwapHitPercentage()); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); + assertEquals(100f, cache.localMetrics().getSwapMissPercentage()); + assertEquals(0, cache.localMetrics().getSwapRemovals()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts()); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapGets()); + assertEquals(0, cache.localMetrics().getOffHeapHits()); + assertEquals(0.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); + assertEquals(100.0, cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); + + assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount()); + + for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapGets()); + assertEquals(0, cache.localMetrics().getOffHeapHits()); + assertEquals(0.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapMisses()); + assertEquals(100.0, cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT - KEYS_CNT, + cache.localMetrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); + assertEquals(KEYS_CNT * 3, cache.localMetrics().getSwapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); + assertEquals(100 / 3.0, cache.localMetrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); + assertEquals(100 - (100 / 3.0), cache.localMetrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); + + assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.remove(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 4, cache.localMetrics().getOffHeapGets()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapHits()); + assertEquals(100 * OFFHEAP_MAX_CNT / (KEYS_CNT * 4.0), + cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapMisses()); + assertEquals(100 * (KEYS_CNT * 4 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0), + cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT - 2 * KEYS_CNT, cache.localMetrics().getOffHeapEvictions()); + assertEquals(0, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); + assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapGets()); + assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapHits()); + assertEquals(100 * (KEYS_CNT * 2.0 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT), + cache.localMetrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); + assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT), + cache.localMetrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapRemovals()); + + assertEquals(0, cache.localMetrics().getSwapEntriesCount()); + } + + /** + * Prints stats. + */ + protected void printStat() { + System.out.println("!!! -------------------------------------------------------"); + System.out.println("!!! Puts: cache = " + cache.localMetrics().getCachePuts() + + ", offheap = " + cache.localMetrics().getOffHeapPuts() + + ", swap = " + cache.localMetrics().getSwapPuts()); + System.out.println("!!! Gets: cache = " + cache.localMetrics().getCacheGets() + + ", offheap = " + cache.localMetrics().getOffHeapGets() + + ", swap = " + cache.localMetrics().getSwapGets()); + System.out.println("!!! Removes: cache = " + cache.localMetrics().getCacheRemovals() + + ", offheap = " + cache.localMetrics().getOffHeapRemovals() + + ", swap = " + cache.localMetrics().getSwapRemovals()); + System.out.println("!!! Evictions: cache = " + cache.localMetrics().getCacheEvictions() + + ", offheap = " + cache.localMetrics().getOffHeapEvictions() + + ", swap = none" ); + System.out.println("!!! Hits: cache = " + cache.localMetrics().getCacheHits() + + ", offheap = " + cache.localMetrics().getOffHeapHits() + + ", swap = " + cache.localMetrics().getSwapHits()); + System.out.println("!!! Hit(%): cache = " + cache.localMetrics().getCacheHitPercentage() + + ", offheap = " + cache.localMetrics().getOffHeapHitPercentage() + + ", swap = " + cache.localMetrics().getSwapHitPercentage()); + System.out.println("!!! Misses: cache = " + cache.localMetrics().getCacheMisses() + + ", offheap = " + cache.localMetrics().getOffHeapMisses() + + ", swap = " + cache.localMetrics().getSwapMisses()); + System.out.println("!!! Miss(%): cache = " + cache.localMetrics().getCacheMissPercentage() + + ", offheap = " + cache.localMetrics().getOffHeapMissPercentage() + + ", swap = " + cache.localMetrics().getSwapMissPercentage()); + System.out.println("!!! Entries: cache = " + cache.localMetrics().getSize() + + ", offheap = " + cache.localMetrics().getOffHeapEntriesCount() + + ", swap = " + cache.localMetrics().getSwapEntriesCount()); + System.out.println("!!! Size: cache = none" + + ", offheap = " + cache.localMetrics().getOffHeapAllocatedSize() + + ", swap = " + cache.localMetrics().getSwapSize()); + System.out.println(); + } + +} diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java index 9a64d16..a066b2f 100644 --- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java +++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java @@ -27,6 +27,7 @@ import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheAtomicReplicatedMetricsSelfTest; import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedMetricsSelfTest; import org.apache.ignite.internal.processors.cache.local.CacheLocalOffHeapAndSwapMetricsSelfTest; +import org.apache.ignite.internal.processors.cache.local.CacheOffHeapMetricsTest; import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalMetricsNoStoreSelfTest; import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalMetricsSelfTest; import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalTckMetricsSelfTestImpl; @@ -49,6 +50,7 @@ public static TestSuite suite() throws Exception { suite.addTestSuite(GridCachePartitionedMetricsSelfTest.class); suite.addTestSuite(GridCachePartitionedHitsAndMissesSelfTest.class); suite.addTestSuite(CacheLocalOffHeapAndSwapMetricsSelfTest.class); + suite.addTestSuite(CacheOffHeapMetricsTest.class); // Atomic cache. suite.addTestSuite(GridCacheAtomicLocalMetricsSelfTest.class); From 24f76eec279b1dcc2aa6a887790c7a661303e7e6 Mon Sep 17 00:00:00 2001 From: vdpyatkov Date: Wed, 25 May 2016 14:35:28 +0300 Subject: [PATCH 2/3] IGNITE-3190 OffHeap cache metrics do not detected get from OffHeap Removed comment duplicated. --- .../processors/cache/local/CacheOffHeapMetricsTest.java | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java index eeda703..90f494e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java @@ -15,23 +15,6 @@ * limitations under the License. */ -/* - * 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.ignite.internal.processors.cache.local; import org.apache.ignite.IgniteCache; From 57d9ac9678046733945057ee2bf48c443f31c907 Mon Sep 17 00:00:00 2001 From: vdpyatkov Date: Thu, 26 May 2016 14:05:08 +0300 Subject: [PATCH 3/3] IGNITE-2822 Continuous query local listener can be notified with empty list of events After review --- .../CacheLocalOffHeapAndSwapMetricsSelfTest.java | 216 ++++++++++++- .../cache/local/CacheOffHeapMetricsTest.java | 342 --------------------- 2 files changed, 211 insertions(+), 347 deletions(-) delete mode 100644 modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheLocalOffHeapAndSwapMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheLocalOffHeapAndSwapMetricsSelfTest.java index 15ac96e..84fe827 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheLocalOffHeapAndSwapMetricsSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheLocalOffHeapAndSwapMetricsSelfTest.java @@ -62,17 +62,18 @@ } /** + * @param memoryMode Cache memory mode. * @param offHeapSize Max off-heap size. * @param swapEnabled Swap enabled. */ - private void createCache(int offHeapSize, boolean swapEnabled) { + private void createCache(CacheMemoryMode memoryMode, int offHeapSize, boolean swapEnabled) { CacheConfiguration ccfg = defaultCacheConfiguration(); ccfg.setStatisticsEnabled(true); ccfg.setCacheMode(CacheMode.LOCAL); ccfg.setAtomicityMode(CacheAtomicityMode.ATOMIC); - ccfg.setMemoryMode(CacheMemoryMode.ONHEAP_TIERED); + ccfg.setMemoryMode(memoryMode); ccfg.setOffHeapMaxMemory(offHeapSize); ccfg.setSwapEnabled(swapEnabled); @@ -106,7 +107,7 @@ private void createCache(int offHeapSize, boolean swapEnabled) { * @throws Exception if failed. */ public void testOffHeapMetrics() throws Exception { - createCache(0, false); + createCache(CacheMemoryMode.ONHEAP_TIERED, 0, false); for (int i = 0; i < KEYS_CNT; i++) cache.put(i, i); @@ -187,7 +188,7 @@ public void testOffHeapMetrics() throws Exception { * @throws Exception if failed. */ public void testSwapMetrics() throws Exception { - createCache(-1, true); + createCache(CacheMemoryMode.ONHEAP_TIERED, -1, true); for (int i = 0; i < KEYS_CNT; i++) cache.put(i, i); @@ -256,7 +257,7 @@ public void testSwapMetrics() throws Exception { * @throws Exception if failed. */ public void testOffHeapAndSwapMetrics() throws Exception { - createCache(OFFHEAP_MAX_SIZE, true); + createCache(CacheMemoryMode.ONHEAP_TIERED, OFFHEAP_MAX_SIZE, true); for (int i = 0; i < KEYS_CNT; i++) cache.put(i, i); @@ -376,6 +377,211 @@ public void testOffHeapAndSwapMetrics() throws Exception { } /** + * @throws Exception if failed. + */ + public void testOffHeapMetricsInOffHeapTiered() throws Exception { + createCache(CacheMemoryMode.OFFHEAP_TIERED, 0, false); + + for (int i = 0; i < KEYS_CNT; i++) + cache.put(i, i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapGets()); + assertEquals(0, cache.localMetrics().getOffHeapHits()); + assertEquals(0f, cache.localMetrics().getOffHeapHitPercentage()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); + assertEquals(100f, cache.localMetrics().getOffHeapMissPercentage()); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(0, cache.localMetrics().getOffHeapEvictions()); + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapHits()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(0, cache.localMetrics().getOffHeapEvictions()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapHits()); + assertEquals(100 / 3.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); + assertEquals(100 - (100 / 3.0), cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(0, cache.localMetrics().getOffHeapEvictions()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.remove(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 4, cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapHits()); + assertEquals(100 * (KEYS_CNT * 2.0) / (KEYS_CNT * 4.0), + cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); + assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0), + cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(0, cache.localMetrics().getOffHeapEvictions()); + assertEquals(0, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + } + + /** + * @throws Exception if failed. + */ + public void testOffHeapAndSwapMetricsInOffHeapTiered() throws Exception { + createCache(CacheMemoryMode.OFFHEAP_TIERED, OFFHEAP_MAX_SIZE, true); + + for (int i = 0; i < KEYS_CNT; i++) + cache.put(i, i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapGets()); + assertEquals(0, cache.localMetrics().getOffHeapHits()); + assertEquals(0f, cache.localMetrics().getOffHeapHitPercentage()); + assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); + assertEquals(100f, cache.localMetrics().getOffHeapMissPercentage()); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapGets()); + assertEquals(0, cache.localMetrics().getSwapHits()); + assertEquals(0f, cache.localMetrics().getSwapHitPercentage()); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); + assertEquals(100f, cache.localMetrics().getSwapMissPercentage()); + assertEquals(0, cache.localMetrics().getSwapRemovals()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts()); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapGets()); + assertEquals(0, cache.localMetrics().getOffHeapHits()); + assertEquals(0.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); + assertEquals(100.0, cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); + + assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount()); + + for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapGets()); + assertEquals(0, cache.localMetrics().getOffHeapHits()); + assertEquals(0.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapMisses()); + assertEquals(100.0, cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT - KEYS_CNT, + cache.localMetrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); + assertEquals(KEYS_CNT * 3, cache.localMetrics().getSwapGets()); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); + assertEquals(100 / 3.0, cache.localMetrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); + assertEquals(100 - (100 / 3.0), cache.localMetrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); + + assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.remove(i); + + printStat(); + + assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 4, cache.localMetrics().getOffHeapGets()); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapHits()); + assertEquals(100 * OFFHEAP_MAX_CNT / (KEYS_CNT * 4.0), + cache.localMetrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapMisses()); + assertEquals(100 * (KEYS_CNT * 4 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0), + cache.localMetrics().getOffHeapMissPercentage(), 0.1); + assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapRemovals()); + + assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT - 2 * KEYS_CNT, cache.localMetrics().getOffHeapEvictions()); + assertEquals(0, cache.localMetrics().getOffHeapEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); + assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapGets()); + assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapHits()); + assertEquals(100 * (KEYS_CNT * 2.0 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT), + cache.localMetrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); + assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT), + cache.localMetrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapRemovals()); + + assertEquals(0, cache.localMetrics().getSwapEntriesCount()); + } + + /** * Prints stats. */ protected void printStat() { diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java deleted file mode 100644 index 90f494e..0000000 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheOffHeapMetricsTest.java +++ /dev/null @@ -1,342 +0,0 @@ -/* - * 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.ignite.internal.processors.cache.local; - -import org.apache.ignite.IgniteCache; -import org.apache.ignite.cache.CacheAtomicityMode; -import org.apache.ignite.cache.CacheMemoryMode; -import org.apache.ignite.cache.CacheMode; -import org.apache.ignite.configuration.CacheConfiguration; -import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.spi.swapspace.file.FileSwapSpaceSpi; -import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; - -/** - * - */ -public class CacheOffHeapMetricsTest extends GridCommonAbstractTest { - /** Grid count. */ - private static final int GRID_CNT = 1; - - /** Keys count. */ - private static final int KEYS_CNT = 1000; - - /** Entry size. */ - private static final int ENTRY_SIZE = 86; // Calculated as allocated size divided on entries count. - - /** Offheap max count. */ - private static final int OFFHEAP_MAX_CNT = KEYS_CNT / 2; - - /** Offheap max size. */ - private static final int OFFHEAP_MAX_SIZE = ENTRY_SIZE * OFFHEAP_MAX_CNT; - - /** Cache. */ - private IgniteCache cache; - - /** {@inheritDoc} */ - @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception { - IgniteConfiguration cfg = super.getConfiguration(gridName); - - cfg.setSwapSpaceSpi(new FileSwapSpaceSpi()); - - return cfg; - } - - /** - * @param offHeapSize Max off-heap size. - * @param swapEnabled Swap enabled. - */ - private void createCache(int offHeapSize, boolean swapEnabled) { - CacheConfiguration ccfg = defaultCacheConfiguration(); - - ccfg.setStatisticsEnabled(true); - - ccfg.setCacheMode(CacheMode.LOCAL); - ccfg.setAtomicityMode(CacheAtomicityMode.ATOMIC); - ccfg.setMemoryMode(CacheMemoryMode.OFFHEAP_TIERED); - - ccfg.setOffHeapMaxMemory(offHeapSize); - ccfg.setSwapEnabled(swapEnabled); - - cache = grid(0).getOrCreateCache(ccfg); - } - - /** {@inheritDoc} */ - @Override protected void beforeTestsStarted() throws Exception { - super.beforeTestsStarted(); - - startGrids(GRID_CNT); - } - - /** {@inheritDoc} */ - @Override protected void afterTestsStopped() throws Exception { - super.afterTestsStopped(); - - stopAllGrids(); - } - - /** {@inheritDoc} */ - @Override protected void afterTest() throws Exception { - if (cache != null) - cache.destroy(); - } - - /** - * @throws Exception if failed. - */ - public void testOffHeapMetrics() throws Exception { - createCache(0, false); - - for (int i = 0; i < KEYS_CNT; i++) - cache.put(i, i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapGets()); - assertEquals(0, cache.localMetrics().getOffHeapHits()); - assertEquals(0f, cache.localMetrics().getOffHeapHitPercentage()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); - assertEquals(100f, cache.localMetrics().getOffHeapMissPercentage()); - assertEquals(0, cache.localMetrics().getOffHeapRemovals()); - - assertEquals(0, cache.localMetrics().getOffHeapEvictions()); - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapEntriesCount()); - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPrimaryEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - - for (int i = 0; i < KEYS_CNT; i++) - cache.get(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapHits()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getOffHeapHitPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getOffHeapMissPercentage(), 0.1); - assertEquals(0, cache.localMetrics().getOffHeapRemovals()); - - assertEquals(0, cache.localMetrics().getOffHeapEvictions()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapEntriesCount()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - - for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) - cache.get(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapHits()); - assertEquals(100 / 3.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); - assertEquals(100 - (100 / 3.0), cache.localMetrics().getOffHeapMissPercentage(), 0.1); - assertEquals(0, cache.localMetrics().getOffHeapRemovals()); - - assertEquals(0, cache.localMetrics().getOffHeapEvictions()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapEntriesCount()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - - for (int i = 0; i < KEYS_CNT; i++) - cache.remove(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT * 4, cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapHits()); - assertEquals(100 * (KEYS_CNT * 2.0) / (KEYS_CNT * 4.0), - cache.localMetrics().getOffHeapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); - assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0), - cache.localMetrics().getOffHeapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapRemovals()); - - assertEquals(0, cache.localMetrics().getOffHeapEvictions()); - assertEquals(0, cache.localMetrics().getOffHeapEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - } - - /** - * @throws Exception if failed. - */ - public void testOffHeapAndSwapMetrics() throws Exception { - createCache(OFFHEAP_MAX_SIZE, true); - - for (int i = 0; i < KEYS_CNT; i++) - cache.put(i, i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapGets()); - assertEquals(0, cache.localMetrics().getOffHeapHits()); - assertEquals(0f, cache.localMetrics().getOffHeapHitPercentage()); - assertEquals(KEYS_CNT, cache.localMetrics().getOffHeapMisses()); - assertEquals(100f, cache.localMetrics().getOffHeapMissPercentage()); - assertEquals(0, cache.localMetrics().getOffHeapRemovals()); - - assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions()); - assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); - assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapGets()); - assertEquals(0, cache.localMetrics().getSwapHits()); - assertEquals(0f, cache.localMetrics().getSwapHitPercentage()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); - assertEquals(100f, cache.localMetrics().getSwapMissPercentage()); - assertEquals(0, cache.localMetrics().getSwapRemovals()); - - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapEntriesCount()); - - for (int i = 0; i < KEYS_CNT; i++) - cache.get(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapPuts()); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapGets()); - assertEquals(0, cache.localMetrics().getOffHeapHits()); - assertEquals(0.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getOffHeapMisses()); - assertEquals(100.0, cache.localMetrics().getOffHeapMissPercentage(), 0.1); - assertEquals(0, cache.localMetrics().getOffHeapRemovals()); - - assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEvictions()); - assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); - assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapMisses()); - assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); - - assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount()); - - for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) - cache.get(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapGets()); - assertEquals(0, cache.localMetrics().getOffHeapHits()); - assertEquals(0.0, cache.localMetrics().getOffHeapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 3, cache.localMetrics().getOffHeapMisses()); - assertEquals(100.0, cache.localMetrics().getOffHeapMissPercentage(), 0.1); - assertEquals(0, cache.localMetrics().getOffHeapRemovals()); - - assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT - KEYS_CNT, - cache.localMetrics().getOffHeapEvictions()); - assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapEntriesCount()); - assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapPrimaryEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 3, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapHits()); - assertEquals(100 / 3.0, cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); - assertEquals(100 - (100 / 3.0), cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT, cache.localMetrics().getSwapRemovals()); - - assertEquals(KEYS_CNT - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapEntriesCount()); - - for (int i = 0; i < KEYS_CNT; i++) - cache.remove(i); - - printStat(); - - assertEquals(cache.localMetrics().getCacheEvictions(), cache.localMetrics().getOffHeapGets()); - assertEquals(KEYS_CNT * 4, cache.localMetrics().getOffHeapGets()); - assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapHits()); - assertEquals(100 * OFFHEAP_MAX_CNT / (KEYS_CNT * 4.0), - cache.localMetrics().getOffHeapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapMisses()); - assertEquals(100 * (KEYS_CNT * 4 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0), - cache.localMetrics().getOffHeapMissPercentage(), 0.1); - assertEquals(OFFHEAP_MAX_CNT, cache.localMetrics().getOffHeapRemovals()); - - assertEquals(cache.localMetrics().getCacheEvictions() - OFFHEAP_MAX_CNT - 2 * KEYS_CNT, cache.localMetrics().getOffHeapEvictions()); - assertEquals(0, cache.localMetrics().getOffHeapEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapPrimaryEntriesCount()); - assertEquals(0, cache.localMetrics().getOffHeapBackupEntriesCount()); - - assertEquals(cache.localMetrics().getOffHeapEvictions(), cache.localMetrics().getSwapPuts()); - assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapGets()); - assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapHits()); - assertEquals(100 * (KEYS_CNT * 2.0 - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT), - cache.localMetrics().getSwapHitPercentage(), 0.1); - assertEquals(KEYS_CNT * 2, cache.localMetrics().getSwapMisses()); - assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - OFFHEAP_MAX_CNT), - cache.localMetrics().getSwapMissPercentage(), 0.1); - assertEquals(KEYS_CNT * 2 - OFFHEAP_MAX_CNT, cache.localMetrics().getSwapRemovals()); - - assertEquals(0, cache.localMetrics().getSwapEntriesCount()); - } - - /** - * Prints stats. - */ - protected void printStat() { - System.out.println("!!! -------------------------------------------------------"); - System.out.println("!!! Puts: cache = " + cache.localMetrics().getCachePuts() + - ", offheap = " + cache.localMetrics().getOffHeapPuts() + - ", swap = " + cache.localMetrics().getSwapPuts()); - System.out.println("!!! Gets: cache = " + cache.localMetrics().getCacheGets() + - ", offheap = " + cache.localMetrics().getOffHeapGets() + - ", swap = " + cache.localMetrics().getSwapGets()); - System.out.println("!!! Removes: cache = " + cache.localMetrics().getCacheRemovals() + - ", offheap = " + cache.localMetrics().getOffHeapRemovals() + - ", swap = " + cache.localMetrics().getSwapRemovals()); - System.out.println("!!! Evictions: cache = " + cache.localMetrics().getCacheEvictions() + - ", offheap = " + cache.localMetrics().getOffHeapEvictions() + - ", swap = none" ); - System.out.println("!!! Hits: cache = " + cache.localMetrics().getCacheHits() + - ", offheap = " + cache.localMetrics().getOffHeapHits() + - ", swap = " + cache.localMetrics().getSwapHits()); - System.out.println("!!! Hit(%): cache = " + cache.localMetrics().getCacheHitPercentage() + - ", offheap = " + cache.localMetrics().getOffHeapHitPercentage() + - ", swap = " + cache.localMetrics().getSwapHitPercentage()); - System.out.println("!!! Misses: cache = " + cache.localMetrics().getCacheMisses() + - ", offheap = " + cache.localMetrics().getOffHeapMisses() + - ", swap = " + cache.localMetrics().getSwapMisses()); - System.out.println("!!! Miss(%): cache = " + cache.localMetrics().getCacheMissPercentage() + - ", offheap = " + cache.localMetrics().getOffHeapMissPercentage() + - ", swap = " + cache.localMetrics().getSwapMissPercentage()); - System.out.println("!!! Entries: cache = " + cache.localMetrics().getSize() + - ", offheap = " + cache.localMetrics().getOffHeapEntriesCount() + - ", swap = " + cache.localMetrics().getSwapEntriesCount()); - System.out.println("!!! Size: cache = none" + - ", offheap = " + cache.localMetrics().getOffHeapAllocatedSize() + - ", swap = " + cache.localMetrics().getSwapSize()); - System.out.println(); - } - -}