You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sk...@apache.org on 2021/03/15 07:47:23 UTC
[ignite] branch master updated: IGNITE-13689 Extended test coverage
related to IGNITE-11512. Fixes #8444
This is an automated email from the ASF dual-hosted git repository.
sk0x50 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 4d43434 IGNITE-13689 Extended test coverage related to IGNITE-11512. Fixes #8444
4d43434 is described below
commit 4d43434095bd985cb449ddc34cca6d23124516f4
Author: a-polyakov <ap...@gridgain.com>
AuthorDate: Mon Mar 15 10:46:47 2021 +0300
IGNITE-13689 Extended test coverage related to IGNITE-11512. Fixes #8444
Signed-off-by: Slava Koptilin <sl...@gmail.com>
---
.../CacheGroupMetricsWithIndexBuildFailTest.java | 10 +-
.../cache/CacheGroupMetricsWithIndexTest.java | 204 ++++++++++++++++-----
2 files changed, 168 insertions(+), 46 deletions(-)
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsWithIndexBuildFailTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsWithIndexBuildFailTest.java
index af21440..c721be2 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsWithIndexBuildFailTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsWithIndexBuildFailTest.java
@@ -32,6 +32,7 @@ import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.processors.cache.index.AbstractIndexingCommonTest;
import org.apache.ignite.internal.processors.metric.MetricRegistry;
import org.apache.ignite.internal.processors.query.GridQueryProcessor;
+import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.spi.IgniteSpiAdapter;
import org.apache.ignite.spi.IgniteSpiException;
@@ -127,7 +128,14 @@ public class CacheGroupMetricsWithIndexBuildFailTest extends AbstractIndexingCom
LongMetric indexBuildCountPartitionsLeft = grpMreg.findMetric("IndexBuildCountPartitionsLeft");
- assertEquals(parts1 + parts2, indexBuildCountPartitionsLeft.value());
+ assertTrue(GridTestUtils.waitForCondition(
+ new GridAbsPredicate() {
+ @Override public boolean apply() {
+ return parts1 + parts2 == indexBuildCountPartitionsLeft.value();
+ }
+ },
+ 5000
+ ));
failIndexRebuild.set(true);
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsWithIndexTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsWithIndexTest.java
index e2431bd..8e62648 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsWithIndexTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheGroupMetricsWithIndexTest.java
@@ -35,14 +35,10 @@ import org.apache.ignite.cache.QueryIndex;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.processors.cache.index.AbstractIndexingCommonTest.BlockingIndexing;
import org.apache.ignite.internal.processors.metric.MetricRegistry;
-import org.apache.ignite.internal.processors.query.GridQueryProcessor;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.spi.metric.LongMetric;
import org.apache.ignite.testframework.GridTestUtils;
-import org.junit.Assert;
import org.junit.Test;
import static org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.DFLT_STORE_DIR;
@@ -59,9 +55,6 @@ public class CacheGroupMetricsWithIndexTest extends CacheGroupMetricsTest {
private static final String CACHE_NAME = "cache1";
/** */
- private static final String GROUP_NAME_2 = "group2";
-
- /** */
private static final String OBJECT_NAME = "MyObject";
/** */
@@ -87,7 +80,7 @@ public class CacheGroupMetricsWithIndexTest extends CacheGroupMetricsTest {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
for (CacheConfiguration cacheCfg : cfg.getCacheConfiguration()) {
- if (GROUP_NAME.equals(cacheCfg.getGroupName()) || GROUP_NAME_2.equals(cacheCfg.getGroupName())) {
+ if (GROUP_NAME.equals(cacheCfg.getGroupName()) && CACHE_NAME.equals(cacheCfg.getName())) {
QueryEntity qryEntity = new QueryEntity(Long.class.getCanonicalName(), OBJECT_NAME);
qryEntity.setKeyFieldName(KEY_NAME);
@@ -129,8 +122,6 @@ public class CacheGroupMetricsWithIndexTest extends CacheGroupMetricsTest {
stopAllGrids();
cleanPersistenceDir();
-
- GridQueryProcessor.idxCls = null;
}
/**
@@ -140,23 +131,22 @@ public class CacheGroupMetricsWithIndexTest extends CacheGroupMetricsTest {
public void testIndexRebuildCountPartitionsLeft() throws Exception {
pds = true;
- GridQueryProcessor.idxCls = BlockingIndexing.class;
-
- IgniteEx ignite = startGrid(0);
+ Ignite ignite = startGrid(0);
ignite.cluster().active(true);
- String cacheName2 = "cache2";
- String cacheName3 = "cache3";
+ IgniteCache<Object, Object> cache1 = ignite.cache(CACHE_NAME);
- IgniteCache<Long, Object> cache2 = ignite.cache(cacheName2);
- IgniteCache<Long, Object> cache3 = ignite.cache(cacheName3);
+ for (int i = 0; i < 100_000; i++) {
+ Long id = (long)i;
- cache2.put(1L, 1L);
- cache3.put(1L, 1L);
+ BinaryObjectBuilder o = ignite.binary().builder(OBJECT_NAME)
+ .setField(KEY_NAME, id)
+ .setField(COLUMN1_NAME, i / 2)
+ .setField(COLUMN2_NAME, "str" + Integer.toHexString(i));
- int parts2 = ignite.cachex(cacheName2).configuration().getAffinity().partitions();
- int parts3 = ignite.cachex(cacheName3).configuration().getAffinity().partitions();
+ cache1.put(id, o.build());
+ }
ignite.cluster().active(false);
@@ -171,39 +161,149 @@ public class CacheGroupMetricsWithIndexTest extends CacheGroupMetricsTest {
ignite.cluster().active(true);
- BlockingIndexing blockingIndexing = (BlockingIndexing)ignite.context().query().getIndexing();
+ MetricRegistry metrics = cacheGroupMetrics(0, GROUP_NAME).get2();
+
+ LongMetric idxBuildCntPartitionsLeft = metrics.findMetric("IndexBuildCountPartitionsLeft");
+
+ assertTrue("Timeout wait start rebuild index",
+ waitForCondition(() -> idxBuildCntPartitionsLeft.value() > 0, 30_000));
+
+ assertTrue("Timeout wait finished rebuild index",
+ GridTestUtils.waitForCondition(() -> idxBuildCntPartitionsLeft.value() == 0, 30_000));
+ }
+
+ /**
+ * Test number of partitions need to finished create indexes.
+ */
+ @Test
+ public void testIndexCreateCountPartitionsLeft() throws Exception {
+ pds = true;
+
+ Ignite ignite = startGrid(0);
+
+ ignite.cluster().active(true);
+
+ IgniteCache<Object, Object> cache1 = ignite.cache(CACHE_NAME);
+
+ String addColSql = "ALTER TABLE " + TABLE + " ADD COLUMN " + COLUMN3_NAME + " BIGINT";
+
+ cache1.query(new SqlFieldsQuery(addColSql)).getAll();
+
+ for (int i = 0; i < 100_000; i++) {
+ Long id = (long)i;
+
+ BinaryObjectBuilder o = ignite.binary().builder(OBJECT_NAME)
+ .setField(KEY_NAME, id)
+ .setField(COLUMN1_NAME, i / 2)
+ .setField(COLUMN2_NAME, "str" + Integer.toHexString(i))
+ .setField(COLUMN3_NAME, id * 10);
+
+ cache1.put(id, o.build());
+ }
+
+ MetricRegistry metrics = cacheGroupMetrics(0, GROUP_NAME).get2();
+
+ GridTestUtils.runAsync(() -> {
+ String createIdxSql = "CREATE INDEX " + INDEX_NAME + " ON " + TABLE + "(" + COLUMN3_NAME + ")";
+
+ cache1.query(new SqlFieldsQuery(createIdxSql)).getAll();
+
+ String selectIdxSql = "select * from information_schema.indexes where index_name='" + INDEX_NAME + "'";
+
+ List<List<?>> all = cache1.query(new SqlFieldsQuery(selectIdxSql)).getAll();
+
+ assertEquals("Index not found", 1, all.size());
+ });
+
+ LongMetric idxBuildCntPartitionsLeft = metrics.findMetric("IndexBuildCountPartitionsLeft");
+
+ assertTrue("Timeout wait start build index",
+ waitForCondition(() -> idxBuildCntPartitionsLeft.value() > 0, 30_000));
+
+ assertTrue("Timeout wait finished build index",
+ waitForCondition(() -> idxBuildCntPartitionsLeft.value() == 0, 30_000));
+ }
+
+ /**
+ * Test number of partitions need to finished indexes rebuilding.
+ * <p>Case:
+ * <ul>
+ * <li>Start cluster, load data with indexes</li>
+ * <li>Kill single node, delete index.bin, start node.</li>
+ * <li>Make sure that index rebuild count is in range of total new index size and 0 and decreasing</li>
+ * <li>Wait until rebuild finished, assert that no index errors</li>
+ * </ul>
+ * </p>
+ */
+ @Test
+ public void testIndexRebuildCountPartitionsLeftInCluster() throws Exception {
+ pds = true;
+
+ Ignite ignite = startGrid(0);
+
+ startGrid(1);
+
+ ignite.cluster().active(true);
+
+ IgniteCache<Object, Object> cache1 = ignite.cache(CACHE_NAME);
+
+ for (int i = 0; i < 100_000; i++) {
+ Long id = (long)i;
- while (!blockingIndexing.isBlock(cacheName2) || !blockingIndexing.isBlock(cacheName3))
- U.sleep(10);
+ BinaryObjectBuilder o = ignite.binary().builder(OBJECT_NAME)
+ .setField(KEY_NAME, id)
+ .setField(COLUMN1_NAME, i / 2)
+ .setField(COLUMN2_NAME, "str" + Integer.toHexString(i));
- MetricRegistry grpMreg = cacheGroupMetrics(0, GROUP_NAME_2).get2();
+ cache1.put(id, o.build());
+ }
- LongMetric indexBuildCountPartitionsLeft = grpMreg.findMetric("IndexBuildCountPartitionsLeft");
+ String consistentId = ignite.cluster().localNode().consistentId().toString();
- assertEquals(parts2 + parts3, indexBuildCountPartitionsLeft.value());
+ stopGrid(0);
- blockingIndexing.stopBlock(cacheName2);
+ File dir = U.resolveWorkDirectory(U.defaultWorkDirectory(), DFLT_STORE_DIR, false);
+
+ IOFileFilter filter = FileFilterUtils.nameFileFilter("index.bin");
+
+ Collection<File> idxBinFiles = FileUtils.listFiles(dir, filter, TrueFileFilter.TRUE);
+
+ for (File indexBin : idxBinFiles)
+ if (indexBin.getAbsolutePath().contains(consistentId))
+ U.delete(indexBin);
- ignite.cache(cacheName2).indexReadyFuture().get(30_000);
+ startGrid(0);
- assertEquals(parts3, indexBuildCountPartitionsLeft.value());
+ MetricRegistry metrics = cacheGroupMetrics(0, GROUP_NAME).get2();
- blockingIndexing.stopBlock(cacheName3);
+ LongMetric idxBuildCntPartitionsLeft = metrics.findMetric("IndexBuildCountPartitionsLeft");
- ignite.cache(cacheName3).indexReadyFuture().get(30_000);
+ assertTrue("Timeout wait start rebuild index",
+ waitForCondition(() -> idxBuildCntPartitionsLeft.value() > 0, 30_000));
- assertEquals(0, indexBuildCountPartitionsLeft.value());
+ assertTrue("Timeout wait finished rebuild index",
+ GridTestUtils.waitForCondition(() -> idxBuildCntPartitionsLeft.value() == 0, 30_000));
}
/**
* Test number of partitions need to finished create indexes.
+ * <p>Case:
+ * <ul>
+ * <li>Start cluster, load data with indexes</li>
+ * <li>Kill single node, create new index, start node.</li>
+ * <li>Make sure that index rebuild count is in range of total new index size and 0 and decreasing</li>
+ * <li>Wait until rebuild finished, assert that no index errors</li>
+ * </ul>
+ * </p>
*/
@Test
- public void testIndexCreateCountPartitionsLeft() throws Exception {
+ public void testIndexCreateCountPartitionsLeftInCluster() throws Exception {
pds = true;
Ignite ignite = startGrid(0);
+ startGrid(1);
+
ignite.cluster().active(true);
IgniteCache<Object, Object> cache1 = ignite.cache(CACHE_NAME);
@@ -216,15 +316,17 @@ public class CacheGroupMetricsWithIndexTest extends CacheGroupMetricsTest {
Long id = (long)i;
BinaryObjectBuilder o = ignite.binary().builder(OBJECT_NAME)
- .setField(KEY_NAME, id)
- .setField(COLUMN1_NAME, i / 2)
- .setField(COLUMN2_NAME, "str" + Integer.toHexString(i))
- .setField(COLUMN3_NAME, id * 10);
+ .setField(KEY_NAME, id)
+ .setField(COLUMN1_NAME, i / 2)
+ .setField(COLUMN2_NAME, "str" + Integer.toHexString(i))
+ .setField(COLUMN3_NAME, id * 10);
cache1.put(id, o.build());
}
- MetricRegistry grpMreg = cacheGroupMetrics(0, GROUP_NAME).get2();
+ stopGrid(1);
+
+ MetricRegistry metrics = cacheGroupMetrics(0, GROUP_NAME).get2();
GridTestUtils.runAsync(() -> {
String createIdxSql = "CREATE INDEX " + INDEX_NAME + " ON " + TABLE + "(" + COLUMN3_NAME + ")";
@@ -235,15 +337,27 @@ public class CacheGroupMetricsWithIndexTest extends CacheGroupMetricsTest {
List<List<?>> all = cache1.query(new SqlFieldsQuery(selectIdxSql)).getAll();
- Assert.assertEquals("Index not found", 1, all.size());
+ assertEquals("Index not found", 1, all.size());
});
- LongMetric indexBuildCountPartitionsLeft = grpMreg.findMetric("IndexBuildCountPartitionsLeft");
+ final LongMetric idxBuildCntPartitionsLeft0 = metrics.findMetric("IndexBuildCountPartitionsLeft");
+
+ assertTrue("Timeout wait start build index",
+ waitForCondition(() -> idxBuildCntPartitionsLeft0.value() > 0, 30_000));
+
+ assertTrue("Timeout wait finished build index",
+ waitForCondition(() -> idxBuildCntPartitionsLeft0.value() == 0, 30_000));
+
+ startGrid(1);
+
+ metrics = cacheGroupMetrics(1, GROUP_NAME).get2();
+
+ final LongMetric idxBuildCntPartitionsLeft1 = metrics.findMetric("IndexBuildCountPartitionsLeft");
- Assert.assertTrue("Timeout wait start rebuild index",
- waitForCondition(() -> indexBuildCountPartitionsLeft.value() > 0, 30_000));
+ assertTrue("Timeout wait start build index",
+ waitForCondition(() -> idxBuildCntPartitionsLeft1.value() > 0, 30_000));
- Assert.assertTrue("Timeout wait finished rebuild index",
- waitForCondition(() -> indexBuildCountPartitionsLeft.value() == 0, 30_000));
+ assertTrue("Timeout wait finished build index",
+ waitForCondition(() -> idxBuildCntPartitionsLeft1.value() == 0, 30_000));
}
}