You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Maxim Muzafarov (Jira)" <ji...@apache.org> on 2019/10/02 15:47:02 UTC
[jira] [Updated] (IGNITE-10088) Partition is restored in moving
state instead of owning if node restarted before first checkpoint.
[ https://issues.apache.org/jira/browse/IGNITE-10088?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Maxim Muzafarov updated IGNITE-10088:
-------------------------------------
Fix Version/s: (was: 2.8)
> Partition is restored in moving state instead of owning if node restarted before first checkpoint.
> --------------------------------------------------------------------------------------------------
>
> Key: IGNITE-10088
> URL: https://issues.apache.org/jira/browse/IGNITE-10088
> Project: Ignite
> Issue Type: Bug
> Reporter: Alexei Scherbakov
> Priority: Minor
>
> This is due to org.apache.ignite.internal.processors.cache.persistence.file.FilePageStore#exists returning false when called from restorePartitionStates if not enough data was written to store due to checkpoint.
> Reproducer:
> {noformat}
> package org.apache.ignite.internal.processors.cache.transactions;
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Map;
> import java.util.Set;
> import org.apache.ignite.IgniteDataStreamer;
> import org.apache.ignite.IgniteSystemProperties;
> import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
> import org.apache.ignite.cluster.ClusterNode;
> import org.apache.ignite.configuration.CacheConfiguration;
> import org.apache.ignite.configuration.DataRegionConfiguration;
> import org.apache.ignite.configuration.DataStorageConfiguration;
> import org.apache.ignite.configuration.IgniteConfiguration;
> import org.apache.ignite.failure.StopNodeFailureHandler;
> import org.apache.ignite.failure.StopNodeOrHaltFailureHandler;
> import org.apache.ignite.internal.IgniteEx;
> import org.apache.ignite.internal.IgniteInternalFuture;
> import org.apache.ignite.internal.TestRecordingCommunicationSpi;
> import org.apache.ignite.internal.managers.communication.GridIoMessage;
> import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxFinishRequest;
> import org.apache.ignite.internal.processors.cache.persistence.db.wal.IgniteWalRebalanceTest;
> import org.apache.ignite.internal.processors.cache.verify.IdleVerifyResultV2;
> import org.apache.ignite.internal.util.typedef.T2;
> import org.apache.ignite.lang.IgniteBiPredicate;
> import org.apache.ignite.lang.IgnitePredicate;
> import org.apache.ignite.plugin.extensions.communication.Message;
> import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
> import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
> import org.apache.ignite.testframework.GridTestUtils;
> import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
> import org.apache.ignite.transactions.Transaction;
> import org.apache.ignite.transactions.TransactionConcurrency;
> import org.apache.ignite.transactions.TransactionIsolation;
> import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
> import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
> import static org.apache.ignite.configuration.WALMode.LOG_ONLY;
> import static org.apache.ignite.testframework.GridTestUtils.runAsync;
> import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
> import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
> /**
> * Test data loss on recovery due to missed partition counter on tx messages reorder.
> */
> public class MovingPartitionAfterRestartNoBLTChangeTest extends GridCommonAbstractTest {
> /** IP finder. */
> private static final TcpDiscoveryVmIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
> /** */
> private static final int GRID_CNT = 2;
> /** */
> private static final int MB = 1024 * 1024;
> /** {@inheritDoc} */
> @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
> IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
> cfg.setConsistentId("node" + igniteInstanceName);
> ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(IP_FINDER);
> boolean client = igniteInstanceName.startsWith("client");
> cfg.setClientMode(client);
> cfg.setDataStorageConfiguration(new DataStorageConfiguration().
> setWalSegmentSize(12 * MB).setWalMode(LOG_ONLY).setPageSize(1024).setCheckpointFrequency(10000000000L).
> setDefaultDataRegionConfiguration(new DataRegionConfiguration().setPersistenceEnabled(true).
> setInitialSize(100 * MB).setMaxSize(100 * MB)));
> if (!client) {
> CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
> ccfg.setAtomicityMode(TRANSACTIONAL);
> ccfg.setBackups(2);
> ccfg.setWriteSynchronizationMode(FULL_SYNC);
> ccfg.setOnheapCacheEnabled(false);
> ccfg.setAffinity(new RendezvousAffinityFunction(false, 1));
> cfg.setCacheConfiguration(ccfg);
> }
> return cfg;
> }
> /** {@inheritDoc} */
> @Override protected void beforeTest() throws Exception {
> super.beforeTest();
> cleanPersistenceDir();
> }
> /** {@inheritDoc} */
> @Override protected void afterTest() throws Exception {
> super.afterTest();
> stopAllGrids();
> cleanPersistenceDir();
> }
> public void testMoving() throws Exception {
> IgniteEx crd = startGrid(0);
> startGrid(1);
> crd.cluster().active(true);
> awaitPartitionMapExchange();
> stopGrid(1);
> awaitPartitionMapExchange();
> startGrid(1); // Will trigger rebalance
> awaitPartitionMapExchange();
> }
> }
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)