You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/01/16 12:29:20 UTC

[5/7] incubator-ignite git commit: IGNITE-49 Implemented disabled/enabled statistics.

IGNITE-49 Implemented disabled/enabled statistics.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/34593673
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/34593673
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/34593673

Branch: refs/heads/ignite-49
Commit: 345936732622ed445082a535be352f000e0e745b
Parents: 3173353
Author: nikolay_tikhonov <nt...@gridgain.com>
Authored: Mon Jan 12 17:26:19 2015 +0300
Committer: nikolay_tikhonov <nt...@gridgain.com>
Committed: Fri Jan 16 14:13:35 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/IgniteCacheManager.java   | 107 ++++++-------------
 .../processors/cache/IgniteCacheProxy.java      |  42 ++++++--
 .../cache/GridCacheEvictionManager.java         |   3 +-
 .../processors/cache/GridCacheMapEntry.java     |  14 +--
 .../cache/GridCacheMetricsAdapter.java          |  12 +--
 .../processors/cache/GridCacheTtlManager.java   |   3 +-
 .../distributed/near/GridNearCacheEntry.java    |   3 +-
 .../distributed/near/GridNearGetFuture.java     |   8 +-
 .../distributed/near/GridNearLockFuture.java    |   6 +-
 .../local/atomic/GridLocalAtomicCache.java      |   2 +-
 .../cache/transactions/IgniteTxManager.java     |   6 +-
 .../cache/GridCacheAbstractMetricsSelfTest.java |  65 ++++++++---
 .../near/GridCacheNearMetricsSelfTest.java      |  11 ++
 13 files changed, 165 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java b/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
index dbe6838..c255517 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite;
 
+import org.apache.ignite.cache.CacheMetricsMXBean;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.lang.*;
 import org.gridgain.grid.cache.*;
@@ -147,6 +148,9 @@ public class IgniteCacheManager implements CacheManager {
         if (((CompleteConfiguration)cacheCfg).isManagementEnabled())
             enableManagement(cacheName, true);
 
+        if (((CompleteConfiguration)cacheCfg).isStatisticsEnabled())
+            enableStatistics(cacheName, true);
+
         return res;
     }
 
@@ -250,26 +254,21 @@ public class IgniteCacheManager implements CacheManager {
 
             }
 
-            ObjectName objName = getObjectName(cacheName);
-
             MBeanServer mBeanSrv = tuple.get1().configuration().getMBeanServer();
 
-            for (ObjectName n : mBeanSrv.queryNames(objName, null)) {
-                try {
-                    mBeanSrv.unregisterMBean(n);
-                }
-                catch (Exception ignored) {
+            unregisterCacheObject(mBeanSrv, cacheName, true);
 
-                }
-            }
+            unregisterCacheObject(mBeanSrv, cacheName, false);
         }
     }
 
     /**
      * @param cacheName Cache name.
      */
