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

alexpl 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 1154765f9d1 IGNITE-27687 Add metrics for inserted/removed bytes 
to/from cache group - Fixes #12670.
1154765f9d1 is described below

commit 1154765f9d13b316c769246eed26e11930408344
Author: Aleksey Plekhanov <[email protected]>
AuthorDate: Fri Feb 13 17:54:54 2026 +0300

    IGNITE-27687 Add metrics for inserted/removed bytes to/from cache group - 
Fixes #12670.
    
    Signed-off-by: Aleksey Plekhanov <[email protected]>
---
 docs/_docs/monitoring-metrics/new-metrics.adoc     |   2 +
 docs/_docs/monitoring-metrics/system-views.adoc    |  15 +++
 .../ignite/jdbc/thin/JdbcThinMetadataSelfTest.java |   2 +
 .../ignite/internal/metric/IoStatisticsHolder.java |  14 +++
 .../internal/metric/IoStatisticsHolderCache.java   |  28 ++++-
 .../internal/metric/IoStatisticsHolderIndex.java   |  10 ++
 .../internal/metric/IoStatisticsHolderNoOp.java    |  12 ++
 .../internal/metric/IoStatisticsHolderQuery.java   |  10 ++
 .../persistence/freelist/AbstractFreeList.java     |  29 +++--
 .../spi/systemview/view/CacheGroupIoView.java      |  22 ++++
 ...IoStatisticsMetricsLocalMXBeanImplSelfTest.java | 122 ++++++++++++++++++++-
 .../internal/metric/IoStatisticsSelfTest.java      |   2 +-
 .../ignite/internal/metric/SystemViewSelfTest.java |   1 +
 .../rebalancing/MultiDcRebalancingTest.java        |  22 +---
 .../junits/common/GridCommonAbstractTest.java      |  16 +++
 15 files changed, 272 insertions(+), 35 deletions(-)

diff --git a/docs/_docs/monitoring-metrics/new-metrics.adoc 
b/docs/_docs/monitoring-metrics/new-metrics.adoc
index 862f27a3391..19a2ca3121e 100644
--- a/docs/_docs/monitoring-metrics/new-metrics.adoc
+++ b/docs/_docs/monitoring-metrics/new-metrics.adoc
@@ -244,6 +244,8 @@ Register name: `io.statistics.cacheGroups.{group_name}`
 |grpId  | integer | Group id
 |name  |  string | Name of the index
 |startTime  | long |   Statistics collect start time
+|insertedBytes | long | Count of inserted to store bytes
+|removedBytes | long | Count of removed from store bytes
 |===
 
 
diff --git a/docs/_docs/monitoring-metrics/system-views.adoc 
b/docs/_docs/monitoring-metrics/system-views.adoc
index f9afb0ccc90..ad4589bb23c 100644
--- a/docs/_docs/monitoring-metrics/system-views.adoc
+++ b/docs/_docs/monitoring-metrics/system-views.adoc
@@ -789,6 +789,21 @@ This view exposes information about the distribution of 
cache group partitions a
 |IS_PRIMARY | boolean  | Primary partition flag
 |===
 
+== LOCAL_CACHE_GROUPS_IO
+
+This view exposes information about local node IO statistics for cache groups.
+
+[{table_opts}]
+|===
+|Column | Data type |  Description
+|CACHE_GROUP_ID | int| Cache group ID
+|CACHE_GROUP_NAME | string| Cache group name
+|PHYSICAL_READS | long | Count of logical page reads
+|LOGICAL_READS | long | Count of physical page reads
+|INSERTED_BYTES | long | Count of inserted to store bytes
+|REMOVED_BYTES | long | Count of removed from store bytes
+|===
+
 == BINARY_METADATA
 
 This view exposes information about all available binary types.
