You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2019/08/01 16:13:18 UTC

[ignite] branch master updated: IGNITE-11924: Migrate TransactionMetricsMxBean (#6733)

This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 0bb7c17  IGNITE-11924:  Migrate TransactionMetricsMxBean (#6733)
0bb7c17 is described below

commit 0bb7c170cc0faf41e69d5bbef9e1fbac80a933e2
Author: Nikita Amelchev <ns...@gmail.com>
AuthorDate: Thu Aug 1 19:13:07 2019 +0300

    IGNITE-11924:  Migrate TransactionMetricsMxBean (#6733)
    
    Metrics migration.
---
 .../internal/TransactionMetricsMxBeanImpl.java     |   4 +
 .../wal/reader/StandaloneGridKernalContext.java    |  10 +-
 .../cache/transactions/IgniteTransactionsImpl.java |   2 +-
 .../transactions/TransactionMetricsAdapter.java    | 196 ++++++++++++++++-----
 .../processors/metric/GridMetricManager.java       |   3 +
 .../processors/metric/impl/IntMetricImpl.java      |   5 +
 .../ignite/mxbean/TransactionMetricsMxBean.java    |   4 +
 .../ignite/transactions/TransactionMetrics.java    |   3 +-
 ...anImplTest.java => TransactionMetricsTest.java} |  37 ++--
 .../db/wal/IgniteWalIteratorSwitchSegmentTest.java |   7 -
 .../IgniteCacheMetricsSelfTestSuite.java           |   4 +-
 11 files changed, 207 insertions(+), 68 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/TransactionMetricsMxBeanImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/TransactionMetricsMxBeanImpl.java
index 58b5867..e1deb50 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/TransactionMetricsMxBeanImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/TransactionMetricsMxBeanImpl.java
@@ -18,12 +18,16 @@
 package org.apache.ignite.internal;
 
 import java.util.Map;
+import org.apache.ignite.internal.processors.metric.GridMetricManager;
 import org.apache.ignite.mxbean.TransactionMetricsMxBean;
 import org.apache.ignite.transactions.TransactionMetrics;
 
 /**
  * Transactions MXBean implementation.
+ *
+ * @deprecated Use {@link GridMetricManager} instead.
  */
+@Deprecated
 public class TransactionMetricsMxBeanImpl implements TransactionMetricsMxBean {
     /** */
     private static final long serialVersionUID = 0L;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneGridKernalContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneGridKernalContext.java
index 0a25f1c..468d603 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneGridKernalContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneGridKernalContext.java
@@ -98,6 +98,7 @@ import org.apache.ignite.internal.worker.WorkersRegistry;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.plugin.PluginNotFoundException;
 import org.apache.ignite.plugin.PluginProvider;
+import org.apache.ignite.spi.metric.noop.NoopMetricExporterSpi;
 import org.apache.ignite.thread.IgniteStripedThreadPoolExecutor;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -118,6 +119,9 @@ public class StandaloneGridKernalContext implements GridKernalContext {
     /** Empty plugin processor. */
     private IgnitePluginProcessor pluginProc;
 
+    /** Metrics manager. */
+    private final GridMetricManager metricMgr;
+
     /**
      * Cache object processor. Used for converting cache objects and keys into binary objects. Null means there is no
      * convert is configured. All entries in this case will be lazy data entries.
@@ -163,6 +167,8 @@ public class StandaloneGridKernalContext implements GridKernalContext {
             marshallerCtx.setMarshallerMappingFileStoreDir(marshallerMappingFileStoreDir);
             marshallerCtx.onMarshallerProcessorStarted(this, null);
         }
+
+        metricMgr = new GridMetricManager(this);
     }
 
     /**
@@ -207,6 +213,8 @@ public class StandaloneGridKernalContext implements GridKernalContext {
 
         marshaller.setContext(marshallerCtx);
 
+        cfg.setMetricExporterSpi(new NoopMetricExporterSpi());
+
         return cfg;
     }
 
@@ -296,7 +304,7 @@ public class StandaloneGridKernalContext implements GridKernalContext {
 
     /** {@inheritDoc} */
     @Override public GridMetricManager metric() {
-        return null;
+        return metricMgr;
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
index 5d2686c..2a7999f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTransactionsImpl.java
@@ -198,7 +198,7 @@ public class IgniteTransactionsImpl<K, V> implements IgniteTransactionsEx {
 
     /** {@inheritDoc} */
     @Override public TransactionMetrics metrics() {
-        return cctx.txMetrics();
+        return cctx.txMetrics().snapshot();
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TransactionMetricsAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TransactionMetricsAdapter.java
index 55a042f..ce85a85 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TransactionMetricsAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TransactionMetricsAdapter.java
@@ -30,6 +30,9 @@ import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.cache.GridCacheMvccManager;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
+import org.apache.ignite.internal.processors.metric.impl.AtomicLongMetric;
+import org.apache.ignite.internal.processors.metric.impl.IntMetricImpl;
 import org.apache.ignite.internal.util.GridStringBuilder;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
@@ -39,60 +42,76 @@ import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.transactions.TransactionMetrics;
 import org.apache.ignite.transactions.TransactionState;
 
+import static org.apache.ignite.internal.processors.metric.GridMetricManager.TX_METRICS;
+
 /**
  * Tx metrics adapter.
  */
-public class TransactionMetricsAdapter implements TransactionMetrics, Externalizable {
+public class TransactionMetricsAdapter implements TransactionMetrics {
     /** Grid kernal context. */
     private final GridKernalContext gridKernalCtx;
 
-    /** */
-    private static final long serialVersionUID = 0L;
-
     /** Number of transaction commits. */
-    private volatile int txCommits;
+    private final IntMetricImpl txCommits;
 
     /** Number of transaction rollbacks. */
-    private volatile int txRollbacks;
+    private final IntMetricImpl txRollbacks;
 
     /** Last commit time. */
-    private volatile long commitTime;
+    private final AtomicLongMetric commitTime;
 
     /** Last rollback time. */
-    private volatile long rollbackTime;
-
-    /**
-     * Create TransactionMetricsAdapter.
-     */
-    public TransactionMetricsAdapter() {
-        this(null);
-    }
+    private final AtomicLongMetric rollbackTime;
 
     /**
      * @param ctx Kernal context.
      */
     public TransactionMetricsAdapter(GridKernalContext ctx) {
         gridKernalCtx = ctx;
+
+        MetricRegistry mreg = gridKernalCtx.metric().registry(TX_METRICS);
+
+        txCommits = mreg.intMetric("txCommits", "Number of transaction commits.");
+        txRollbacks = mreg.intMetric("txRollbacks", "Number of transaction rollbacks.");
+        commitTime = mreg.longMetric("commitTime", "Last commit time.");
+        rollbackTime = mreg.longMetric("rollbackTime", "Last rollback time.");
+
+        mreg.register("AllOwnerTransactions",
+            this::getAllOwnerTransactions,
+            Map.class,
+            "Map of local node owning transactions.");
+
+        mreg.register("TransactionsHoldingLockNumber",
+            this::getTransactionsHoldingLockNumber,
+            "The number of active transactions holding at least one key lock.");
+
+        mreg.register("LockedKeysNumber",
+            this::txLockedKeysNum,
+            "The number of keys locked on the node.");
+
+        mreg.register("OwnerTransactionsNumber",
+            this::nearTxNum,
+            "The number of active transactions for which this node is the initiator.");
     }
 
     /** {@inheritDoc} */
     @Override public long commitTime() {
-        return commitTime;
+        return commitTime.value();
     }
 
     /** {@inheritDoc} */
     @Override public long rollbackTime() {
-        return rollbackTime;
+        return rollbackTime.value();
     }
 
     /** {@inheritDoc} */
     @Override public int txCommits() {
-        return txCommits;
+        return txCommits.value();
     }
 
     /** {@inheritDoc} */
     @Override public int txRollbacks() {
-        return txRollbacks;
+        return txRollbacks.value();
     }
 
     /** {@inheritDoc} */
@@ -134,28 +153,33 @@ public class TransactionMetricsAdapter implements TransactionMetrics, Externaliz
      * Transaction commit callback.
      */
     public void onTxCommit() {
-        commitTime = U.currentTimeMillis();
+        commitTime.value(U.currentTimeMillis());
 
-        txCommits++;
+        txCommits.increment();
     }
 
     /**
      * Transaction rollback callback.
      */
     public void onTxRollback() {
-        rollbackTime = U.currentTimeMillis();
+        rollbackTime.value(U.currentTimeMillis());
 
-        txRollbacks++;
+        txRollbacks.increment();
     }
 
     /**
      * Reset.
      */
     public void reset() {
-        commitTime = 0;
-        txCommits = 0;
-        rollbackTime = 0;
-        txRollbacks = 0;
+        commitTime.reset();
+        txCommits.reset();
+        rollbackTime.reset();
+        txRollbacks.reset();
+    }
+
+    /** @return Current metrics values. */
+    public TransactionMetrics snapshot() {
+        return new TransactionMetricsSnapshot(this);
     }
 
     /**
@@ -289,23 +313,111 @@ public class TransactionMetricsAdapter implements TransactionMetrics, Externaliz
     }
 
     /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeLong(commitTime);
-        out.writeLong(rollbackTime);
-        out.writeInt(txCommits);
-        out.writeInt(txRollbacks);
+    @Override public String toString() {
+        return S.toString(TransactionMetricsAdapter.class, this);
     }
 
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        commitTime = in.readLong();
-        rollbackTime = in.readLong();
-        txCommits = in.readInt();
-        txRollbacks = in.readInt();
-    }
+    /** Transaction metrics snapshot. */
+    public static class TransactionMetricsSnapshot implements TransactionMetrics, Externalizable {
+        /** */
+        private static final long serialVersionUID = 0L;
 
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(TransactionMetricsAdapter.class, this);
+        /** Number of transaction commits. */
+        private volatile int txCommits;
+
+        /** Number of transaction rollbacks. */
+        private volatile int txRollbacks;
+
+        /** Last commit time. */
+        private volatile long commitTime;
+
+        /** Last rollback time. */
+        private volatile long rollbackTime;
+
+        /** Transaction metrics adapter. */
+        private volatile TransactionMetricsAdapter adapter;
+
+        /** Required by {@link Externalizable}. */
+        public TransactionMetricsSnapshot() {
+            this(null);
+        }
+
+        /**
+         * @param adapter Transaction metrics adapter.
+         */
+        public TransactionMetricsSnapshot(TransactionMetricsAdapter adapter) {
+            this.adapter = adapter;
+        }
+
+        /** {@inheritDoc} */
+        @Override public long commitTime() {
+            return adapter != null ? adapter.commitTime() : commitTime;
+        }
+
+        /** {@inheritDoc} */
+        @Override public long rollbackTime() {
+            return adapter != null ? adapter.rollbackTime() : rollbackTime;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int txCommits() {
+            return adapter != null ? adapter.txCommits() : txCommits;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int txRollbacks() {
+            return adapter != null ? adapter.txRollbacks() : txRollbacks;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Map<String, String> getAllOwnerTransactions() {
+            return adapter != null ? adapter.getAllOwnerTransactions() : null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Map<String, String> getLongRunningOwnerTransactions(int duration) {
+            return adapter != null ? adapter.getLongRunningOwnerTransactions(duration) : null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public long getTransactionsCommittedNumber() {
+            return adapter != null ? adapter.getTransactionsCommittedNumber() : 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override public long getTransactionsRolledBackNumber() {
+            return adapter != null ? adapter.getTransactionsRolledBackNumber() : 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override public long getTransactionsHoldingLockNumber() {
+            return adapter != null ? adapter.getTransactionsHoldingLockNumber() : 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override public long getLockedKeysNumber() {
+            return adapter != null ? adapter.getLockedKeysNumber() : 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override public long getOwnerTransactionsNumber() {
+            return adapter != null ? adapter.getOwnerTransactionsNumber() : 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void writeExternal(ObjectOutput out) throws IOException {
+            out.writeLong(commitTime);
+            out.writeLong(rollbackTime);
+            out.writeInt(txCommits);
+            out.writeInt(txRollbacks);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+            commitTime = in.readLong();
+            rollbackTime = in.readLong();
+            txCommits = in.readInt();
+            txRollbacks = in.readInt();
+        }
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/GridMetricManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/GridMetricManager.java
index 44f2314..a60d968 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/GridMetricManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/GridMetricManager.java
@@ -117,6 +117,9 @@ public class GridMetricManager extends GridManagerAdapter<MetricExporterSpi> imp
     /** Partition map exchange metrics prefix. */
     public static final String PME_METRICS = "pme";
 
+    /** Transaction metrics prefix. */
+    public static final String TX_METRICS = "tx";
+
     /** GC CPU load metric name. */
     public static final String GC_CPU_LOAD = "GcCpuLoad";
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/impl/IntMetricImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/impl/IntMetricImpl.java
index 0833158..2c49277 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/impl/IntMetricImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/metric/impl/IntMetricImpl.java
@@ -50,6 +50,11 @@ public class IntMetricImpl extends AbstractMetric implements IntMetric {
         updater.addAndGet(this, x);
     }
 
+    /** Adds 1 to the metric. */
+    public void increment() {
+        add(1);
+    }
+
     /**
      * Sets value.
      *
diff --git a/modules/core/src/main/java/org/apache/ignite/mxbean/TransactionMetricsMxBean.java b/modules/core/src/main/java/org/apache/ignite/mxbean/TransactionMetricsMxBean.java
index ef99f20..a9b5e42 100644
--- a/modules/core/src/main/java/org/apache/ignite/mxbean/TransactionMetricsMxBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/mxbean/TransactionMetricsMxBean.java
@@ -18,11 +18,15 @@
 package org.apache.ignite.mxbean;
 
 import java.util.Map;
+import org.apache.ignite.internal.processors.metric.GridMetricManager;
 import org.apache.ignite.transactions.TransactionMetrics;
 
 /**
  * Transactions MXBean interface.
+ *
+ * @deprecated Use {@link GridMetricManager} instead.
  */
+@Deprecated
 @MXBeanDescription("MBean that provides access to Ignite transactions.")
 public interface TransactionMetricsMxBean extends TransactionMetrics {
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/transactions/TransactionMetrics.java b/modules/core/src/main/java/org/apache/ignite/transactions/TransactionMetrics.java
index b638411..f07c147 100644
--- a/modules/core/src/main/java/org/apache/ignite/transactions/TransactionMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/transactions/TransactionMetrics.java
@@ -17,13 +17,12 @@
 
 package org.apache.ignite.transactions;
 
-import java.io.Serializable;
 import java.util.Map;
 
 /**
  * Transaction metrics, shared across all caches.
  */
-public interface TransactionMetrics extends Serializable {
+public interface TransactionMetrics {
     /**
      * Gets last time transaction was committed.
      *
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/TransactionMetricsMxBeanImplTest.java b/modules/core/src/test/java/org/apache/ignite/internal/TransactionMetricsTest.java
similarity index 83%
rename from modules/core/src/test/java/org/apache/ignite/internal/TransactionMetricsMxBeanImplTest.java
rename to modules/core/src/test/java/org/apache/ignite/internal/TransactionMetricsTest.java
index 6126e6f..14db83f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/TransactionMetricsMxBeanImplTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/TransactionMetricsTest.java
@@ -30,8 +30,12 @@ import org.apache.ignite.cache.CacheRebalanceMode;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.processors.metric.MetricRegistry;
+import org.apache.ignite.internal.processors.metric.impl.ObjectGauge;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.mxbean.TransactionMetricsMxBean;
+import org.apache.ignite.spi.metric.IntMetric;
+import org.apache.ignite.spi.metric.LongMetric;
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
@@ -39,13 +43,14 @@ import org.junit.Test;
 
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+import static org.apache.ignite.internal.processors.metric.GridMetricManager.TX_METRICS;
 import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
 import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
 
 /**
  *
  */
-public class TransactionMetricsMxBeanImplTest extends GridCommonAbstractTest {
+public class TransactionMetricsTest extends GridCommonAbstractTest {
     /** */
     private static final int TRANSACTIONS = 10;
 
@@ -106,6 +111,8 @@ public class TransactionMetricsMxBeanImplTest extends GridCommonAbstractTest {
 
         TransactionMetricsMxBean txMXBean = txMetricsMXBean(0);
 
+        MetricRegistry mreg = grid(0).context().metric().registry(TX_METRICS);
+
         final IgniteCache<Integer, String> cache = ignite.cache(DEFAULT_CACHE_NAME);
 
         //when: one transaction commit
@@ -113,6 +120,7 @@ public class TransactionMetricsMxBeanImplTest extends GridCommonAbstractTest {
 
         //then:
         assertEquals(1, txMXBean.getTransactionsCommittedNumber());
+        assertEquals(1, mreg.<IntMetric>findMetric("txCommits").value());
 
         //when: transaction is opening
         final Transaction tx1 = ignite.transactions().txStart(PESSIMISTIC, REPEATABLE_READ);
@@ -127,20 +135,21 @@ public class TransactionMetricsMxBeanImplTest extends GridCommonAbstractTest {
         }
 
         //then:
-        assertEquals(localKeysNum, txMXBean.getLockedKeysNumber());
-        assertEquals(1, txMXBean.getTransactionsHoldingLockNumber());
-        assertEquals(1, txMXBean.getOwnerTransactionsNumber());
+        assertEquals(localKeysNum, mreg.<LongMetric>findMetric("LockedKeysNumber").value());
+        assertEquals(1, mreg.<LongMetric>findMetric("TransactionsHoldingLockNumber").value());
+        assertEquals(1, mreg.<LongMetric>findMetric("OwnerTransactionsNumber").value());
 
         //when: transaction rollback
         tx1.rollback();
 
         //then:
         assertEquals(1, txMXBean.getTransactionsRolledBackNumber());
-        assertEquals(0, txMXBean.getLockedKeysNumber());
-        assertEquals(0, txMXBean.getTransactionsHoldingLockNumber());
-        assertEquals(0, txMXBean.getOwnerTransactionsNumber());
+        assertEquals(1, mreg.<IntMetric>findMetric("txRollbacks").value());
+        assertEquals(0, mreg.<LongMetric>findMetric("LockedKeysNumber").value());
+        assertEquals(0, mreg.<LongMetric>findMetric("TransactionsHoldingLockNumber").value());
+        assertEquals(0, mreg.<LongMetric>findMetric("OwnerTransactionsNumber").value());
 
-        //when: keysNumber transactions from MXbean owner node + keysNumber transactions from client.
+        //when: keysNumber transactions from owner node + keysNumber transactions from client.
         CountDownLatch commitAllower = new CountDownLatch(1);
         CountDownLatch transactionStarter = new CountDownLatch(keysNumber + keysNumber);
 
@@ -165,9 +174,10 @@ public class TransactionMetricsMxBeanImplTest extends GridCommonAbstractTest {
         transactionStarter.await();
 
         //then:
-        assertEquals(txNumFromOwner + txNumFromClient, txMXBean.getLockedKeysNumber());
-        assertEquals(keysNumber + txNumFromClient, txMXBean.getTransactionsHoldingLockNumber());
-        assertEquals(keysNumber, txMXBean.getOwnerTransactionsNumber());
+        assertEquals(txNumFromOwner + txNumFromClient, mreg.<LongMetric>findMetric("LockedKeysNumber").value());
+        assertEquals(keysNumber + txNumFromClient,
+            mreg.<LongMetric>findMetric("TransactionsHoldingLockNumber").value());
+        assertEquals(keysNumber, mreg.<LongMetric>findMetric("OwnerTransactionsNumber").value());
 
         commitAllower.countDown();
     }
@@ -181,7 +191,7 @@ public class TransactionMetricsMxBeanImplTest extends GridCommonAbstractTest {
         IgniteEx primaryNode2 = startGrid(1);
         IgniteEx nearNode = startGrid(2);
 
-        TransactionMetricsMxBean txMXBeanBackup = txMetricsMXBean(2);
+        MetricRegistry mreg = grid(2).context().metric().registry(TX_METRICS);
 
         awaitPartitionMapExchange();
 
@@ -205,7 +215,8 @@ public class TransactionMetricsMxBeanImplTest extends GridCommonAbstractTest {
 
         transactionStarter.await();
 
-        final Map<String, String> transactions = txMXBeanBackup.getAllOwnerTransactions();
+        final Map<String, String> transactions =
+            mreg.<ObjectGauge<Map<String, String>>>findMetric("AllOwnerTransactions").value();
 
         assertEquals(TRANSACTIONS, transactions.size());
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
index b7d4e40..230cb5c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
@@ -53,13 +53,11 @@ import org.apache.ignite.internal.processors.cache.persistence.wal.reader.Standa
 import org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordSerializer;
 import org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordSerializerFactoryImpl;
 import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
-import org.apache.ignite.internal.processors.metric.GridMetricManager;
 import org.apache.ignite.internal.processors.subscription.GridInternalSubscriptionProcessor;
 import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.spi.eventstorage.NoopEventStorageSpi;
-import org.apache.ignite.spi.metric.noop.NoopMetricExporterSpi;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Assert;
@@ -442,7 +440,6 @@ public class IgniteWalIteratorSwitchSegmentTest extends GridCommonAbstractTest {
                 );
 
                 cfg.setEventStorageSpi(new NoopEventStorageSpi());
-                cfg.setMetricExporterSpi(new NoopMetricExporterSpi());
 
                 return cfg;
             }
@@ -454,10 +451,6 @@ public class IgniteWalIteratorSwitchSegmentTest extends GridCommonAbstractTest {
             @Override public GridEventStorageManager event() {
                 return new GridEventStorageManager(this);
             }
-
-            @Override public GridMetricManager metric() {
-                return new GridMetricManager(this);
-            }
         };
 
         IgniteWriteAheadLogManager walMgr = new FileWriteAheadLogManager(kctx);
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 2e940c6..ea62772 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
@@ -20,7 +20,7 @@ package org.apache.ignite.testsuites;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import org.apache.ignite.internal.TransactionMetricsMxBeanImplTest;
+import org.apache.ignite.internal.TransactionMetricsTest;
 import org.apache.ignite.internal.processors.cache.CacheGroupsMetricsRebalanceTest;
 import org.apache.ignite.internal.processors.cache.CacheMetricsCacheSizeTest;
 import org.apache.ignite.internal.processors.cache.CacheMetricsEntitiesCountTest;
@@ -79,7 +79,7 @@ public class IgniteCacheMetricsSelfTestSuite {
         GridTestUtils.addTestIfNeeded(suite, CacheMetricsForClusterGroupSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, OffheapCacheMetricsForClusterGroupSelfTest.class, ignoredTests);
 
-        GridTestUtils.addTestIfNeeded(suite, TransactionMetricsMxBeanImplTest.class, ignoredTests);
+        GridTestUtils.addTestIfNeeded(suite, TransactionMetricsTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, GridEvictionPolicyMBeansTest.class, ignoredTests);