-    private ObjectName getObjectName(String cacheName) {
-        String mBeanName = "javax.cache:type=CacheConfiguration,CacheManager="
+    private ObjectName getObjectName(String cacheName, boolean isStatistic) {
+        String mbType = isStatistic ? "CacheStatistics" : "CacheConfiguration";
+
+        String mBeanName = "javax.cache:type=" + mbType + ",CacheManager="
             + uri.toString().replaceAll(",|:|=|\n", ".")
             + ",Cache=" + cacheName.replaceAll(",|:|=|\n", ".");
 
@@ -294,7 +293,7 @@ public class IgniteCacheManager implements CacheManager {
             tuple = igniteMap.get(cacheName);
         }
 
-        ObjectName objName = getObjectName(cacheName);
+        ObjectName objName = getObjectName(cacheName, false);
         MBeanServer mBeanSrv = tuple.get1().configuration().getMBeanServer();
 
         try {
@@ -319,7 +318,18 @@ public class IgniteCacheManager implements CacheManager {
 
     /** {@inheritDoc} */
     @Override public void enableStatistics(String cacheName, boolean enabled) {
-        Ignite ignite = findIgnite(cacheName);
+        ensureNotClosed();
+
+        if (cacheName == null)
+            throw new NullPointerException();
+
+        IgniteBiTuple<Ignite, IgniteCacheMXBean> tuple;
+
+        synchronized (igniteMap) {
+            tuple = igniteMap.get(cacheName);
+        }
+
+        Ignite ignite = tuple.get1();
 
         GridCache cache = ignite.cache(cacheName);
 
@@ -327,63 +337,34 @@ public class IgniteCacheManager implements CacheManager {
 
         MBeanServer mBeanSrv = ignite.configuration().getMBeanServer();
 
-        if (cacheName == null)
-            cacheName = "null";
-
         if (enabled) {
             CacheMetricsMXBean mxBean = new CacheMetricsMXBean(cache);
 
-            registerCacheObject(mBeanSrv, mxBean, uri.toString(), cacheName, true);
+            registerCacheObject(mBeanSrv, mxBean, cacheName, true);
 
             configuration.setStatisticsEnabled(true);
         }
         else {
-            unregisterCacheObject(mBeanSrv, uri.toString(), cacheName, true);
+            unregisterCacheObject(mBeanSrv, cacheName, true);
 
             configuration.setStatisticsEnabled(false);
         }
     }
 
     /**
-     *
-     */
-    private static String mbeanSafe(String string) {
-        return string == null ? "" : string.replaceAll(",|:|=|\n", ".");
-    }
-
-    /**
-     * Finds node which has the cache.
-     *
-     * @param cacheName Cache name.
-     * @return Ignite node.
-     */
-    private Ignite findIgnite(String cacheName) {
-        for (Ignite ignite : Ignition.allGrids())
-            if (ignite.jcache(cacheName) != null)
-                return ignite;
-
-        return null;
-    }
-
-    /**
      * @param mxbean MXBean.
-     * @param cacheManagerName name generated by URI and classloader.
      * @param name cache name.
      */
-    public static void registerCacheObject(MBeanServer mBeanServer, Object mxbean, String cacheManagerName, String name,
-                                           boolean stats) {
-        ObjectName registeredObjectName = calculateObjectName(cacheManagerName, name, stats);
+    public void registerCacheObject(MBeanServer mBeanServer, Object mxbean, String name, boolean isStatistic) {
+        ObjectName registeredObjectName = getObjectName(name, isStatistic);
 
         try {
-            if (!isRegistered(mBeanServer, registeredObjectName)) {
+            if (!isRegistered(mBeanServer, registeredObjectName))
                 mBeanServer.registerMBean(mxbean, registeredObjectName);
-
-                System.out.println("Registered mbean with name " + registeredObjectName.toString());
-            }
         }
         catch (Exception e) {
-            throw new CacheException("Error registering cache MXBeans for CacheManager " + registeredObjectName
-                    + " . Error was " + e.getMessage(), e);
+            throw new CacheException("Error registering cache MXBeans for CacheManager "
+                + registeredObjectName.toString() + " . Error was " + e.getMessage(), e);
         }
     }
 
@@ -398,17 +379,15 @@ public class IgniteCacheManager implements CacheManager {
      * UnRegisters the mxbean if registered already.
      *
      * @param mBeanSrv MBean server
-     * @param cacheManagerName name generated by URI and classloader.
      * @param name cache name.
      * @param stats is mxbean, a statistics mxbean.
      */
-    public static void unregisterCacheObject(MBeanServer mBeanSrv, String cacheManagerName, String name, boolean stats) {
-        Set<ObjectName> registeredObjectNames = null;
+    public void unregisterCacheObject(MBeanServer mBeanSrv, String name, boolean stats) {
+        Set<ObjectName> registeredObjectNames;
 
-        ObjectName objectName = calculateObjectName(cacheManagerName, name, stats);
-        registeredObjectNames = mBeanSrv.queryNames(objectName, null);
+        ObjectName objectName = getObjectName(name, stats);
 
-        System.out.println("Try UnRegistered mbean with name " + objectName.toString());
+        registeredObjectNames = mBeanSrv.queryNames(objectName, null);
 
         //should just be one
         for (ObjectName registeredObjectName : registeredObjectNames) {
@@ -422,24 +401,6 @@ public class IgniteCacheManager implements CacheManager {
     }
 
     /**
-     * Creates an object name.
-     */
-    private static ObjectName calculateObjectName(String cacheManagerName, String name, boolean stats) {
-        String cacheManagerNameSafe = mbeanSafe(cacheManagerName);
-        String cacheName = mbeanSafe(name);
-
-        try {
-            String objectNameType = stats ? "Statistics" : "Configuration";
-            return new ObjectName(
-                    "javax.cache:type=Cache" + objectNameType + ",CacheManager=" + cacheManagerNameSafe + ",Cache=" + cacheName);
-        } catch (MalformedObjectNameException e) {
-            throw new CacheException(
-                    "Illegal ObjectName for Management Bean. " + "CacheManager=[" + cacheManagerNameSafe + "], Cache=["
-                            + cacheName + "]", e);
-        }
-    }
-
-    /**
      *
      */
     private void ensureNotClosed() throws IllegalStateException {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
index 10ff00b..198a715 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
@@ -415,6 +415,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
     @Override public Map<K, V> getAll(Set<? extends K> keys) {
         try {
             boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
             long start = statisticsEnabled ? System.nanoTime() : 0L;
 
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
@@ -444,17 +445,25 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
      */
     public Map<K, V> getAll(Collection<? extends K> keys) {
         try {
+            boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
+            long start = statisticsEnabled ? System.nanoTime() : 0L;
+
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
 
+            Map<K, V> res;
+
             try {
-                return delegate.getAll(keys);
+                res = delegate.getAll(keys);
             }
             finally {
                 gate.leave(prev);
             }
 
             if (statisticsEnabled)
-                ctx.cache().metrics0().addPutTimeNanos(System.nanoTime() - start);
+                ctx.cache().metrics0().addGetTimeNanos(System.nanoTime() - start);
+
+            return res;
         }
         catch (IgniteCheckedException e) {
             throw cacheException(e);
@@ -519,6 +528,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
     @Override public void put(K key, V val) {
         try {
             boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
             long start = statisticsEnabled ? System.nanoTime() : 0L;
 
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
@@ -571,6 +581,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
     @Override public void putAll(Map<? extends K, ? extends V> map) {
         try {
             boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
             long start = statisticsEnabled ? System.nanoTime() : 0L;
 
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
@@ -581,6 +592,9 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
             finally {
                 gate.leave(prev);
             }
+
+            if (statisticsEnabled)
+                ctx.cache().metrics0().addPutTimeNanos(System.nanoTime() - start);
         }
         catch (IgniteCheckedException e) {
             throw cacheException(e);
@@ -591,6 +605,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
     @Override public boolean putIfAbsent(K key, V val) {
         try {
             boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
             long start = statisticsEnabled ? System.nanoTime() : 0L;
 
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
@@ -618,6 +633,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
     @Override public boolean remove(K key) {
         try {
             boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
             long start = statisticsEnabled ? System.nanoTime() : 0L;
 
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
@@ -631,7 +647,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
                 gate.leave(prev);
             }
 
-            if (statisticsEnabled)
+            if (statisticsEnabled && removed)
                 ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start);
 
             return removed;
@@ -645,6 +661,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
     @Override public boolean remove(K key, V oldVal) {
         try {
             boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
             long start = statisticsEnabled ? System.nanoTime() : 0L;
 
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
@@ -672,6 +689,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
     @Override public V getAndRemove(K key) {
         try {
             boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
             long start = statisticsEnabled ? System.nanoTime() : 0L;
 
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
@@ -685,8 +703,10 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
                 gate.leave(prev);
             }
 
-            if (statisticsEnabled)
+            if (statisticsEnabled) {
                 ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start);
+                ctx.cache().metrics0().addGetTimeNanos(System.nanoTime() - start);
+            }
 
             return removed;
         }
@@ -706,9 +726,6 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
             finally {
                 gate.leave(prev);
             }
-
-            if (statisticsEnabled)
-                ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start);
         }
         catch (IgniteCheckedException e) {
             throw cacheException(e);
@@ -753,6 +770,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
     @Override public void removeAll(Set<? extends K> keys) {
         try {
             boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
             long start = statisticsEnabled ? System.nanoTime() : 0L;
 
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
@@ -763,6 +781,9 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
             finally {
                 gate.leave(prev);
             }
+
+            if (statisticsEnabled)
+                ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start);
         }
         catch (IgniteCheckedException e) {
             throw cacheException(e);
@@ -774,6 +795,10 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
      */
     public void removeAll(Collection<? extends K> keys) {
         try {
+            boolean statisticsEnabled = ctx.config().isStatisticsEnabled();
+
+            long start = statisticsEnabled ? System.nanoTime() : 0L;
+
             GridCacheProjectionImpl<K, V> prev = gate.enter(prj);
 
             try {
@@ -782,6 +807,9 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
             finally {
                 gate.leave(prev);
             }
+
+            if (statisticsEnabled)
+                ctx.cache().metrics0().addRemoveTimeNanos(System.nanoTime() - start);
         }
         catch (IgniteCheckedException e) {
             throw cacheException(e);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEvictionManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEvictionManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEvictionManager.java
index 6894ed0..e585499 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEvictionManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheEvictionManager.java
@@ -668,7 +668,8 @@ public class GridCacheEvictionManager<K, V> extends GridCacheManagerAdapter<K, V
 
             cache.removeEntry(entry);
 
-            cache.metrics0().onEvict();
+            if (cache.configuration().isStatisticsEnabled())
+                cache.metrics0().onEvict();
 
             if (recordable)
                 cctx.events().addEvent(entry.partition(), entry.key(), cctx.nodeId(), (IgniteUuid)null, null,

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
index 46dc22d..2f58ec9 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMapEntry.java
@@ -772,11 +772,11 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
             }
 
             if (old == null && !hasOldBytes) {
-                if (updateMetrics)
+                if (updateMetrics && cctx.cache().configuration().isStatisticsEnabled())
                     cctx.cache().metrics0().onRead(false);
             }
             else {
-                if (updateMetrics)
+                if (updateMetrics && cctx.cache().configuration().isStatisticsEnabled())
                     cctx.cache().metrics0().onRead(true);
 
                 // Set retVal here for event notification.
@@ -1140,7 +1140,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
 
             recordNodeId(affNodeId);
 
-            if (metrics)
+            if (metrics && cctx.cache().configuration().isStatisticsEnabled())
                 cctx.cache().metrics0().onWrite();
 
             if (evt && newVer != null && cctx.events().isRecordable(EVT_CACHE_OBJECT_PUT)) {
@@ -1292,7 +1292,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
 
                 drReplicate(drType, null, null, newVer);
 
-                if (metrics)
+                if (metrics && cctx.cache().configuration().isStatisticsEnabled())
                     cctx.cache().metrics0().onRemove();
 
                 if (tx == null)
@@ -1444,7 +1444,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
             }
 
             // Apply metrics.
-            if (metrics && needVal)
+            if (metrics && cctx.cache().configuration().isStatisticsEnabled() && needVal)
                 cctx.cache().metrics0().onRead(old != null);
 
             String transformCloClsName = null;
@@ -1800,7 +1800,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
             }
 
             // Apply metrics.
-            if (metrics && needVal)
+            if (metrics && cctx.cache().configuration().isStatisticsEnabled() && needVal)
                 cctx.cache().metrics0().onRead(old != null);
 
             // Calculate new value.
@@ -4134,7 +4134,7 @@ public abstract class GridCacheMapEntry<K, V> implements GridCacheEntryEx<K, V>
      * @param metrics Update merics flag.
      */
     private void updateMetrics(GridCacheOperation op, boolean metrics) {
-        if (metrics) {
+        if (metrics && cctx.cache().configuration().isStatisticsEnabled()) {
             if (op == DELETE)
                 cctx.cache().metrics0().onRemove();
             else

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
index ae539d5..dc1faf2 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheMetricsAdapter.java
@@ -269,8 +269,8 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable
         removeTimeNanos += duration;
     }
 
-    @Override
-    public float getAverageGetTime() {
+    /** {@inheritDoc} */
+    @Override public float getAverageGetTime() {
         long timeNanos = getTimeNanos;
         long readsCnt = reads;
 
@@ -280,8 +280,8 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable
         return ((1f * timeNanos) / readsCnt) / NANOS_IN_MICROSECOND;
     }
 
-    @Override
-    public float getAveragePutTime() {
+    /** {@inheritDoc} */
+    @Override public float getAveragePutTime() {
         long timeNanos = putTimeNanos;
         long putsCnt = writes;
 
@@ -291,8 +291,8 @@ public class GridCacheMetricsAdapter implements GridCacheMetrics, Externalizable
         return ((1f * timeNanos) / putsCnt) / NANOS_IN_MICROSECOND;
     }
 
-    @Override
-    public float getAverageRemoveTime() {
+    /** {@inheritDoc} */
+    @Override public float getAverageRemoveTime() {
         long timeNanos = removeTimeNanos;
         long removesCnt = rmCnt;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTtlManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTtlManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTtlManager.java
index 33ead3a..0ec3fe3 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTtlManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/GridCacheTtlManager.java
@@ -127,7 +127,8 @@ public class GridCacheTtlManager<K, V> extends GridCacheManagerAdapter<K, V> {
                         if (wrapper.entry.onTtlExpired(obsoleteVer))
                             wrapper.entry.context().cache().removeEntry(wrapper.entry);
 
-                        wrapper.entry.context().cache().metrics0().onEvict();
+                        if (wrapper.entry.context().cache().configuration().isStatisticsEnabled())
+                            wrapper.entry.context().cache().metrics0().onEvict();
 
                         it.remove();
                     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearCacheEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearCacheEntry.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearCacheEntry.java
index c29f8e2..aa27e6f 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearCacheEntry.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearCacheEntry.java
@@ -360,7 +360,8 @@ public class GridNearCacheEntry<K, V> extends GridDistributedCacheEntry<K, V> {
             synchronized (this) {
                 checkObsolete();
 
-                cctx.cache().metrics0().onRead(false);
+                if (cctx.cache().configuration().isStatisticsEnabled())
+                    cctx.cache().metrics0().onRead(false);
 
                 boolean ret = false;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearGetFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearGetFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearGetFuture.java
index 7184c7b..818612a 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearGetFuture.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearGetFuture.java
@@ -465,12 +465,14 @@ public final class GridNearGetFuture<K, V> extends GridCompoundIdentityFuture<Ma
                                 dht.removeIfObsolete(key);
                         }
 
-                        if (v != null)
-                            near.metrics0().onRead(true);
+                        if (v != null) {
+                            if (cctx.cache().configuration().isStatisticsEnabled())
+                                near.metrics0().onRead(true);
+                        }
                         else {
                             primary = cctx.affinity().primary(key, topVer);
 
-                            if (!primary.isLocal())
+                            if (!primary.isLocal() && cctx.cache().configuration().isStatisticsEnabled())
                                 near.metrics0().onRead(false);
                         }
                     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java
index 200e695..9dc5234 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridNearLockFuture.java
@@ -1063,7 +1063,8 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
                                                     null,
                                                     inTx() ? tx.resolveTaskName() : null);
 
-                                            cctx.cache().metrics0().onRead(oldVal != null);
+                                            if (cctx.cache().configuration().isStatisticsEnabled())
+                                                cctx.cache().metrics0().onRead(oldVal != null);
                                         }
 
                                         if (log.isDebugEnabled())
@@ -1424,7 +1425,8 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
                                         null,
                                         inTx() ? tx.resolveTaskName() : null);
 
-                                cctx.cache().metrics0().onRead(false);
+                                if (cctx.cache().configuration().isStatisticsEnabled())
+                                    cctx.cache().metrics0().onRead(false);
                             }
 
                             if (log.isDebugEnabled())

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java
index 4312c81..fca2dd5 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/local/atomic/GridLocalAtomicCache.java
@@ -602,7 +602,7 @@ public class GridLocalAtomicCache<K, V> extends GridCacheAdapter<K, V> {
                             success = false;
                     }
                     else {
-                        if (!storeEnabled)
+                        if (!storeEnabled && configuration().isStatisticsEnabled())
                             metrics0().onRead(false);
 
                         success = false;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTxManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTxManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTxManager.java
index c2a117f..bc78303 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTxManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/cache/transactions/IgniteTxManager.java
@@ -1256,7 +1256,8 @@ public class IgniteTxManager<K, V> extends GridCacheSharedManagerAdapter<K, V> {
                 for (int cacheId : tx.activeCacheIds()) {
                     GridCacheContext<K, V> cacheCtx = cctx.cacheContext(cacheId);
 
-                    cacheCtx.cache().metrics0().onTxCommit();
+                    if (cacheCtx.cache().configuration().isStatisticsEnabled())
+                        cacheCtx.cache().metrics0().onTxCommit();
                 }
             }
 
@@ -1329,7 +1330,8 @@ public class IgniteTxManager<K, V> extends GridCacheSharedManagerAdapter<K, V> {
                 for (int cacheId : tx.activeCacheIds()) {
                     GridCacheContext<K, V> cacheCtx = cctx.cacheContext(cacheId);
 
-                    cacheCtx.cache().metrics0().onTxRollback();
+                    if (cacheCtx.cache().configuration().isStatisticsEnabled())
+                        cacheCtx.cache().metrics0().onTxRollback();
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
index 74e6068..3a1f4c0 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/GridCacheAbstractMetricsSelfTest.java
@@ -20,16 +20,21 @@ package org.gridgain.grid.kernal.processors.cache;
 import org.apache.ignite.*;
 import org.apache.ignite.transactions.*;
 import org.gridgain.grid.cache.*;
+import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.util.lang.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.gridgain.testframework.*;
 
+import javax.cache.*;
 import javax.cache.expiry.*;
+import javax.cache.spi.*;
 import javax.management.*;
 import java.net.*;
 import java.util.*;
+import java.util.concurrent.*;
 
 import static java.util.concurrent.TimeUnit.*;
+import static org.gridgain.grid.util.GridUtils.*;
 
 /**
  * Cache metrics test.
@@ -38,6 +43,9 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract
     /** */
     private static final int KEY_CNT = 50;
 
+    /** */
+    private static final String CACHE_NAME = "mbean_test";
+
     /** {@inheritDoc} */
     @Override protected boolean swapEnabled() {
         return false;
@@ -187,20 +195,38 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract
         assert cache.metrics().getAverageGetTime() > 0;
     }
 
+    private String getUriForMbean() throws Exception {
+        String uri;
+
+        try{
+            uri = resolveGridGainUrl(GridGainEx.DFLT_CFG).toURI().toString();
+        }
+        catch (Exception e){
+            uri = URI.create("ignite://default").toString();
+        }
+
+        return uri.replaceAll(",|:|=|\n", ".");
+    }
+
     /**
      * @throws Exception If failed.
      */
     public void testStatisticMXBean() throws Exception {
-        IgniteCache<Integer, Integer> jcache = grid(0).jcache(null);
+        CachingProvider cachingProvider = Caching.getCachingProvider();
+
+        CacheManager cacheMgr = cachingProvider.getCacheManager();
 
-        URI uri = URI.create("ignite://default");
+        GridCacheConfiguration cfg = new GridCacheConfiguration();
 
-        IgniteCacheManager cacheManager = new IgniteCacheManager(uri);
+        cfg.setManagementEnabled(true);
 
-        cacheManager.enableStatistics(null, true);
+        cfg.setStatisticsEnabled(true);
 
-        ObjectName objectName =
-            new ObjectName("javax.cache:type=CacheStatistics,CacheManager=ignite.//default,Cache=null");
+        Cache jcache = cacheMgr.createCache(CACHE_NAME, cfg);
+
+        String beanName = "javax.cache:type=CacheStatistics,CacheManager=" + getUriForMbean() + ",Cache=" + CACHE_NAME;
+
+        ObjectName objectName = new ObjectName(beanName);
 
         long cachePuts = (long)getConfiguration().getMBeanServer().getAttribute(objectName, "CachePuts");
 
@@ -212,21 +238,29 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract
 
         assertEquals(1, cachePuts);
 
-        cacheManager.enableStatistics(null, false);
+        cacheMgr.destroyCache(CACHE_NAME);
     }
 
     /**
      * @throws Exception If failed.
      */
     public void testCacheMxBean() throws Exception {
-        URI uri = URI.create("ignite://default");
+        CachingProvider cachingProvider = Caching.getCachingProvider();
+
+        CacheManager cacheMgr = cachingProvider.getCacheManager();
+
+        GridCacheConfiguration cfg = new GridCacheConfiguration();
+
+        cfg.setManagementEnabled(true);
 
-        IgniteCacheManager cacheManager = new IgniteCacheManager(uri);
+        cfg.setStatisticsEnabled(true);
 
-        cacheManager.enableManagement(null, true);
+        cacheMgr.createCache(CACHE_NAME, cfg);
 
-        ObjectName objectName =
-            new ObjectName("javax.cache:type=CacheConfiguration,CacheManager=ignite.//default,Cache=null");
+        String beanName = "javax.cache:type=CacheConfiguration,CacheManager=" + getUriForMbean()
+            + ",Cache=" + CACHE_NAME;
+
+        ObjectName objectName = new ObjectName(beanName);
 
         String keyType = (String)getConfiguration().getMBeanServer().getAttribute(objectName, "KeyType");
         assertEquals("java.lang.Object", keyType);
@@ -249,7 +283,7 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract
         boolean isMng = (boolean)getConfiguration().getMBeanServer().getAttribute(objectName, "ManagementEnabled");
         assertEquals(true, isMng);
 
-        cacheManager.enableManagement(null, false);
+        cacheMgr.destroyCache(CACHE_NAME);
     }
 
     /**
@@ -789,4 +823,9 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract
 
         throw new IgniteCheckedException("Unable to find " + cnt + " keys as primary for cache.");
     }
+
+    /** {@inheritDoc} */
+    @Override protected long getTestTimeout() {
+        return TimeUnit.MINUTES.toMillis(10L);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/34593673/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMetricsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMetricsSelfTest.java b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMetricsSelfTest.java
index 5fbcd9f..0e1b41e 100644
--- a/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMetricsSelfTest.java
+++ b/modules/core/src/test/java/org/gridgain/grid/kernal/processors/cache/distributed/near/GridCacheNearMetricsSelfTest.java
@@ -74,6 +74,17 @@ public class GridCacheNearMetricsSelfTest extends GridCacheAbstractSelfTest {
     }
 
     /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        super.beforeTest();
+
+        for (int i = 0; i < gridCount(); i++) {
+            Ignite g = grid(i);
+
+            g.cache(null).configuration().setStatisticsEnabled(true);
+        }
+    }
+
+    /** {@inheritDoc} */
     @Override protected GridCacheConfiguration cacheConfiguration(String gridName) throws Exception {
         GridCacheConfiguration cc = super.cacheConfiguration(gridName);