Repository: ignite
Updated Branches:
  refs/heads/master 76ad0a4d1 -> 525680c74


IGNITE-10448: MVCC: Fixed NPE on data page eviction. This closes #5704.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/525680c7
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/525680c7
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/525680c7

Branch: refs/heads/master
Commit: 525680c748e9479b02cecbdca1e2ac5d582105ad
Parents: 76ad0a4
Author: rkondakov <kondako...@mail.ru>
Authored: Mon Dec 24 18:42:18 2018 +0300
Committer: Igor Seliverstov <gvvinbl...@gmail.com>
Committed: Mon Dec 24 18:42:18 2018 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheProcessor.java    | 14 +++++++
 .../PageEvictionMultinodeAbstractTest.java      |  4 +-
 .../CacheMvccConfigurationValidationTest.java   | 39 ++++++++++++++++++++
 3 files changed, 55 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/525680c7/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index 6ab5cfe..b919024 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -55,6 +55,7 @@ import org.apache.ignite.cache.store.CacheStore;
 import org.apache.ignite.cache.store.CacheStoreSessionListener;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.DataPageEvictionMode;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.configuration.FileSystemConfiguration;
@@ -539,6 +540,19 @@ public class GridCacheProcessor extends 
GridProcessorAdapter {
 
             assertParameter(cc.getInterceptor() == null,
                 "interceptor cannot be used with TRANSACTIONAL_SNAPSHOT 
atomicity mode");
+
+            // Disable in-memory evictions for mvcc cache. TODO IGNITE-10738
+            String memPlcName = cc.getDataRegionName();
+            DataRegion dataRegion = 
sharedCtx.database().dataRegion(memPlcName);
+
+            if (dataRegion != null && 
!dataRegion.config().isPersistenceEnabled() &&
+                dataRegion.config().getPageEvictionMode() != 
DataPageEvictionMode.DISABLED) {
+                throw new IgniteCheckedException("Data pages evictions cannot 
be used with TRANSACTIONAL_SNAPSHOT " +
+                    "cache atomicity mode for in-memory regions. Please, 
either disable evictions or enable " +
+                    "persistence for data regions with TRANSACTIONAL_SNAPSHOT 
caches. [cacheName=" + cc.getName() +
+                    ", dataRegionName=" + memPlcName + ", pageEvictionMode=" +
+                    dataRegion.config().getPageEvictionMode() + ']');
+            }
         }
 
         if (cc.isWriteBehindEnabled()) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/525680c7/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionMultinodeAbstractTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionMultinodeAbstractTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionMultinodeAbstractTest.java
index 49b54dd..52bb29d 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionMultinodeAbstractTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionMultinodeAbstractTest.java
@@ -25,6 +25,7 @@ import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -96,10 +97,9 @@ public abstract class PageEvictionMultinodeAbstractTest 
extends PageEvictionAbst
     /**
      * @throws Exception If failed.
      */
+    @Ignore("https://issues.apache.org/jira/browse/IGNITE-10738";)
     @Test
     public void testPageEvictionMvcc() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-10448";);
-
         for (int i = 0; i < CACHE_MODES.length; i++) {
             CacheConfiguration<Object, Object> cfg = cacheConfig(
                 "evict" + i, null, CACHE_MODES[i], 
CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT,

http://git-wip-us.apache.org/repos/asf/ignite/blob/525680c7/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java
index b809b25..92ec812 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java
@@ -36,6 +36,7 @@ import 
org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
+import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -48,6 +49,8 @@ import static 
org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static 
org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
 import static org.apache.ignite.cache.CacheMode.LOCAL;
+import static 
org.apache.ignite.configuration.DataPageEvictionMode.RANDOM_2_LRU;
+import static org.apache.ignite.configuration.DataPageEvictionMode.RANDOM_LRU;
 
 /**
  *
@@ -200,6 +203,7 @@ public class CacheMvccConfigurationValidationTest extends 
GridCommonAbstractTest
         DataStorageConfiguration storageCfg = new DataStorageConfiguration();
         DataRegionConfiguration regionCfg = new DataRegionConfiguration();
         regionCfg.setPersistenceEnabled(true);
+        regionCfg.setPageEvictionMode(RANDOM_LRU);
         storageCfg.setDefaultDataRegionConfiguration(regionCfg);
         IgniteConfiguration cfg = getConfiguration("testGrid");
         cfg.setDataStorageConfiguration(storageCfg);
@@ -237,6 +241,41 @@ public class CacheMvccConfigurationValidationTest extends 
GridCommonAbstractTest
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testMvccInMemoryEvictionDisabled() throws Exception {
+        final String memRegName = "in-memory-evictions";
+
+        // Enable in-memory eviction.
+        DataRegionConfiguration regionCfg = new DataRegionConfiguration();
+        regionCfg.setPersistenceEnabled(false);
+        regionCfg.setPageEvictionMode(RANDOM_2_LRU);
+        regionCfg.setName(memRegName);
+
+        DataStorageConfiguration storageCfg = new DataStorageConfiguration();
+        storageCfg.setDefaultDataRegionConfiguration(regionCfg);
+
+        IgniteConfiguration cfg = getConfiguration("testGrid");
+        cfg.setDataStorageConfiguration(storageCfg);
+
+        Ignite node = startGrid(cfg);
+
+        CacheConfiguration ccfg1 = new CacheConfiguration("test1")
+            .setAtomicityMode(TRANSACTIONAL_SNAPSHOT)
+            .setDataRegionName(memRegName);
+
+        try {
+            node.createCache(ccfg1);
+
+            fail("In memory evictions should be disabled for MVCC caches.");
+        }
+        catch (Exception e) {
+            assertTrue(X.getFullStackTrace(e).contains("Data pages evictions 
cannot be used with TRANSACTIONAL_SNAPSHOT"));
+        }
+    }
+
+    /**
      * Test TRANSACTIONAL_SNAPSHOT and near cache.
      *
      * @throws Exception If failed.

Reply via email to