Repository: ignite
Updated Branches:
  refs/heads/ignite-3478 880ea9821 -> 6d3edc9cc


ignite-6149


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

Branch: refs/heads/ignite-3478
Commit: 6d3edc9cc63b7c7e9ec124885e9b1b3f6ad322a0
Parents: 880ea98
Author: sboikov <[email protected]>
Authored: Thu Sep 21 11:17:07 2017 +0300
Committer: sboikov <[email protected]>
Committed: Thu Sep 21 11:17:07 2017 +0300

----------------------------------------------------------------------
 .../cache/IgniteCacheOffheapManagerImpl.java    | 24 +++++++++++---------
 .../cache/mvcc/CacheMvccTransactionsTest.java   |  5 ++++
 2 files changed, 18 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/6d3edc9c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
----------------------------------------------------------------------
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 d7be3eb..b13473d 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
@@ -1382,12 +1382,12 @@ public class IgniteCacheOffheapManagerImpl implements 
IgniteCacheOffheapManager
                 boolean first = true;
 
                 while (cur.next()) {
+                    boolean activeTx = false;
+
                     CacheDataRow oldVal = cur.get();
 
                     assert oldVal.link() != 0 : oldVal;
 
-                    boolean activeTx = false;
-
                     if (activeTxs != null && oldVal.mvccCoordinatorVersion() 
== mvccVer.coordinatorVersion() &&
                         activeTxs.contains(oldVal.mvccCounter())) {
                         if (waitTxs == null)
@@ -1400,18 +1400,20 @@ public class IgniteCacheOffheapManagerImpl implements 
IgniteCacheOffheapManager
                         activeTx = true;
                     }
 
-                    // Should not delete oldest version which is less than 
cleanup version.
-                    int cmp = compare(oldVal, mvccVer.coordinatorVersion(), 
mvccVer.cleanupVersion());
+                    if (!activeTx) {
+                        // Should not delete oldest version which is less than 
cleanup version.
+                        int cmp = compare(oldVal, 
mvccVer.coordinatorVersion(), mvccVer.cleanupVersion());
 
-                    if (cmp <= 0) {
-                        if (first)
-                            first = false;
-                        else if (!activeTx) {
-                            boolean rmvd = dataTree.removex(oldVal);
+                        if (cmp <= 0) {
+                            if (first)
+                                first = false;
+                            else {
+                                boolean rmvd = dataTree.removex(oldVal);
 
-                            assert rmvd;
+                                assert rmvd;
 
-                            rowStore.removeRow(oldVal.link());
+                                rowStore.removeRow(oldVal.link());
+                            }
                         }
                     }
                 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/6d3edc9c/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
index 0265519..c50d63c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
@@ -708,6 +708,11 @@ public class CacheMvccTransactionsTest extends 
GridCommonAbstractTest {
      * @throws Exception If failed.
      */
     public void testCleanupWaitsForGet2() throws Exception {
+        /*
+        Simulate case when there are two active transactions modifying the 
same key
+        (it is possible if key lock is released but ack message is delayed), 
and at this moment
+        query is started.
+         */
         testSpi = true;
 
         client = false;

Reply via email to