This is an automated email from the ASF dual-hosted git repository. zstan pushed a commit to branch ignite-2.18 in repository https://gitbox.apache.org/repos/asf/ignite.git
commit a0a665ddc047d201601cf2db7b541e9a1c71b5cf 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]> (cherry picked from commit 1154765f9d13b316c769246eed26e11930408344) --- 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 bebf1e48861..ebcd723f83c 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 328d956bb1e..46e07d11934 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 @@ -22,8 +22,10 @@ import org.apache.ignite.internal.processors.cache.CacheGroupContext; 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}. @@ -79,4 +81,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 b27fdbd938c..e1694888690 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()); + } }
