Nikolay Izhikov created IGNITE-16523:
----------------------------------------

             Summary: CLONE - All data comited before node stop should become 
available for CDC consumer
                 Key: IGNITE-16523
                 URL: https://issues.apache.org/jira/browse/IGNITE-16523
             Project: Ignite
          Issue Type: Improvement
            Reporter: Nikolay Izhikov
            Assignee: Nikolay Izhikov


Ignite should make sure that all data committed before node stop are available 
to CDC consumer in case graceful shutdown. Basically, this means Ignite should 
execute the current WAL segment archivation on node stop.

Possible test to check it:
{code:java}

    /** */
    @Test
    @Ignore("Not implemented yet")
    public void testReadAfterNodeStop() throws Exception {
        cleanPersistenceDir();

        AtomicInteger cnt = new AtomicInteger();

        TestCDCConsumer cnsmr = new TestCDCConsumer();

        // Restart node several time to make sure we can continue after 
gracefull shutdown.
        for (int restarts = 0; restarts < 2; restarts++) {
            IgniteConfiguration cfg = getConfiguration("ignite-0");

            Ignite ign = startGrid(cfg);

            ign.cluster().state(ACTIVE);

            long startCnt = cnt.get();

            runAsync(() -> {
                IgniteCache<Integer, User> cache = 
ign.getOrCreateCache(DEFAULT_CACHE_NAME);

                while (true) {
                    int key = cnt.getAndIncrement();

                    try {
                        cache.put(key, createUser(key));
                    }
                    catch (Exception e) {
                        cnt.decrementAndGet();

                        throw e;
                    }
                }
            });

            waitForCondition(() -> cnt.get() - startCnt > KEYS_CNT, 
getTestTimeout());

            ign.close();

            ChangeDataCapture cdc = new ChangeDataCapture(cfg, null, 
cdcConfig(cnsmr));

            IgniteInternalFuture<?> fut = runAsync(cdc);

            assertTrue(waitForSize(cnt.get(), DEFAULT_CACHE_NAME, UPDATE, 
getTestTimeout(), cnsmr));

            fut.cancel();

            List<Integer> keys = cnsmr.keys(UPDATE, 
cacheId(DEFAULT_CACHE_NAME));

            assertTrue(cnt.get() <= keys.size());

            for (int i = 0; i < cnt.get(); i++)
                assertTrue(keys.contains(i));
        }
    }

{code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to