This is an automated email from the ASF dual-hosted git repository.

ascherbakov pushed a commit to branch ignite-2.8.1
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/ignite-2.8.1 by this push:
     new 74cb70d  IGNITE-12795 Fixed exception on atomic backup update. - Fixes 
#7718.
74cb70d is described below

commit 74cb70d83e4ddbc3b1e4e2a806a2c82b07e6ebdc
Author: Alexey Scherbakov <[email protected]>
AuthorDate: Fri Apr 24 12:17:16 2020 +0300

    IGNITE-12795 Fixed exception on atomic backup update. - Fixes #7718.
    
    Signed-off-by: Aleksei Scherbakov <[email protected]>
    (cherry picked from commit 811439cf43b39e0b69889c4c79a808dc15c3cd9f)
---
 .../internal/processors/cache/CacheGroupContext.java     | 16 ++++++++++++++++
 .../processors/cache/IgniteCacheOffheapManagerImpl.java  |  4 ++--
 .../cache/PartitionUpdateCounterDebugWrapper.java        |  5 +++++
 .../cache/transactions/PartitionUpdateCounterTest.java   |  5 ++++-
 4 files changed, 27 insertions(+), 3 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupContext.java
index fe45ae1..9adec6e 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupContext.java
@@ -66,6 +66,7 @@ import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.Nullable;
 
+import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static 
org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
 import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
@@ -181,6 +182,9 @@ public class CacheGroupContext {
     /** Statistics holder to track IO operations for data pages. */
     private final IoStatisticsHolder statHolderData;
 
+    /** */
+    private volatile boolean hasAtomicCaches;
+
     /** Cache group metrics. */
     private final CacheGroupMetricsImpl metrics;
 
@@ -257,6 +261,8 @@ public class CacheGroupContext {
             statHolderIdx = new IoStatisticsHolderIndex(HASH_INDEX, 
cacheOrGroupName(), HASH_PK_IDX_NAME, mmgr);
             statHolderData = new IoStatisticsHolderCache(cacheOrGroupName(), 
grpId, mmgr);
         }
+
+        hasAtomicCaches = ccfg.getAtomicityMode() == ATOMIC;
     }
 
     /**
@@ -358,6 +364,9 @@ public class CacheGroupContext {
 
         if (!drEnabled && cctx.isDrEnabled())
             drEnabled = true;
+
+        if (!hasAtomicCaches)
+            hasAtomicCaches = cctx.config().getAtomicityMode() == ATOMIC;
     }
 
     /**
@@ -1285,6 +1294,13 @@ public class CacheGroupContext {
     }
 
     /**
+     * @return {@code True} if group has atomic caches.
+     */
+    public boolean hasAtomicCaches() {
+        return hasAtomicCaches;
+    }
+
+    /**
      * @return Metrics.
      */
     public CacheGroupMetricsImpl metrics() {
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
index c8abe69..763ae29 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
@@ -1483,8 +1483,8 @@ public class IgniteCacheOffheapManagerImpl implements 
IgniteCacheOffheapManager
             this.dataTree = dataTree;
 
             PartitionUpdateCounter delegate = grp.mvccEnabled() ? new 
PartitionUpdateCounterMvccImpl(grp) :
-                grp.persistenceEnabled() ? new 
PartitionUpdateCounterTrackingImpl(grp) :
-                    new PartitionUpdateCounterVolatileImpl(grp);
+                !grp.persistenceEnabled() || grp.hasAtomicCaches() ? new 
PartitionUpdateCounterVolatileImpl(grp) :
+                    new PartitionUpdateCounterTrackingImpl(grp);
 
             pCntr = 
ctx.logger(PartitionUpdateCounterDebugWrapper.class).isDebugEnabled() ?
                 new PartitionUpdateCounterDebugWrapper(partId, delegate) : 
delegate;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/PartitionUpdateCounterDebugWrapper.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/PartitionUpdateCounterDebugWrapper.java
index 5ce351f..556e329 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/PartitionUpdateCounterDebugWrapper.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/PartitionUpdateCounterDebugWrapper.java
@@ -266,4 +266,9 @@ public class PartitionUpdateCounterDebugWrapper implements 
PartitionUpdateCounte
     @Override public CacheGroupContext context() {
         return delegate.context();
     }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return delegate.toString();
+    }
 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/PartitionUpdateCounterTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/PartitionUpdateCounterTest.java
index 1055152..f13300c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/PartitionUpdateCounterTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/PartitionUpdateCounterTest.java
@@ -404,7 +404,10 @@ public class PartitionUpdateCounterTest extends 
GridCommonAbstractTest {
 
             PartitionUpdateCounter cntr = counter(0, grid0.name());
 
-            assertTrue(cntr instanceof PartitionUpdateCounterTrackingImpl);
+            if (mode == CacheAtomicityMode.TRANSACTIONAL)
+                assertTrue(cntr instanceof PartitionUpdateCounterTrackingImpl);
+            else if (mode == CacheAtomicityMode.ATOMIC)
+                assertTrue(cntr instanceof PartitionUpdateCounterVolatileImpl);
 
             assertEquals(cntr.initial(), cntr.get());
         }

Reply via email to