use of org.apache.ignite.internal.processors.cache.index.IndexingTestUtils.BreakBuildIndexConsumer in project ignite by apache.
the class ResumeRebuildIndexTest method testErrorFlowIndexRebuildStateStorage.
/**
* Checking the flow in case of an error for {@link IndexBuildStatusStorage}.
*
* @throws Exception If failed.
*/
@Test
public void testErrorFlowIndexRebuildStateStorage() throws Exception {
prepareBeforeNodeStart();
IgniteEx n = startGrid(0);
populate(n.cache(DEFAULT_CACHE_NAME), 1_000);
GridCacheContext<?, ?> cacheCtx = n.cachex(DEFAULT_CACHE_NAME).context();
BreakBuildIndexConsumer breakRebuildIdxConsumer = addBreakRebuildIndexConsumer(n, cacheCtx.name(), 10);
assertTrue(forceRebuildIndexes(n, cacheCtx).isEmpty());
IgniteInternalFuture<?> idxRebFut0 = indexRebuildFuture(n, cacheCtx.cacheId());
assertFalse(indexBuildStatusStorage(n).rebuildCompleted(cacheCtx.name()));
assertNotNull(metaStorageOperation(n, metaStorage -> metaStorage.read(KEY_PREFIX + cacheCtx.name())));
breakRebuildIdxConsumer.startBuildIdxFut.get(getTestTimeout());
breakRebuildIdxConsumer.finishBuildIdxFut.onDone();
assertThrows(log, () -> idxRebFut0.get(getTestTimeout()), Throwable.class, null);
assertTrue(breakRebuildIdxConsumer.visitCnt.get() < 1_000);
forceCheckpoint();
assertFalse(indexBuildStatusStorage(n).rebuildCompleted(cacheCtx.name()));
assertNotNull(metaStorageOperation(n, metaStorage -> metaStorage.read(KEY_PREFIX + cacheCtx.name())));
StopBuildIndexConsumer stopRebuildIdxConsumer = addStopRebuildIndexConsumer(n, cacheCtx.name());
dbMgr(n).enableCheckpoints(false).get(getTestTimeout());
assertTrue(forceRebuildIndexes(n, cacheCtx).isEmpty());
IgniteInternalFuture<?> idxRebFut1 = indexRebuildFuture(n, cacheCtx.cacheId());
assertFalse(indexBuildStatusStorage(n).rebuildCompleted(cacheCtx.name()));
assertNotNull(metaStorageOperation(n, metaStorage -> metaStorage.read(KEY_PREFIX + cacheCtx.name())));
stopRebuildIdxConsumer.startBuildIdxFut.get(getTestTimeout());
stopRebuildIdxConsumer.finishBuildIdxFut.onDone();
idxRebFut1.get(getTestTimeout());
assertEquals(1_000, stopRebuildIdxConsumer.visitCnt.get());
assertTrue(indexBuildStatusStorage(n).rebuildCompleted(cacheCtx.name()));
dbMgr(n).enableCheckpoints(true).get(getTestTimeout());
forceCheckpoint();
assertNull(metaStorageOperation(n, metaStorage -> metaStorage.read(KEY_PREFIX + cacheCtx.name())));
}
use of org.apache.ignite.internal.processors.cache.index.IndexingTestUtils.BreakBuildIndexConsumer in project ignite by apache.
the class AbstractRebuildIndexTest method addBreakIdxCreateConsumer.
/**
* Registering a {@link BreakBuildIndexConsumer} to {@link IgniteH2IndexingEx#addIdxCreateCacheRowConsumer}.
*
* @param n Node.
* @param idxName Index name.
* @param breakCnt Count of rows processed, after which an {@link IgniteCheckedException} will be thrown.
* @return New instance of {@link BreakBuildIndexConsumer}.
*/
protected BreakBuildIndexConsumer addBreakIdxCreateConsumer(IgniteEx n, String idxName, int breakCnt) {
BreakBuildIndexConsumer consumer = new BreakBuildIndexConsumer(getTestTimeout(), (c, r) -> c.visitCnt.get() >= breakCnt);
addIdxCreateCacheRowConsumer(nodeName(n), idxName, consumer);
return consumer;
}
Aggregations