Search in sources :

Example 1 with UPDATE

use of org.apache.ignite.cdc.AbstractCdcTest.ChangeEventType.UPDATE in project ignite by apache.

the class CdcSelfTest method testReReadWhenStateWasNotStored.

/**
 */
@Test
public void testReReadWhenStateWasNotStored() throws Exception {
    IgniteEx ign = startGrid(getConfiguration("ignite-0"));
    ign.cluster().state(ACTIVE);
    IgniteCache<Integer, User> cache = ign.getOrCreateCache(DEFAULT_CACHE_NAME);
    addData(cache, 0, KEYS_CNT);
    for (int i = 0; i < 3; i++) {
        UserCdcConsumer cnsmr = new UserCdcConsumer() {

            @Override
            protected boolean commit() {
                return false;
            }
        };
        CdcMain cdc = createCdc(cnsmr, getConfiguration(ign.name()));
        IgniteInternalFuture<?> fut = runAsync(cdc);
        waitForSize(KEYS_CNT, DEFAULT_CACHE_NAME, UPDATE, cnsmr);
        checkMetrics(cdc, KEYS_CNT);
        fut.cancel();
        assertTrue(cnsmr.stopped());
    }
    AtomicBoolean consumeHalf = new AtomicBoolean(true);
    AtomicBoolean halfCommitted = new AtomicBoolean(false);
    int half = KEYS_CNT / 2;
    UserCdcConsumer cnsmr = new UserCdcConsumer() {

        @Override
        public boolean onEvents(Iterator<CdcEvent> evts) {
            if (consumeHalf.get() && F.size(data(UPDATE, cacheId(DEFAULT_CACHE_NAME))) == half) {
                // This means that state committed as a result of the previous call.
                halfCommitted.set(true);
                return false;
            }
            while (evts.hasNext()) {
                CdcEvent evt = evts.next();
                if (!evt.primary())
                    continue;
                data.computeIfAbsent(F.t(evt.value() == null ? DELETE : UPDATE, evt.cacheId()), k -> new ArrayList<>()).add((Integer) evt.key());
                if (consumeHalf.get())
                    return F.size(data(UPDATE, cacheId(DEFAULT_CACHE_NAME))) == half;
            }
            return true;
        }
    };
    CdcMain cdc = createCdc(cnsmr, getConfiguration(ign.name()));
    IgniteInternalFuture<?> fut = runAsync(cdc);
    waitForSize(half, DEFAULT_CACHE_NAME, UPDATE, cnsmr);
    checkMetrics(cdc, half);
    waitForCondition(halfCommitted::get, getTestTimeout());
    fut.cancel();
    assertTrue(cnsmr.stopped());
    removeData(cache, 0, KEYS_CNT);
    consumeHalf.set(false);
    cdc = createCdc(cnsmr, getConfiguration(ign.name()));
    fut = runAsync(cdc);
    waitForSize(KEYS_CNT, DEFAULT_CACHE_NAME, UPDATE, cnsmr);
    waitForSize(KEYS_CNT, DEFAULT_CACHE_NAME, DELETE, cnsmr);
    checkMetrics(cdc, KEYS_CNT * 2 - half);
    fut.cancel();
    assertTrue(cnsmr.stopped());
}
Also used : CacheAtomicityMode(org.apache.ignite.cache.CacheAtomicityMode) IgniteInternalFuture(org.apache.ignite.internal.IgniteInternalFuture) JmxMetricExporterSpi(org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi) GridCacheUtils.cacheId(org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheId) CdcMain(org.apache.ignite.internal.cdc.CdcMain) GridTestUtils.waitForCondition(org.apache.ignite.testframework.GridTestUtils.waitForCondition) RunWith(org.junit.runner.RunWith) DELETE(org.apache.ignite.cdc.AbstractCdcTest.ChangeEventType.DELETE) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) IgniteEx(org.apache.ignite.internal.IgniteEx) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) GridTestUtils.runAsync(org.apache.ignite.testframework.GridTestUtils.runAsync) GridAbsPredicate(org.apache.ignite.internal.util.lang.GridAbsPredicate) MetricExporterSpi(org.apache.ignite.spi.metric.MetricExporterSpi) DataStorageConfiguration(org.apache.ignite.configuration.DataStorageConfiguration) EnumSet(java.util.EnumSet) Parameterized(org.junit.runners.Parameterized) ACTIVE(org.apache.ignite.cluster.ClusterState.ACTIVE) WALMode(org.apache.ignite.configuration.WALMode) F(org.apache.ignite.internal.util.typedef.F) Iterator(java.util.Iterator) Collection(java.util.Collection) Test(org.junit.Test) Ignite(org.apache.ignite.Ignite) MILLISECONDS(java.util.concurrent.TimeUnit.MILLISECONDS) IgniteCache(org.apache.ignite.IgniteCache) Serializable(java.io.Serializable) WithSystemProperty(org.apache.ignite.testframework.junits.WithSystemProperty) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) IgniteConfiguration(org.apache.ignite.configuration.IgniteConfiguration) UPDATE(org.apache.ignite.cdc.AbstractCdcTest.ChangeEventType.UPDATE) CacheConfiguration(org.apache.ignite.configuration.CacheConfiguration) Collections(java.util.Collections) IGNITE_DATA_STORAGE_FOLDER_BY_CONSISTENT_ID(org.apache.ignite.IgniteSystemProperties.IGNITE_DATA_STORAGE_FOLDER_BY_CONSISTENT_ID) DataRegionConfiguration(org.apache.ignite.configuration.DataRegionConfiguration) CdcMain(org.apache.ignite.internal.cdc.CdcMain) ArrayList(java.util.ArrayList) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) IgniteEx(org.apache.ignite.internal.IgniteEx) Iterator(java.util.Iterator) Test(org.junit.Test)

Aggregations

Serializable (java.io.Serializable)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 EnumSet (java.util.EnumSet)1 Iterator (java.util.Iterator)1 List (java.util.List)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 MILLISECONDS (java.util.concurrent.TimeUnit.MILLISECONDS)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 Supplier (java.util.function.Supplier)1 Ignite (org.apache.ignite.Ignite)1 IgniteCache (org.apache.ignite.IgniteCache)1 IGNITE_DATA_STORAGE_FOLDER_BY_CONSISTENT_ID (org.apache.ignite.IgniteSystemProperties.IGNITE_DATA_STORAGE_FOLDER_BY_CONSISTENT_ID)1 CacheAtomicityMode (org.apache.ignite.cache.CacheAtomicityMode)1 DELETE (org.apache.ignite.cdc.AbstractCdcTest.ChangeEventType.DELETE)1 UPDATE (org.apache.ignite.cdc.AbstractCdcTest.ChangeEventType.UPDATE)1 ACTIVE (org.apache.ignite.cluster.ClusterState.ACTIVE)1 CacheConfiguration (org.apache.ignite.configuration.CacheConfiguration)1 DataRegionConfiguration (org.apache.ignite.configuration.DataRegionConfiguration)1