Return-Path: X-Original-To: apmail-ignite-commits-archive@minotaur.apache.org Delivered-To: apmail-ignite-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E353017641 for ; Tue, 12 May 2015 13:18:43 +0000 (UTC) Received: (qmail 72275 invoked by uid 500); 12 May 2015 13:18:43 -0000 Delivered-To: apmail-ignite-commits-archive@ignite.apache.org Received: (qmail 72242 invoked by uid 500); 12 May 2015 13:18:43 -0000 Mailing-List: contact commits-help@ignite.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.incubator.apache.org Delivered-To: mailing list commits@ignite.incubator.apache.org Received: (qmail 72233 invoked by uid 99); 12 May 2015 13:18:43 -0000 Received: from Unknown (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 12 May 2015 13:18:43 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 48F091A2A2D for ; Tue, 12 May 2015 13:18:43 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.79 X-Spam-Level: X-Spam-Status: No, score=0.79 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, T_RP_MATCHES_RCVD=-0.01] autolearn=disabled Received: from mx1-eu-west.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id HMcLWF3wsxZS for ; Tue, 12 May 2015 13:18:27 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-eu-west.apache.org (ASF Mail Server at mx1-eu-west.apache.org) with SMTP id C16022A9A2 for ; Tue, 12 May 2015 13:18:18 +0000 (UTC) Received: (qmail 71553 invoked by uid 99); 12 May 2015 13:18:17 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 12 May 2015 13:18:17 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id D4EDBE17E2; Tue, 12 May 2015 13:18:16 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.incubator.apache.org Date: Tue, 12 May 2015 13:18:22 -0000 Message-Id: <2cd2bbc4040243478388bcf94304f2e0@git.apache.org> In-Reply-To: <30e1aced52cf45bab5203b71a0514601@git.apache.org> References: <30e1aced52cf45bab5203b71a0514601@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [7/8] incubator-ignite git commit: ignite-37 Improve offheap metrics for cache http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java index a99c4c0..c044ffb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/offheap/GridOffHeapProcessor.java @@ -20,6 +20,7 @@ package org.apache.ignite.internal.processors.offheap; import org.apache.ignite.*; import org.apache.ignite.internal.*; import org.apache.ignite.internal.processors.*; +import org.apache.ignite.internal.processors.cache.*; import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.lang.*; import org.apache.ignite.internal.util.offheap.*; @@ -32,6 +33,8 @@ import org.jsr166.*; import java.util.*; +import static org.apache.ignite.events.EventType.*; + /** * Manages offheap memory caches. */ @@ -97,13 +100,15 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * Ensures that we have {@code keyBytes}. * * @param key Key. - * @param keyBytes Optional key bytes. - * @return Key bytes + * @param cctx Cache context. + * @return Key bytes. * @throws IgniteCheckedException If failed. */ - private byte[] keyBytes(Object key, @Nullable byte[] keyBytes) throws IgniteCheckedException { + private byte[] keyBytes(KeyCacheObject key, GridCacheContext cctx) throws IgniteCheckedException { assert key != null; + byte[] keyBytes = key.valueBytes(cctx.cacheObjectContext()); + return keyBytes != null ? keyBytes : marsh.marshal(key); } @@ -126,15 +131,20 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * @param spaceName Space name. * @param part Partition. * @param key Key. - * @param keyBytes Key bytes. - * @return {@code true} If offheap space contains value for the given key. + * @param cctx Cache context. + * @return {@code True} If offheap space contains value for the given key. * @throws IgniteCheckedException If failed. */ - public boolean contains(@Nullable String spaceName, int part, Object key, byte[] keyBytes) + public boolean contains(@Nullable String spaceName, int part, KeyCacheObject key, GridCacheContext cctx) throws IgniteCheckedException { GridOffHeapPartitionedMap m = offheap(spaceName); - return m != null && m.contains(part, U.hash(key), keyBytes(key, keyBytes)); + boolean hit = m != null && m.contains(part, U.hash(key), keyBytes(key, cctx)); + + if (cctx.config().isStatisticsEnabled()) + cctx.cache().metrics0().onOffHeapRead(hit); + + return hit; } /** @@ -143,15 +153,20 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * @param spaceName Space name. * @param part Partition. * @param key Key. - * @param keyBytes Key bytes. + * @param cctx Cache context. * @return Value bytes. * @throws IgniteCheckedException If failed. */ - @Nullable public byte[] get(@Nullable String spaceName, int part, Object key, byte[] keyBytes) + @Nullable public byte[] get(@Nullable String spaceName, int part, KeyCacheObject key, GridCacheContext cctx) throws IgniteCheckedException { GridOffHeapPartitionedMap m = offheap(spaceName); - return m == null ? null : m.get(part, U.hash(key), keyBytes(key, keyBytes)); + byte[] bytes = m == null ? null : m.get(part, U.hash(key), keyBytes(key, cctx)); + + if (cctx.config().isStatisticsEnabled()) + cctx.cache().metrics0().onOffHeapRead(bytes != null); + + return bytes; } /** @@ -162,15 +177,15 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * @param spaceName Space name. * @param part Partition. * @param key Key. - * @param keyBytes Key bytes. + * @param cctx Cache context. * @return Tuple where first value is pointer and second is value size. * @throws IgniteCheckedException If failed. */ - @Nullable public IgniteBiTuple valuePointer(@Nullable String spaceName, int part, Object key, - byte[] keyBytes) throws IgniteCheckedException { + @Nullable public IgniteBiTuple valuePointer(@Nullable String spaceName, int part, KeyCacheObject key, + GridCacheContext cctx) throws IgniteCheckedException { GridOffHeapPartitionedMap m = offheap(spaceName); - return m == null ? null : m.valuePointer(part, U.hash(key), keyBytes(key, keyBytes)); + return m == null ? null : m.valuePointer(part, U.hash(key), keyBytes(key, cctx)); } /** @@ -179,15 +194,15 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * @param spaceName Space name. * @param part Partition. * @param key Key. - * @param keyBytes Key bytes. + * @param cctx Cache context. * @throws IgniteCheckedException If failed. */ - public void enableEviction(@Nullable String spaceName, int part, Object key, byte[] keyBytes) + public void enableEviction(@Nullable String spaceName, int part, KeyCacheObject key, GridCacheContext cctx) throws IgniteCheckedException { GridOffHeapPartitionedMap m = offheap(spaceName); if (m != null) - m.enableEviction(part, U.hash(key), keyBytes(key, keyBytes)); + m.enableEviction(part, U.hash(key), keyBytes(key, cctx)); } /** @@ -196,14 +211,13 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * @param spaceName Space name. * @param part Partition. * @param key Key. - * @param keyBytes Key bytes. - * @param ldr Class loader. - * @return Value bytes. + * @param cctx Cache context. + * @param ldr Class loader. @return Value bytes. * @throws IgniteCheckedException If failed. */ - @Nullable public T getValue(@Nullable String spaceName, int part, Object key, byte[] keyBytes, - @Nullable ClassLoader ldr) throws IgniteCheckedException { - byte[] valBytes = get(spaceName, part, key, keyBytes); + @Nullable public T getValue(@Nullable String spaceName, int part, KeyCacheObject key, + GridCacheContext cctx, @Nullable ClassLoader ldr) throws IgniteCheckedException { + byte[] valBytes = get(spaceName, part, key, cctx); if (valBytes == null) return null; @@ -217,14 +231,23 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * @param spaceName Space name. * @param part Partition. * @param key Key. - * @param keyBytes Key bytes. + * @param cctx Cache context. * @return Value bytes. * @throws IgniteCheckedException If failed. */ - @Nullable public byte[] remove(@Nullable String spaceName, int part, Object key, byte[] keyBytes) throws IgniteCheckedException { + @Nullable public byte[] remove(@Nullable String spaceName, int part, KeyCacheObject key, GridCacheContext cctx) + throws IgniteCheckedException { GridOffHeapPartitionedMap m = offheap(spaceName); - return m == null ? null : m.remove(part, U.hash(key), keyBytes(key, keyBytes)); + if (m == null) + return null; + + byte[] bytes = m.remove(part, U.hash(key), keyBytes(key, cctx)); + + if(bytes != null && cctx.config().isStatisticsEnabled()) + cctx.cache().metrics0().onOffHeapRemove(); + + return bytes; } /** @@ -233,11 +256,11 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * @param spaceName Space name. * @param part Partition. * @param key Key. - * @param keyBytes Key bytes. * @param valBytes Value bytes. + * @param cctx Cache context. * @throws IgniteCheckedException If failed. */ - public void put(@Nullable String spaceName, int part, Object key, byte[] keyBytes, byte[] valBytes) + public void put(@Nullable String spaceName, int part, KeyCacheObject key, byte[] valBytes, GridCacheContext cctx) throws IgniteCheckedException { GridOffHeapPartitionedMap m = offheap(spaceName); @@ -245,7 +268,14 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { throw new IgniteCheckedException("Failed to write data to off-heap space, no space registered for name: " + spaceName); - m.put(part, U.hash(key), keyBytes(key, keyBytes), valBytes); + m.put(part, U.hash(key), keyBytes(key, cctx), valBytes); + + if (cctx.config().isStatisticsEnabled()) + cctx.cache().metrics0().onOffHeapWrite(); + + if (cctx.events().isRecordable(EVT_CACHE_OBJECT_TO_OFFHEAP)) + cctx.events().addEvent(part, key, cctx.nodeId(), (IgniteUuid)null, null, + EVT_CACHE_OBJECT_TO_OFFHEAP, null, false, null, true, null, null, null); } /** @@ -254,14 +284,23 @@ public class GridOffHeapProcessor extends GridProcessorAdapter { * @param spaceName Space name. * @param part Partition. * @param key Key. - * @param keyBytes Key bytes. - * @return {@code true} If succeeded. + * @param cctx Cache context. + * @return {@code True} If succeeded. * @throws IgniteCheckedException If failed. */ - public boolean removex(@Nullable String spaceName, int part, Object key, byte[] keyBytes) throws IgniteCheckedException { + public boolean removex(@Nullable String spaceName, int part, KeyCacheObject key, GridCacheContext cctx) + throws IgniteCheckedException { GridOffHeapPartitionedMap m = offheap(spaceName); - return m != null && m.removex(part, U.hash(key), keyBytes(key, keyBytes)); + if (m == null) + return false; + + boolean rmv = m.removex(part, U.hash(key), keyBytes(key, cctx)); + + if(rmv && cctx.config().isStatisticsEnabled()) + cctx.cache().metrics0().onOffHeapRemove(); + + return rmv; } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java index 2ad07b5..5cdc72f 100644 --- a/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java +++ b/modules/core/src/main/java/org/apache/ignite/mxbean/CacheMetricsMXBean.java @@ -100,14 +100,94 @@ public interface CacheMetricsMXBean extends CacheStatisticsMXBean, CacheMXBean, public long getOverflowSize(); /** {@inheritDoc} */ + @MXBeanDescription("Number of gets from off-heap memory.") + public long getOffHeapGets(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of puts to off-heap memory.") + public long getOffHeapPuts(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of removed entries from off-heap memory.") + public long getOffHeapRemovals(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of evictions from off-heap memory.") + public long getOffHeapEvictions(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of hits on off-heap memory.") + public long getOffHeapHits(); + + /** {@inheritDoc} */ + @MXBeanDescription("Percentage of hits on off-heap memory.") + public float getOffHeapHitPercentage(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of misses on off-heap memory.") + public long getOffHeapMisses(); + + /** {@inheritDoc} */ + @MXBeanDescription("Percentage of misses on off-heap memory.") + public float getOffHeapMissPercentage(); + + /** {@inheritDoc} */ @MXBeanDescription("Number of entries stored in off-heap memory.") public long getOffHeapEntriesCount(); /** {@inheritDoc} */ + @MXBeanDescription("Number of primary entries stored in off-heap memory.") + public long getOffHeapPrimaryEntriesCount(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of backup stored in off-heap memory.") + public long getOffHeapBackupEntriesCount(); + + /** {@inheritDoc} */ @MXBeanDescription("Memory size allocated in off-heap.") public long getOffHeapAllocatedSize(); /** {@inheritDoc} */ + @MXBeanDescription("Off-heap memory maximum size.") + public long getOffHeapMaxSize(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of gets from swap.") + public long getSwapGets(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of puts to swap.") + public long getSwapPuts(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of removed entries from swap.") + public long getSwapRemovals(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of hits on swap.") + public long getSwapHits(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of misses on swap.") + public long getSwapMisses(); + + /** {@inheritDoc} */ + @MXBeanDescription("Percentage of hits on swap.") + public float getSwapHitPercentage(); + + /** {@inheritDoc} */ + @MXBeanDescription("Percentage of misses on swap.") + public float getSwapMissPercentage(); + + /** {@inheritDoc} */ + @MXBeanDescription("Number of entries stored in swap.") + public long getSwapEntriesCount(); + + /** {@inheritDoc} */ + @MXBeanDescription("Size of swap.") + public long getSwapSize(); + + /** {@inheritDoc} */ @MXBeanDescription("Number of non-null values in the cache.") public int getSize(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java index 871512c..b13cc97 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiAdapter.java @@ -29,7 +29,7 @@ import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.plugin.extensions.communication.*; import org.apache.ignite.plugin.security.*; import org.apache.ignite.resources.*; -import org.apache.ignite.spi.swapspace.*; + import org.jetbrains.annotations.*; import javax.management.*; @@ -453,19 +453,20 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement boolean isSpiConsistent = false; - String tipStr = " (fix configuration or set " + "-D" + IGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK + "=true system property)"; + String tipStr = " (fix configuration or set " + + "-D" + IGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK + "=true system property)"; if (rmtCls == null) { if (!optional && starting) - throw new IgniteSpiException("Remote SPI with the same name is not configured" + tipStr + " [name=" + name + - ", loc=" + locCls + ']'); + throw new IgniteSpiException("Remote SPI with the same name is not configured" + tipStr + + " [name=" + name + ", loc=" + locCls + ']'); sb.a(format(">>> Remote SPI with the same name is not configured: " + name, locCls)); } else if (!locCls.equals(rmtCls)) { if (!optional && starting) - throw new IgniteSpiException("Remote SPI with the same name is of different type" + tipStr + " [name=" + name + - ", loc=" + locCls + ", rmt=" + rmtCls + ']'); + throw new IgniteSpiException("Remote SPI with the same name is of different type" + tipStr + + " [name=" + name + ", loc=" + locCls + ", rmt=" + rmtCls + ']'); sb.a(format(">>> Remote SPI with the same name is of different type: " + name, locCls, rmtCls)); } @@ -627,27 +628,11 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement } /** {@inheritDoc} */ - @Override public void writeToSwap(String spaceName, Object key, @Nullable Object val, - @Nullable ClassLoader ldr) { - /* No-op. */ - } - - /** {@inheritDoc} */ - @Override public T readFromSwap(String spaceName, SwapKey key, @Nullable ClassLoader ldr) { - return null; - } - - /** {@inheritDoc} */ @Override public int partition(String cacheName, Object key) { return -1; } /** {@inheritDoc} */ - @Override public void removeFromSwap(String spaceName, Object key, @Nullable ClassLoader ldr) { - // No-op. - } - - /** {@inheritDoc} */ @Override public Collection nodes() { return locNode == null ? Collections.emptyList() : Collections.singletonList(locNode); } @@ -713,12 +698,6 @@ public abstract class IgniteSpiAdapter implements IgniteSpi, IgniteSpiManagement } /** {@inheritDoc} */ - @Nullable @Override public T readValueFromOffheapAndSwap(@Nullable String spaceName, Object key, - @Nullable ClassLoader ldr) { - return null; - } - - /** {@inheritDoc} */ @Override public MessageFormatter messageFormatter() { return msgFormatter; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java index 6852b6d..55f46e5 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java @@ -24,7 +24,6 @@ import org.apache.ignite.internal.managers.communication.*; import org.apache.ignite.internal.managers.eventstorage.*; import org.apache.ignite.plugin.extensions.communication.*; import org.apache.ignite.plugin.security.*; -import org.apache.ignite.spi.swapspace.*; import org.jetbrains.annotations.*; import javax.cache.*; @@ -253,30 +252,6 @@ public interface IgniteSpiContext { public boolean containsKey(String cacheName, K key); /** - * Writes object to swap. - * - * @param spaceName Swap space name. - * @param key Key. - * @param val Value. - * @param ldr Class loader (optional). - * @throws IgniteException If any exception occurs. - */ - public void writeToSwap(String spaceName, Object key, @Nullable Object val, @Nullable ClassLoader ldr) - throws IgniteException; - - /** - * Reads object from swap. - * - * @param spaceName Swap space name. - * @param key Key. - * @param ldr Class loader (optional). - * @return Swapped value. - * @throws IgniteException If any exception occurs. - */ - @Nullable public T readFromSwap(String spaceName, SwapKey key, @Nullable ClassLoader ldr) - throws IgniteException; - - /** * Calculates partition number for given key. * * @param cacheName Cache name. @@ -286,16 +261,6 @@ public interface IgniteSpiContext { public int partition(String cacheName, Object key); /** - * Removes object from swap. - * - * @param spaceName Swap space name. - * @param key Key. - * @param ldr Class loader (optional). - * @throws IgniteException If any exception occurs. - */ - public void removeFromSwap(String spaceName, Object key, @Nullable ClassLoader ldr) throws IgniteException; - - /** * Validates that new node can join grid topology, this method is called on coordinator * node before new node joins topology. * @@ -322,18 +287,6 @@ public interface IgniteSpiContext { public SecuritySubject authenticatedSubject(UUID subjId) throws IgniteException; /** - * Reads swapped cache value from off-heap and swap. - * - * @param spaceName Off-heap space name. - * @param key Key. - * @param ldr Class loader for unmarshalling. - * @return Value. - * @throws IgniteException If any exception occurs. - */ - @Nullable public T readValueFromOffheapAndSwap(@Nullable String spaceName, Object key, - @Nullable ClassLoader ldr) throws IgniteException; - - /** * Gets message formatter. * * @return Message formatter. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java index e7db285..7a88426 100644 --- a/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java +++ b/modules/core/src/main/java/org/apache/ignite/spi/swapspace/file/FileSwapSpaceSpi.java @@ -387,15 +387,13 @@ public class FileSwapSpaceSpi extends IgniteSpiAdapter implements SwapSpaceSpi, Space space = space(spaceName, false); - if (space == null) - return; - - byte[] val = space.remove(key, c != null); + byte[] val = space == null ? null : space.remove(key, c != null); if (c != null) c.apply(val); - notifyListener(EVT_SWAP_SPACE_DATA_REMOVED, spaceName); + if (space != null) + notifyListener(EVT_SWAP_SPACE_DATA_REMOVED, spaceName); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/test/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManagerSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManagerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManagerSelfTest.java index 043311e..27e0fea 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManagerSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/managers/swapspace/GridSwapSpaceManagerSelfTest.java @@ -21,10 +21,11 @@ import org.apache.ignite.*; import org.apache.ignite.configuration.*; import org.apache.ignite.events.*; import org.apache.ignite.internal.*; +import org.apache.ignite.internal.processors.cache.*; import org.apache.ignite.internal.util.lang.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.lang.*; -import org.apache.ignite.spi.swapspace.*; +import org.apache.ignite.marshaller.*; import org.apache.ignite.spi.swapspace.file.*; import org.apache.ignite.testframework.junits.common.*; @@ -40,7 +41,10 @@ import static org.apache.ignite.events.EventType.*; @GridCommonTest(group = "Kernal Self") public class GridSwapSpaceManagerSelfTest extends GridCommonAbstractTest { /** */ - private static final String spaceName = "swapspace_mgr"; + private static final String SPACE_NAME = "swapspace_mgr"; + + /** Partition. */ + private static final int PART = Integer.MAX_VALUE; /** * @@ -64,7 +68,7 @@ public class GridSwapSpaceManagerSelfTest extends GridCommonAbstractTest { * @param ignite Grid instance. * @return Swap space manager. */ - private GridSwapSpaceManager getSwapSpaceManager(Ignite ignite) { + private static GridSwapSpaceManager getSwapSpaceManager(Ignite ignite) { assert ignite != null; return ((IgniteKernal) ignite).context().swap(); @@ -89,7 +93,7 @@ public class GridSwapSpaceManagerSelfTest extends GridCommonAbstractTest { SwapSpaceEvent e = (SwapSpaceEvent) evt; - assert spaceName.equals(e.space()); + assert SPACE_NAME.equals(e.space()); assert ignite.cluster().localNode().id().equals(e.node().id()); switch (evt.type()) { @@ -123,41 +127,55 @@ public class GridSwapSpaceManagerSelfTest extends GridCommonAbstractTest { GridSwapSpaceManager mgr = getSwapSpaceManager(ignite); + ignite.getOrCreateCache((String)null); + + GridKernalContext ctx = ((IgniteKernal)ignite).context(); + + GridCacheContext cctx = ((IgniteCacheProxy)ignite.cache(null)).context(); + + Marshaller marsh = ctx.config().getMarshaller(); + assert mgr != null; // Empty data space. - assertEquals(0, mgr.swapSize(spaceName)); + assertEquals(0, mgr.swapSize(SPACE_NAME)); + + String key1 = "key1"; + + String key2 = "key2"; + + KeyCacheObject ckey1 = new KeyCacheObjectImpl(key1, marsh.marshal(key1)); - SwapKey key = new SwapKey("key1"); + KeyCacheObject ckey2 = new KeyCacheObjectImpl(key2, marsh.marshal(key2)); String val = "value"; - mgr.write(spaceName, key, val.getBytes(), null); + mgr.write(SPACE_NAME, PART, ckey1, marsh.marshal(val), cctx); - mgr.write(spaceName, new SwapKey("key2"), val.getBytes(), null); + mgr.write(SPACE_NAME, PART, ckey2, marsh.marshal(val), cctx); assert storeCnt.await(10, SECONDS); - byte[] arr = mgr.read(spaceName, key, null); + byte[] arr = mgr.read(SPACE_NAME, PART, ckey1, cctx); assert arr != null; - assert val.equals(new String(arr)); + assert val.equals(marsh.unmarshal(arr, cctx.deploy().globalLoader())); final GridTuple b = F.t(false); - mgr.remove(spaceName, key, new CI1() { + mgr.remove(SPACE_NAME, PART, ckey1, cctx, new CI1() { @Override public void apply(byte[] rmv) { b.set(rmv != null); } - }, null); + }); assert b.get(); assert rmvCnt.await(10, SECONDS); assert readCnt.await(10, SECONDS); - mgr.clear(spaceName); + mgr.clear(SPACE_NAME); assert clearCnt.await(10, SECONDS) : "Count: " + clearCnt.getCount(); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheLocalOffHeapAndSwapMetricsSelfTest.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 new file mode 100644 index 0000000..3d44600 --- /dev/null +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/CacheLocalOffHeapAndSwapMetricsSelfTest.java @@ -0,0 +1,412 @@ +/* + * 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.*; +import org.apache.ignite.cache.*; +import org.apache.ignite.cache.eviction.fifo.*; +import org.apache.ignite.configuration.*; +import org.apache.ignite.spi.swapspace.file.*; +import org.apache.ignite.testframework.junits.common.*; + +/** + * + */ +public class CacheLocalOffHeapAndSwapMetricsSelfTest extends GridCommonAbstractTest { + /** Grid count. */ + private static final int GRID_CNT = 1; + + /** Keys count. */ + private static final int KEYS_CNT = 1000; + + /** Max size. */ + private static final int MAX_SIZE = 100; + + /** 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.ONHEAP_TIERED); + + ccfg.setOffHeapMaxMemory(offHeapSize); + ccfg.setSwapEnabled(swapEnabled); + + ccfg.setEvictionPolicy(new FifoEvictionPolicy(MAX_SIZE)); + + 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.close(); + } + + /** + * @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.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts()); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapGets()); + assertEquals(0, cache.metrics().getOffHeapHits()); + assertEquals(0f, cache.metrics().getOffHeapHitPercentage()); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapMisses()); + assertEquals(100f, cache.metrics().getOffHeapMissPercentage()); + assertEquals(0, cache.metrics().getOffHeapRemovals()); + + assertEquals(0, cache.metrics().getOffHeapEvictions()); + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapEntriesCount()); + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts()); + assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapGets()); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapHits()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapMisses()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getOffHeapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapRemovals()); + + assertEquals(0, cache.metrics().getOffHeapEvictions()); + assertEquals(KEYS_CNT - MAX_SIZE, cache.metrics().getOffHeapEntriesCount()); + assertEquals(KEYS_CNT - MAX_SIZE, cache.metrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); + + for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts()); + assertEquals(KEYS_CNT * 3, cache.metrics().getOffHeapGets()); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapHits()); + assertEquals(100 / 3.0, cache.metrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapMisses()); + assertEquals(100 - (100 / 3.0), cache.metrics().getOffHeapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapRemovals()); + + assertEquals(0, cache.metrics().getOffHeapEvictions()); + assertEquals(KEYS_CNT - MAX_SIZE, cache.metrics().getOffHeapEntriesCount()); + assertEquals(KEYS_CNT - MAX_SIZE, cache.metrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.remove(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts()); + assertEquals(KEYS_CNT * 4 - MAX_SIZE, cache.metrics().getOffHeapGets()); + assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.metrics().getOffHeapHits()); + assertEquals(100 * (KEYS_CNT * 2.0 - MAX_SIZE) / (KEYS_CNT * 4.0 - MAX_SIZE), + cache.metrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapMisses()); + assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - MAX_SIZE), + cache.metrics().getOffHeapMissPercentage(), 0.1); + assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.metrics().getOffHeapRemovals()); + + assertEquals(0, cache.metrics().getOffHeapEvictions()); + assertEquals(0, cache.metrics().getOffHeapEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); + } + + /** + * @throws Exception if failed. + */ + public void testSwapMetrics() throws Exception { + createCache(-1, true); + + for (int i = 0; i < KEYS_CNT; i++) + cache.put(i, i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getSwapPuts()); + assertEquals(KEYS_CNT, cache.metrics().getSwapGets()); + assertEquals(0, cache.metrics().getSwapHits()); + assertEquals(0f, cache.metrics().getSwapHitPercentage()); + assertEquals(KEYS_CNT, cache.metrics().getSwapMisses()); + assertEquals(100f, cache.metrics().getSwapMissPercentage()); + assertEquals(0, cache.metrics().getSwapRemovals()); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getSwapEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getSwapPuts()); + assertEquals(KEYS_CNT * 2, cache.metrics().getSwapGets()); + assertEquals(KEYS_CNT, cache.metrics().getSwapHits()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getSwapMisses()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getSwapRemovals()); + + assertEquals(KEYS_CNT - MAX_SIZE, cache.metrics().getSwapEntriesCount()); + + for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getSwapPuts()); + assertEquals(KEYS_CNT * 3, cache.metrics().getSwapGets()); + assertEquals(KEYS_CNT, cache.metrics().getSwapHits()); + assertEquals(100 / 3.0, cache.metrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.metrics().getSwapMisses()); + assertEquals(100 - (100 / 3.0), cache.metrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getSwapRemovals()); + + assertEquals(KEYS_CNT - MAX_SIZE, cache.metrics().getSwapEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.remove(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getSwapPuts()); + assertEquals(KEYS_CNT * 4 - MAX_SIZE, cache.metrics().getSwapGets()); + assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.metrics().getSwapHits()); + assertEquals(100 * (KEYS_CNT * 2.0 - MAX_SIZE) / (KEYS_CNT * 4.0 - MAX_SIZE), + cache.metrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.metrics().getSwapMisses()); + assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - MAX_SIZE), + cache.metrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT * 2 - MAX_SIZE, cache.metrics().getSwapRemovals()); + + assertEquals(0, cache.metrics().getSwapEntriesCount()); + } + + /** + * @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.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts()); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapGets()); + assertEquals(0, cache.metrics().getOffHeapHits()); + assertEquals(0f, cache.metrics().getOffHeapHitPercentage()); + assertEquals(KEYS_CNT, cache.metrics().getOffHeapMisses()); + assertEquals(100f, cache.metrics().getOffHeapMissPercentage()); + assertEquals(0, cache.metrics().getOffHeapRemovals()); + + assertEquals(KEYS_CNT - MAX_SIZE - OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts()); + assertEquals(KEYS_CNT, cache.metrics().getSwapGets()); + assertEquals(0, cache.metrics().getSwapHits()); + assertEquals(0f, cache.metrics().getSwapHitPercentage()); + assertEquals(KEYS_CNT, cache.metrics().getSwapMisses()); + assertEquals(100f, cache.metrics().getSwapMissPercentage()); + assertEquals(0, cache.metrics().getSwapRemovals()); + + assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts()); + assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapGets()); + assertEquals(0, cache.metrics().getOffHeapHits()); + assertEquals(0.0, cache.metrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.metrics().getOffHeapMisses()); + assertEquals(100.0, cache.metrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.metrics().getOffHeapRemovals()); + + assertEquals(cache.metrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts()); + assertEquals(KEYS_CNT * 2, cache.metrics().getSwapGets()); + assertEquals(KEYS_CNT, cache.metrics().getSwapHits()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getSwapMisses()); + assertEquals(100 * KEYS_CNT / (KEYS_CNT * 2.0), cache.metrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getSwapRemovals()); + + assertEquals(KEYS_CNT - MAX_SIZE - OFFHEAP_MAX_CNT, cache.metrics().getSwapEntriesCount()); + + for (int i = KEYS_CNT; i < KEYS_CNT * 2; i++) + cache.get(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts()); + assertEquals(KEYS_CNT * 3, cache.metrics().getOffHeapGets()); + assertEquals(0, cache.metrics().getOffHeapHits()); + assertEquals(0.0, cache.metrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 3, cache.metrics().getOffHeapMisses()); + assertEquals(100.0, cache.metrics().getOffHeapMissPercentage(), 0.1); + assertEquals(0, cache.metrics().getOffHeapRemovals()); + + assertEquals(cache.metrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEvictions()); + assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEntriesCount()); + assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts()); + assertEquals(KEYS_CNT * 3, cache.metrics().getSwapGets()); + assertEquals(KEYS_CNT, cache.metrics().getSwapHits()); + assertEquals(100 / 3.0, cache.metrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.metrics().getSwapMisses()); + assertEquals(100 - (100 / 3.0), cache.metrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT, cache.metrics().getSwapRemovals()); + + assertEquals(KEYS_CNT - MAX_SIZE - OFFHEAP_MAX_CNT, cache.metrics().getSwapEntriesCount()); + + for (int i = 0; i < KEYS_CNT; i++) + cache.remove(i); + + printStat(); + + assertEquals(cache.metrics().getCacheEvictions(), cache.metrics().getOffHeapPuts()); + assertEquals(KEYS_CNT * 4 - MAX_SIZE, cache.metrics().getOffHeapGets()); + assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapHits()); + assertEquals(100 * OFFHEAP_MAX_CNT / (KEYS_CNT * 4.0 - MAX_SIZE), + cache.metrics().getOffHeapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 4 - OFFHEAP_MAX_CNT - MAX_SIZE, cache.metrics().getOffHeapMisses()); + assertEquals(100 * (KEYS_CNT * 4 - OFFHEAP_MAX_CNT - MAX_SIZE) / (KEYS_CNT * 4.0 - MAX_SIZE), + cache.metrics().getOffHeapMissPercentage(), 0.1); + assertEquals(OFFHEAP_MAX_CNT, cache.metrics().getOffHeapRemovals()); + + assertEquals(cache.metrics().getCacheEvictions() - OFFHEAP_MAX_CNT, cache.metrics().getOffHeapEvictions()); + assertEquals(0, cache.metrics().getOffHeapEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapPrimaryEntriesCount()); + assertEquals(0, cache.metrics().getOffHeapBackupEntriesCount()); + + assertEquals(cache.metrics().getOffHeapEvictions(), cache.metrics().getSwapPuts()); + assertEquals(KEYS_CNT * 4 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.metrics().getSwapGets()); + assertEquals(KEYS_CNT * 2 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.metrics().getSwapHits()); + assertEquals(100 * (KEYS_CNT * 2.0 - MAX_SIZE - OFFHEAP_MAX_CNT) / (KEYS_CNT * 4.0 - MAX_SIZE - OFFHEAP_MAX_CNT), + cache.metrics().getSwapHitPercentage(), 0.1); + assertEquals(KEYS_CNT * 2, cache.metrics().getSwapMisses()); + assertEquals(100 * KEYS_CNT * 2.0 / (KEYS_CNT * 4.0 - MAX_SIZE - OFFHEAP_MAX_CNT), + cache.metrics().getSwapMissPercentage(), 0.1); + assertEquals(KEYS_CNT * 2 - MAX_SIZE - OFFHEAP_MAX_CNT, cache.metrics().getSwapRemovals()); + + assertEquals(0, cache.metrics().getSwapEntriesCount()); + } + + /** + * Prints stats. + */ + protected void printStat() { + System.out.println("!!! -------------------------------------------------------"); + System.out.println("!!! Puts: cache = " + cache.metrics().getCachePuts() + + ", offheap = " + cache.metrics().getOffHeapPuts() + + ", swap = " + cache.metrics().getSwapPuts()); + System.out.println("!!! Gets: cache = " + cache.metrics().getCacheGets() + + ", offheap = " + cache.metrics().getOffHeapGets() + + ", swap = " + cache.metrics().getSwapGets()); + System.out.println("!!! Removes: cache = " + cache.metrics().getCacheRemovals() + + ", offheap = " + cache.metrics().getOffHeapRemovals() + + ", swap = " + cache.metrics().getSwapRemovals()); + System.out.println("!!! Evictions: cache = " + cache.metrics().getCacheEvictions() + + ", offheap = " + cache.metrics().getOffHeapEvictions() + + ", swap = none" ); + System.out.println("!!! Hits: cache = " + cache.metrics().getCacheHits() + + ", offheap = " + cache.metrics().getOffHeapHits() + + ", swap = " + cache.metrics().getSwapHits()); + System.out.println("!!! Hit(%): cache = " + cache.metrics().getCacheHitPercentage() + + ", offheap = " + cache.metrics().getOffHeapHitPercentage() + + ", swap = " + cache.metrics().getSwapHitPercentage()); + System.out.println("!!! Misses: cache = " + cache.metrics().getCacheMisses() + + ", offheap = " + cache.metrics().getOffHeapMisses() + + ", swap = " + cache.metrics().getSwapMisses()); + System.out.println("!!! Miss(%): cache = " + cache.metrics().getCacheMissPercentage() + + ", offheap = " + cache.metrics().getOffHeapMissPercentage() + + ", swap = " + cache.metrics().getSwapMissPercentage()); + System.out.println("!!! Entries: cache = " + cache.metrics().getSize() + + ", offheap = " + cache.metrics().getOffHeapEntriesCount() + + ", swap = " + cache.metrics().getSwapEntriesCount()); + System.out.println("!!! Size: cache = none" + + ", offheap = " + cache.metrics().getOffHeapAllocatedSize() + + ", swap = " + cache.metrics().getSwapSize()); + System.out.println(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java index bc04f90..5867fb8 100644 --- a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java @@ -29,7 +29,7 @@ import org.apache.ignite.lang.*; import org.apache.ignite.plugin.extensions.communication.*; import org.apache.ignite.plugin.security.*; import org.apache.ignite.spi.*; -import org.apache.ignite.spi.swapspace.*; + import org.jetbrains.annotations.*; import java.io.*; @@ -447,28 +447,11 @@ public class GridSpiTestContext implements IgniteSpiContext { } /** {@inheritDoc} */ - @Override public void writeToSwap(String spaceName, Object key, @Nullable Object val, - @Nullable ClassLoader ldr) { - /* No-op. */ - } - - /** {@inheritDoc} */ - @Override public T readFromSwap(String spaceName, SwapKey key, @Nullable ClassLoader ldr) { - return null; - } - - /** {@inheritDoc} */ @Override public int partition(String cacheName, Object key) { return -1; } /** {@inheritDoc} */ - @Override public void removeFromSwap(String spaceName, Object key, - @Nullable ClassLoader ldr) { - // No-op. - } - - /** {@inheritDoc} */ @Nullable @Override public IgniteNodeValidationResult validateNode(ClusterNode node) { return null; } @@ -484,12 +467,6 @@ public class GridSpiTestContext implements IgniteSpiContext { } /** {@inheritDoc} */ - @Nullable @Override public T readValueFromOffheapAndSwap(@Nullable String spaceName, Object key, - @Nullable ClassLoader ldr) { - return null; - } - - /** {@inheritDoc} */ @Override public MessageFormatter messageFormatter() { if (formatter == null) { formatter = new MessageFormatter() { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c14eb563/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java ---------------------------------------------------------------------- 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 1adf55f..9a0e5fc 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 @@ -39,6 +39,7 @@ public class IgniteCacheMetricsSelfTestSuite extends TestSuite { suite.addTestSuite(GridCacheReplicatedMetricsSelfTest.class); suite.addTestSuite(GridCachePartitionedMetricsSelfTest.class); suite.addTestSuite(GridCachePartitionedHitsAndMissesSelfTest.class); + suite.addTestSuite(CacheLocalOffHeapAndSwapMetricsSelfTest.class); // Atomic cache. suite.addTestSuite(GridCacheAtomicLocalMetricsSelfTest.class);