You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dg...@apache.org on 2019/03/13 08:13:19 UTC
[ignite] branch master updated: IGNITE-11532 Fix partition loss
policy is not handled properly for implicit single key transactions - Fixes
#6259.
This is an automated email from the ASF dual-hosted git repository.
dgovorukhin 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 e623f4f IGNITE-11532 Fix partition loss policy is not handled properly for implicit single key transactions - Fixes #6259.
e623f4f is described below
commit e623f4f50823cc90b1552dfbb1e06ba6409ec976
Author: ipavlukhin <vo...@gmail.com>
AuthorDate: Wed Mar 13 11:12:22 2019 +0300
IGNITE-11532 Fix partition loss policy is not handled properly for implicit single key transactions - Fixes #6259.
Signed-off-by: Dmitriy Govorukhin <dm...@gmail.com>
---
.../IgniteTxImplicitSingleStateImpl.java | 10 ++++-
.../IgniteCachePartitionLossPolicySelfTest.java | 46 ++++++++++++++++++++++
2 files changed, 55 insertions(+), 1 deletion(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java
index c5f736a..4978320 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java
@@ -30,6 +30,7 @@ import org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException
import org.apache.ignite.internal.processors.cache.CacheStoppedException;
import org.apache.ignite.internal.processors.cache.GridCacheContext;
import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
+import org.apache.ignite.internal.processors.cache.KeyCacheObject;
import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTopologyFuture;
import org.apache.ignite.internal.processors.cache.store.CacheStoreManager;
import org.apache.ignite.internal.util.GridIntList;
@@ -125,7 +126,14 @@ public class IgniteTxImplicitSingleStateImpl extends IgniteTxLocalStateAdapter {
if (cacheCtx == null)
return null;
- Throwable err = topFut.validateCache(cacheCtx, recovery, read, null, entry);
+ Throwable err = null;
+
+ if (entry != null) {
+ // An entry is a singleton list here, so a key is taken from a first element.
+ KeyCacheObject key = entry.get(0).key();
+
+ err = topFut.validateCache(cacheCtx, recovery, read, key, null);
+ }
if (err != null) {
return new IgniteCheckedException(
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java
index e3930f6..158bdd1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java
@@ -32,6 +32,7 @@ import javax.cache.CacheException;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.PartitionLossPolicy;
import org.apache.ignite.cache.affinity.Affinity;
import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
@@ -56,20 +57,40 @@ import org.apache.ignite.internal.util.typedef.P1;
import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.plugin.extensions.communication.Message;
import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.MvccFeatureChecker;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Ignore;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
+import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
import static org.apache.ignite.cache.CacheMode.PARTITIONED;
import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+import static org.junit.Assume.assumeFalse;
/**
*
*/
+@RunWith(Parameterized.class)
public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTest {
/** */
+ @Parameterized.Parameters(name = "{0}")
+ public static List<Object[]> parameters() {
+ ArrayList<Object[]> params = new ArrayList<>();
+
+ params.add(new Object[]{TRANSACTIONAL});
+
+ if (!MvccFeatureChecker.forcedMvcc())
+ params.add(new Object[]{ATOMIC});
+
+ return params;
+ }
+
+ /** */
private static boolean client;
/** */
@@ -88,6 +109,10 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
/** */
private static boolean isPersistenceEnabled;
+ /** */
+ @Parameterized.Parameter
+ public CacheAtomicityMode atomicity;
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(gridName);
@@ -128,6 +153,7 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
cacheCfg.setWriteSynchronizationMode(FULL_SYNC);
cacheCfg.setPartitionLossPolicy(partLossPlc);
cacheCfg.setAffinity(new RendezvousAffinityFunction(false, 32));
+ cacheCfg.setAtomicityMode(atomicity);
return cacheCfg;
}
@@ -159,6 +185,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadOnlySafe() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_ONLY_SAFE;
checkLostPartition(false, true, killSingleNode);
@@ -181,6 +209,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadOnlyAll() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_ONLY_ALL;
checkLostPartition(false, false, killSingleNode);
@@ -204,6 +234,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadWriteSafe() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_WRITE_SAFE;
checkLostPartition(true, true, killSingleNode);
@@ -226,6 +258,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadWriteAll() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_WRITE_ALL;
checkLostPartition(true, false, killSingleNode);
@@ -249,6 +283,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadWriteSafeAfterKillTwoNodes() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_WRITE_SAFE;
checkLostPartition(true, true, new TopologyChanger(false, asList(3, 2), asList(0, 1, 4), 0));
@@ -271,6 +307,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadWriteSafeAfterKillTwoNodesWithDelay() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_WRITE_SAFE;
checkLostPartition(true, true, new TopologyChanger(false, asList(3, 2), asList(0, 1, 4), 20));
@@ -293,6 +331,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadWriteSafeWithBackupsAfterKillThreeNodes() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_WRITE_SAFE;
backups = 1;
@@ -319,6 +359,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadWriteSafeAfterKillCrd() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_WRITE_SAFE;
checkLostPartition(true, true, new TopologyChanger(true, asList(3, 0), asList(1, 2, 4), 0));
@@ -341,6 +383,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadWriteSafeWithBackups() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_WRITE_SAFE;
backups = 1;
@@ -367,6 +411,8 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
*/
@Test
public void testReadWriteSafeWithBackupsAfterKillCrd() throws Exception {
+ assumeFalse("https://issues.apache.org/jira/browse/IGNITE-11107", MvccFeatureChecker.forcedMvcc());
+
partLossPlc = PartitionLossPolicy.READ_WRITE_SAFE;
backups = 1;