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;