diff --git 
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
 
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
index 2f1aef7d331..b2de892d55e 100644
--- 
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
+++ 
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
@@ -767,6 +767,8 @@ public class JdbcThinMetadataSelfTest extends 
JdbcThinAbstractSelfTest {
                 "SYS.LOCAL_CACHE_GROUPS_IO.CACHE_GROUP_NAME.null",
                 "SYS.LOCAL_CACHE_GROUPS_IO.PHYSICAL_READS.null",
                 "SYS.LOCAL_CACHE_GROUPS_IO.LOGICAL_READS.null",
+                "SYS.LOCAL_CACHE_GROUPS_IO.INSERTED_BYTES.null",
+                "SYS.LOCAL_CACHE_GROUPS_IO.REMOVED_BYTES.null",
                 "SYS.SQL_QUERIES_HISTORY.SCHEMA_NAME.null",
                 "SYS.SQL_QUERIES_HISTORY.SQL.null",
                 "SYS.SQL_QUERIES_HISTORY.LOCAL.null",
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolder.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolder.java
index 28604d063b0..f4f2afd2aa7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolder.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolder.java
@@ -36,6 +36,20 @@ public interface IoStatisticsHolder {
      */
     public void trackPhysicalAndLogicalRead(long pageAddr);
 
+    /**
+     * Track insert data to the page.
+     *
+     * @param bytes Bytes inserted.
+     */
+    public void trackPageInsertData(long bytes);
+
+    /**
+     * Track remove data from the page.
+     *
+     * @param bytes Bytes removed.
+     */
+    public void trackPageRemoveData(long bytes);
+
     /**
      * @return Number of logical reads.
      */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderCache.java
index 11e3330fc42..c8d290c656f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderCache.java
@@ -38,12 +38,24 @@ public class IoStatisticsHolderCache implements 
IoStatisticsHolder {
     /** */
     public static final String LOGICAL_READS = "LOGICAL_READS";
 
+    /** */
+    public static final String INSERTED_BYTES = "insertedBytes";
+
+    /** */
+    public static final String REMOVED_BYTES = "removedBytes";
+
     /** */
     private final LongAdderMetric logicalReadCtr;
 
     /** */
     private final LongAdderMetric physicalReadCtr;
 
+    /** */
+    private final LongAdderMetric insertedBytes;
+
+    /** */
+    private final LongAdderMetric removedBytes;
+
     /** */
     private final String grpName;
 
@@ -67,8 +79,10 @@ public class IoStatisticsHolderCache implements 
IoStatisticsHolder {
         mreg.objectMetric("name", String.class, null).value(grpName);
         mreg.intMetric("grpId", null).value(grpId);
 
-        this.logicalReadCtr = mreg.longAdderMetric(LOGICAL_READS, null);
-        this.physicalReadCtr = mreg.longAdderMetric(PHYSICAL_READS, null);
+        logicalReadCtr = mreg.longAdderMetric(LOGICAL_READS, "Count of logical 
page reads");
+        physicalReadCtr = mreg.longAdderMetric(PHYSICAL_READS, "Count of 
physical page reads");
+        insertedBytes = mreg.longAdderMetric(INSERTED_BYTES, "Count of 
inserted to store bytes");
+        removedBytes = mreg.longAdderMetric(REMOVED_BYTES, "Count of removed 
from store bytes");
     }
 
     /** {@inheritDoc} */
@@ -95,6 +109,16 @@ public class IoStatisticsHolderCache implements 
IoStatisticsHolder {
         }
     }
 
+    /** {@inheritDoc} */
+    @Override public void trackPageInsertData(long bytes) {
+        insertedBytes.add(bytes);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void trackPageRemoveData(long bytes) {
+        removedBytes.add(bytes);
+    }
+
     /** {@inheritDoc} */
     @Override public long logicalReads() {
         return logicalReadCtr.value();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderIndex.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderIndex.java
index 8cbea95b412..1bce5e4add7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderIndex.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderIndex.java
@@ -141,6 +141,16 @@ public class IoStatisticsHolderIndex implements 
IoStatisticsHolder {
         }
     }
 
+    /** {@inheritDoc} */
+    @Override public void trackPageInsertData(long bytes) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void trackPageRemoveData(long bytes) {
+        // No-op.
+    }
+
     /** {@inheritDoc} */
     @Override public long logicalReads() {
         return logicalReadLeafCtr.value() + logicalReadInnerCtr.value();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderNoOp.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderNoOp.java
index 936fb11b5db..fe5c1c95907 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderNoOp.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderNoOp.java
@@ -34,10 +34,22 @@ public class IoStatisticsHolderNoOp implements 
IoStatisticsHolder {
 
     /** {@inheritDoc} */
     @Override public void trackLogicalRead(long pageAddr) {
+        // No-op.
     }
 
     /** {@inheritDoc} */
     @Override public void trackPhysicalAndLogicalRead(long pageAddr) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void trackPageInsertData(long bytes) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void trackPageRemoveData(long bytes) {
+        // No-op.
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderQuery.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderQuery.java
index b7884e521de..232c39a8db2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderQuery.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/metric/IoStatisticsHolderQuery.java
@@ -53,6 +53,16 @@ public class IoStatisticsHolderQuery implements 
IoStatisticsHolder {
         physicalReadCtr.increment();
     }
 
+    /** {@inheritDoc} */
+    @Override public void trackPageInsertData(long bytes) {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public void trackPageRemoveData(long bytes) {
+        // No-op.
+    }
+
     /** {@inheritDoc} */
     @Override public long logicalReads() {
         return logicalReadCtr.longValue();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/AbstractFreeList.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/AbstractFreeList.java
index 8165389599f..62452095631 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/AbstractFreeList.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/freelist/AbstractFreeList.java
@@ -135,6 +135,9 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
 
                 PageUtils.getBytes(pageAddr, data.offset(), payload, 0, 
rowSize);
 
+                statHolder.trackPageRemoveData(rowSize);
+                statHolder.trackPageInsertData(rowSize);
+
                 wal.log(new DataPageUpdateRecord(
                     cacheId,
                     pageId,
@@ -164,9 +167,9 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
             Boolean walPlc,
             T row,
             int written,
-            IoStatisticsHolder statHolder)
-            throws IgniteCheckedException {
-            written = addRow(pageId, page, pageAddr, iox, row, written);
+            IoStatisticsHolder statHolder
+        ) throws IgniteCheckedException {
+            written = addRow(pageId, page, pageAddr, iox, row, written, 
statHolder);
 
             putPage(((AbstractDataPageIO)iox).getFreeSpace(pageAddr), pageId, 
page, pageAddr, statHolder);
 
@@ -180,6 +183,7 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
          * @param iox IO.
          * @param row Row to write.
          * @param written Written size.
+         * @param statHolder IO statistics holder.
          * @return Number of bytes written, {@link #COMPLETE} if the row was 
fully written.
          * @throws IgniteCheckedException If failed.
          */
@@ -189,8 +193,9 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
             long pageAddr,
             PageIO iox,
             T row,
-            int written)
-            throws IgniteCheckedException {
+            int written,
+            IoStatisticsHolder statHolder
+        ) throws IgniteCheckedException {
             AbstractDataPageIO<T> io = (AbstractDataPageIO<T>)iox;
 
             long lastLink = row.link();
@@ -209,6 +214,8 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
 
             evictionTracker.trackFragmentPage(pageId, lastLink, written == 
rowSize);
 
+            statHolder.trackPageInsertData(oldFreeSpace - 
io.getFreeSpace(pageAddr));
+
             // Avoid boxing with garbage generation for usual case.
             return written == rowSize ? COMPLETE : written;
         }
@@ -324,8 +331,8 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
             Boolean walPlc,
             GridCursor<T> cur,
             int written,
-            IoStatisticsHolder statHolder)
-            throws IgniteCheckedException {
+            IoStatisticsHolder statHolder
+        ) throws IgniteCheckedException {
             AbstractDataPageIO<T> io = (AbstractDataPageIO<T>)iox;
 
             // Fill the page up to the end.
@@ -341,7 +348,7 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
                         break;
                 }
 
-                written = writeRowHnd.addRow(pageId, page, pageAddr, io, row, 
written);
+                written = writeRowHnd.addRow(pageId, page, pageAddr, io, row, 
written, statHolder);
 
                 assert written == COMPLETE;
             }
@@ -377,8 +384,8 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
             Boolean walPlc,
             ReuseBag reuseBag,
             int itemId,
-            IoStatisticsHolder statHolder)
-            throws IgniteCheckedException {
+            IoStatisticsHolder statHolder
+        ) throws IgniteCheckedException {
             AbstractDataPageIO<T> io = (AbstractDataPageIO<T>)iox;
 
             int oldFreeSpace = io.getFreeSpace(pageAddr);
@@ -418,6 +425,8 @@ public abstract class AbstractFreeList<T extends Storable> 
extends PagesList imp
                     put(null, pageId, page, pageAddr, newBucket, statHolder);
             }
 
+            statHolder.trackPageRemoveData(newFreeSpace - oldFreeSpace);
+
             // For common case boxed 0L will be cached inside of Long, so no 
garbage will be produced.
             return nextLink;
         }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheGroupIoView.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheGroupIoView.java
index aaa634ce839..c5e83161e62 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheGroupIoView.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheGroupIoView.java
@@ -23,8 +23,10 @@ import 
org.apache.ignite.internal.systemview.SystemViewDescriptor;
 import org.apache.ignite.metric.MetricRegistry;
 import org.apache.ignite.spi.metric.LongMetric;
 
+import static 
org.apache.ignite.internal.metric.IoStatisticsHolderCache.INSERTED_BYTES;
 import static 
org.apache.ignite.internal.metric.IoStatisticsHolderCache.LOGICAL_READS;
 import static 
org.apache.ignite.internal.metric.IoStatisticsHolderCache.PHYSICAL_READS;
+import static 
org.apache.ignite.internal.metric.IoStatisticsHolderCache.REMOVED_BYTES;
 
 /**
  * Cache group IO statistics representation for a {@link SystemView}.
@@ -81,4 +83,24 @@ public class CacheGroupIoView {
 
         return metric != null ? metric.value() : 0;
     }
+
+    /**
+     * @return Inserted bytes into store.
+     */
+    @Order(4)
+    public long insertedBytes() {
+        LongMetric metric = mreg.findMetric(INSERTED_BYTES);
+
+        return metric != null ? metric.value() : 0;
+    }
+
+    /**
+     * @return Removed bytes from store.
+     */
+    @Order(5)
+    public long removedBytes() {
+        LongMetric metric = mreg.findMetric(REMOVED_BYTES);
+
+        return metric != null ? metric.value() : 0;
+    }
 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/metric/IoStatisticsMetricsLocalMXBeanImplSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/metric/IoStatisticsMetricsLocalMXBeanImplSelfTest.java
index ec5d77d3781..cf53734917f 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/metric/IoStatisticsMetricsLocalMXBeanImplSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/metric/IoStatisticsMetricsLocalMXBeanImplSelfTest.java
@@ -27,9 +27,12 @@ import 
org.apache.ignite.internal.processors.metric.GridMetricManager;
 import org.apache.ignite.metric.MetricRegistry;
 import org.apache.ignite.spi.metric.LongMetric;
 import org.apache.ignite.spi.metric.ReadOnlyMetricRegistry;
+import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
+import static 
org.apache.ignite.internal.metric.IoStatisticsHolderCache.INSERTED_BYTES;
+import static 
org.apache.ignite.internal.metric.IoStatisticsHolderCache.REMOVED_BYTES;
 import static 
org.apache.ignite.internal.metric.IoStatisticsHolderIndex.HASH_PK_IDX_NAME;
 import static 
org.apache.ignite.internal.metric.IoStatisticsHolderIndex.LOGICAL_READS_INNER;
 import static 
org.apache.ignite.internal.metric.IoStatisticsHolderIndex.LOGICAL_READS_LEAF;
@@ -62,12 +65,15 @@ public class IoStatisticsMetricsLocalMXBeanImplSelfTest 
extends GridCommonAbstra
     }
 
     /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        super.beforeTestsStarted();
-
+    @Override protected void beforeTest() throws Exception {
         ignite = startGrid(0);
     }
 
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        stopAllGrids();
+    }
+
     /**
      * Simple test JMX bean for indexes IO stats.
      *
@@ -130,6 +136,116 @@ public class IoStatisticsMetricsLocalMXBeanImplSelfTest 
extends GridCommonAbstra
         assertEquals(0, cachePhysicalReadsCnt);
     }
 
+    /** */
+    @Test
+    public void testInsertedDeletedBytes() {
+        int cnt = 100;
+
+        MetricRegistry mreg = ignite.context().metric()
+            .registry(metricName(CACHE_GROUP.metricGroupName(), 
DEFAULT_CACHE_NAME));
+
+        LongMetric insertedBytes = mreg.findMetric(INSERTED_BYTES);
+        LongMetric removedBytes = mreg.findMetric(REMOVED_BYTES);
+
+        assertEquals(0, insertedBytes.value());
+
+        populateCache(cnt);
+
+        int minEntrySize = 20; // Size of key, size of val, entry headers, 
data page payload headers, etc.
+        int maxEntrySize = 100;
+
+        assertTrue(insertedBytes.value() > cnt * minEntrySize);
+        assertTrue(insertedBytes.value() < cnt * maxEntrySize);
+
+        assertEquals(0, removedBytes.value());
+
+        clearCache(cnt);
+
+        assertEquals(insertedBytes.value(), removedBytes.value());
+    }
+
+    /** */
+    @Test
+    public void testInsertedDeletedBytesInplaceUpdate() {
+        MetricRegistry mreg = ignite.context().metric()
+            .registry(metricName(CACHE_GROUP.metricGroupName(), 
DEFAULT_CACHE_NAME));
+
+        LongMetric insertedBytes = mreg.findMetric(INSERTED_BYTES);
+        LongMetric removedBytes = mreg.findMetric(REMOVED_BYTES);
+
+        ignite.cache(DEFAULT_CACHE_NAME).put(0, 0);
+
+        long inserted0 = insertedBytes.value();
+
+        assertNotSame(0, inserted0);
+
+        // Inplace update.
+        ignite.cache(DEFAULT_CACHE_NAME).put(0, 1);
+
+        assertNotSame(0, removedBytes.value());
+        assertEquals(insertedBytes.value() - inserted0, removedBytes.value());
+    }
+
+    /** */
+    @Test
+    public void testInsertedDeletedBytesMultipage() {
+        MetricRegistry mreg = ignite.context().metric()
+            .registry(metricName(CACHE_GROUP.metricGroupName(), 
DEFAULT_CACHE_NAME));
+
+        LongMetric insertedBytes = mreg.findMetric(INSERTED_BYTES);
+        LongMetric removedBytes = mreg.findMetric(REMOVED_BYTES);
+
+        assertEquals(0, insertedBytes.value());
+
+        int size = 100_000;
+
+        ignite.cache(DEFAULT_CACHE_NAME).put(0, new byte[size]);
+
+        assertTrue("Unexpected value for insertedBytes: " + 
insertedBytes.value(), insertedBytes.value() > size);
+
+        ignite.cache(DEFAULT_CACHE_NAME).remove(0);
+
+        assertEquals(insertedBytes.value(), removedBytes.value());
+    }
+
+    /** */
+    @Test
+    public void testInsertedDeletedBytesOnRebalance() throws Exception {
+        int cnt = 100;
+
+        MetricRegistry mreg0 = ignite.context().metric()
+            .registry(metricName(CACHE_GROUP.metricGroupName(), 
DEFAULT_CACHE_NAME));
+
+        LongMetric insertedBytes0 = mreg0.findMetric(INSERTED_BYTES);
+        LongMetric removedBytes0 = mreg0.findMetric(REMOVED_BYTES);
+
+        populateCache(cnt);
+
+        assertNotSame(0, insertedBytes0.value());
+        assertEquals(0, removedBytes0.value());
+
+        IgniteEx ignite1 = startGrid(1);
+
+        waitRebalanceFinished(ignite1, DEFAULT_CACHE_NAME);
+
+        MetricRegistry mreg1 = ignite1.context().metric()
+            .registry(metricName(CACHE_GROUP.metricGroupName(), 
DEFAULT_CACHE_NAME));
+
+        LongMetric insertedBytes1 = mreg1.findMetric(INSERTED_BYTES);
+        LongMetric removedBytes1 = mreg1.findMetric(REMOVED_BYTES);
+
+        assertNotSame(0, removedBytes0.value());
+        assertNotSame(0, insertedBytes1.value());
+        assertEquals(0, removedBytes1.value());
+
+        clearCache(cnt);
+
+        assertNotSame(0, removedBytes1.value());
+
+        assertTrue(GridTestUtils.waitForCondition(() -> insertedBytes0.value() 
== removedBytes0.value(), 1_000L));
+        assertTrue(GridTestUtils.waitForCondition(() -> insertedBytes1.value() 
== removedBytes1.value(), 1_000L));
+    }
+
     /**
      * @param cnt Number of inserting elements.
      */
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/metric/IoStatisticsSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/metric/IoStatisticsSelfTest.java
index 980fe203aae..6eca1644f62 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/metric/IoStatisticsSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/metric/IoStatisticsSelfTest.java
@@ -98,7 +98,7 @@ public class IoStatisticsSelfTest extends 
GridCommonAbstractTest {
         assertNotNull(mreg);
 
         if (type == CACHE_GROUP) {
-            assertEquals(5, Iterators.size(mreg.iterator()));
+            assertEquals(7, Iterators.size(mreg.iterator()));
 
             assertEquals(0, 
mreg.<LongMetric>findMetric(LOGICAL_READS).value());
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
index 11f6dd2af25..19da9264e27 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/metric/SystemViewSelfTest.java
@@ -940,6 +940,7 @@ public class SystemViewSelfTest extends 
GridCommonAbstractTest {
 
             assertNotNull(row);
             assertTrue(row.logicalReads() > 0);
+            assertTrue(row.insertedBytes() > 0);
         }
     }
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/MultiDcRebalancingTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/MultiDcRebalancingTest.java
index bb71087a7e7..9f77dc49626 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/MultiDcRebalancingTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/MultiDcRebalancingTest.java
@@ -27,16 +27,13 @@ import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.managers.communication.GridIoMessage;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemandMessage;
-import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemander;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.plugin.extensions.communication.Message;
 import org.apache.ignite.spi.IgniteSpiException;
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
-import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.WithSystemProperty;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
@@ -122,8 +119,8 @@ public class MultiDcRebalancingTest extends 
GridCommonAbstractTest {
 
         resetBaselineTopology();
 
-        waitRebalanceFinished(ignite2);
-        waitRebalanceFinished(ignite3);
+        waitRebalanceFinished(ignite2, DEFAULT_CACHE_NAME);
+        waitRebalanceFinished(ignite3, DEFAULT_CACHE_NAME);
 
         assertTrue(commSPI(ignite2).rebalanceMsgCnt > 0);
         assertTrue(commSPI(ignite3).rebalanceMsgCnt > 0);
@@ -158,7 +155,7 @@ public class MultiDcRebalancingTest extends 
GridCommonAbstractTest {
 
         IgniteEx ignite2 = startGrid(2, DC1);
 
-        waitRebalanceFinished(ignite2);
+        waitRebalanceFinished(ignite2, DEFAULT_CACHE_NAME);
 
         assertTrue(commSPI(ignite2).rebalanceMsgCnt > 0);
         assertTrue(commSPI(ignite2).historical);
@@ -170,19 +167,6 @@ public class MultiDcRebalancingTest extends 
GridCommonAbstractTest {
         return 
(RebalanceAwareCommSPI)(ignite.configuration().getCommunicationSpi());
     }
 
-    /** */
-    private void waitRebalanceFinished(IgniteEx ignite) throws Exception {
-        assertTrue(GridTestUtils.waitForCondition(() -> {
-            IgniteInternalFuture<Boolean> fut = 
ignite.cachex(DEFAULT_CACHE_NAME).context().preloader().rebalanceFuture();
-
-            GridDhtPartitionDemander.RebalanceFuture rebFut = 
(GridDhtPartitionDemander.RebalanceFuture)fut;
-
-            return (!rebFut.isInitial() && 
rebFut.topologyVersion().topologyVersion() == 
ignite.cluster().topologyVersion());
-        }, 1000));
-
-        
assertTrue(ignite.cachex(DEFAULT_CACHE_NAME).context().preloader().rebalanceFuture().get());
-    }
-
     /** */
     private static class RebalanceAwareCommSPI extends TcpCommunicationSpi {
         /** */
diff --git 
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
 
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
index d3d9efffaa5..8642fcf8611 100755
--- 
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
@@ -103,6 +103,7 @@ import 
org.apache.ignite.internal.processors.cache.WalStateManager.WALDisableCon
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.colocated.GridDhtColocatedCache;
+import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionDemander;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionFullMap;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionMap;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.IgniteDhtDemandedPartitionsMap;
@@ -2858,4 +2859,19 @@ public abstract class GridCommonAbstractTest extends 
GridAbstractTest {
     protected static Marshaller marshaller(Ignite ign) {
         return ((IgniteEx)ign).context().marshaller();
     }
+
+    /**
+     * Wait for rebalance on current topology finished.
+     */
+    protected static void waitRebalanceFinished(IgniteEx ignite, String 
cacheName) throws Exception {
+        assertTrue(GridTestUtils.waitForCondition(() -> {
+            IgniteInternalFuture<Boolean> fut = 
ignite.cachex(cacheName).context().preloader().rebalanceFuture();
+
+            GridDhtPartitionDemander.RebalanceFuture rebFut = 
(GridDhtPartitionDemander.RebalanceFuture)fut;
+
+            return (!rebFut.isInitial() && 
rebFut.topologyVersion().topologyVersion() == 
ignite.cluster().topologyVersion());
+        }, 1000));
+
+        
assertTrue(ignite.cachex(cacheName).context().preloader().rebalanceFuture().get());
+    }
 }

Reply via email to