Repository: ignite Updated Branches: refs/heads/ignite-5937 44ad70112 -> d4d2c3805
ignite-3478 Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d4d2c380 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d4d2c380 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d4d2c380 Branch: refs/heads/ignite-5937 Commit: d4d2c3805e94f00587d8b412b288c24a7f7bc983 Parents: 44ad701 Author: sboikov <[email protected]> Authored: Wed Oct 4 11:20:57 2017 +0300 Committer: sboikov <[email protected]> Committed: Wed Oct 4 11:20:57 2017 +0300 ---------------------------------------------------------------------- .../cache/IgniteCacheOffheapManagerImpl.java | 4 +- .../cache/persistence/tree/BPlusTree.java | 2 +- .../cache/tree/AbstractDataInnerIO.java | 8 +- .../cache/tree/AbstractDataLeafIO.java | 8 +- .../processors/cache/tree/CacheDataTree.java | 8 +- .../cache/tree/CacheIdAwareDataInnerIO.java | 4 +- .../cache/tree/CacheIdAwareDataLeafIO.java | 4 +- .../processors/cache/tree/DataInnerIO.java | 4 +- .../processors/cache/tree/DataLeafIO.java | 4 +- .../processors/cache/tree/MvccDataInnerIO.java | 4 +- .../processors/cache/tree/MvccDataLeafIO.java | 4 +- .../cache/tree/MvccVersionBasedSearchRow.java | 4 +- .../processors/cache/tree/RowLinkIO.java | 14 ++- .../cache/mvcc/CacheMvccTransactionsTest.java | 90 +++++++++++++------- 14 files changed, 101 insertions(+), 61 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/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 76d9649..eef645d 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 @@ -1648,7 +1648,7 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager CacheDataRow row; if (grp.mvccEnabled()) { - if (false) { + if (true) { row = dataTree.findOneBounded( new MvccSearchRow(cacheId, key, Long.MAX_VALUE, Long.MAX_VALUE), new MvccSearchRow(cacheId, key, 1L, 1L), @@ -1714,7 +1714,7 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager int cacheId = grp.sharedGroup() ? cctx.cacheId() : CU.UNDEFINED_CACHE_ID; - if (false) { + if (true) { MvccVersionBasedSearchRow lower = new MvccVersionBasedSearchRow(cacheId, key, ver); CacheDataRow row = dataTree.findOneBounded( http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java index d570f1e..5836340 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java @@ -4694,7 +4694,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements } if (nextPageId != 0) - lastRow = getRow(io, pageAddr, cnt - 1, x); // Need save last row. + lastRow = getRow(io, pageAddr, cnt - 1, null); // Need save last row. return true; } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataInnerIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataInnerIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataInnerIO.java index 3fc0962..a07d012 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataInnerIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataInnerIO.java @@ -76,8 +76,8 @@ public abstract class AbstractDataInnerIO extends BPlusInnerIO<CacheSearchRow> i long link = getLink(pageAddr, idx); if (storeMvccVersion()) { - long mvccTopVer = getMvccUpdateTopologyVersion(pageAddr, idx); - long mvccCntr = getMvccUpdateCounter(pageAddr, idx); + long mvccTopVer = getMvccCoordinatorVersion(pageAddr, idx); + long mvccCntr = getMvccCounter(pageAddr, idx); return ((CacheDataTree)tree).rowStore().mvccRow(cacheId, hash, @@ -119,8 +119,8 @@ public abstract class AbstractDataInnerIO extends BPlusInnerIO<CacheSearchRow> i } if (storeMvccVersion()) { - long mvccTopVer = rowIo.getMvccUpdateTopologyVersion(srcPageAddr, srcIdx); - long mvcCntr = rowIo.getMvccUpdateCounter(srcPageAddr, srcIdx); + long mvccTopVer = rowIo.getMvccCoordinatorVersion(srcPageAddr, srcIdx); + long mvcCntr = rowIo.getMvccCounter(srcPageAddr, srcIdx); assert mvccTopVer > 0 : mvccTopVer; assert mvcCntr != CacheCoordinatorsProcessor.COUNTER_NA; http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataLeafIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataLeafIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataLeafIO.java index a4eac3e..ef08bec 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataLeafIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/AbstractDataLeafIO.java @@ -94,8 +94,8 @@ public abstract class AbstractDataLeafIO extends BPlusLeafIO<CacheSearchRow> imp } if (storeMvccVersion()) { - long mvccUpdateTopVer = ((RowLinkIO)srcIo).getMvccUpdateTopologyVersion(srcPageAddr, srcIdx); - long mvccUpdateCntr = ((RowLinkIO)srcIo).getMvccUpdateCounter(srcPageAddr, srcIdx); + long mvccUpdateTopVer = ((RowLinkIO)srcIo).getMvccCoordinatorVersion(srcPageAddr, srcIdx); + long mvccUpdateCntr = ((RowLinkIO)srcIo).getMvccCounter(srcPageAddr, srcIdx); assert mvccUpdateTopVer >=0 : mvccUpdateCntr; assert mvccUpdateCntr != CacheCoordinatorsProcessor.COUNTER_NA; @@ -114,8 +114,8 @@ public abstract class AbstractDataLeafIO extends BPlusLeafIO<CacheSearchRow> imp long link = getLink(pageAddr, idx); if (storeMvccVersion()) { - long mvccTopVer = getMvccUpdateTopologyVersion(pageAddr, idx); - long mvccCntr = getMvccUpdateCounter(pageAddr, idx); + long mvccTopVer = getMvccCoordinatorVersion(pageAddr, idx); + long mvccCntr = getMvccCounter(pageAddr, idx); return ((CacheDataTree)tree).rowStore().mvccRow(cacheId, hash, http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java index 767c996..a1bfc9b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java @@ -158,14 +158,14 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> { if (cmp != 0 || !grp.mvccEnabled()) return 0; - long mvccCrdVer = io.getMvccUpdateTopologyVersion(pageAddr, idx); + long mvccCrdVer = io.getMvccCoordinatorVersion(pageAddr, idx); cmp = Long.compare(row.mvccCoordinatorVersion(), mvccCrdVer); if (cmp != 0) return cmp; - long mvccCntr = io.getMvccUpdateCounter(pageAddr, idx); + long mvccCntr = io.getMvccCounter(pageAddr, idx); assert row.mvccCounter() != CacheCoordinatorsProcessor.COUNTER_NA; @@ -188,8 +188,8 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> { CacheDataRowAdapter.RowData.FULL; if (grp.mvccEnabled()) { - long mvccTopVer = rowIo.getMvccUpdateTopologyVersion(pageAddr, idx); - long mvccCntr = rowIo.getMvccUpdateCounter(pageAddr, idx); + long mvccTopVer = rowIo.getMvccCoordinatorVersion(pageAddr, idx); + long mvccCntr = rowIo.getMvccCounter(pageAddr, idx); return rowStore.mvccRow(cacheId, hash, link, x, mvccTopVer, mvccCntr); } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataInnerIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataInnerIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataInnerIO.java index fc9d15d..3d02b27 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataInnerIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataInnerIO.java @@ -53,12 +53,12 @@ public final class CacheIdAwareDataInnerIO extends AbstractDataInnerIO { } /** {@inheritDoc} */ - @Override public long getMvccUpdateTopologyVersion(long pageAddr, int idx) { + @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) { return 0; } /** {@inheritDoc} */ - @Override public long getMvccUpdateCounter(long pageAddr, int idx) { + @Override public long getMvccCounter(long pageAddr, int idx) { return CacheCoordinatorsProcessor.COUNTER_NA; } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataLeafIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataLeafIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataLeafIO.java index b328924..58ae9ff 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataLeafIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheIdAwareDataLeafIO.java @@ -53,12 +53,12 @@ public final class CacheIdAwareDataLeafIO extends AbstractDataLeafIO { } /** {@inheritDoc} */ - @Override public long getMvccUpdateTopologyVersion(long pageAddr, int idx) { + @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) { return 0; } /** {@inheritDoc} */ - @Override public long getMvccUpdateCounter(long pageAddr, int idx) { + @Override public long getMvccCounter(long pageAddr, int idx) { return CacheCoordinatorsProcessor.COUNTER_NA; } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataInnerIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataInnerIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataInnerIO.java index 0d424b7..19a5c47 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataInnerIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataInnerIO.java @@ -53,12 +53,12 @@ public final class DataInnerIO extends AbstractDataInnerIO { } /** {@inheritDoc} */ - @Override public long getMvccUpdateTopologyVersion(long pageAddr, int idx) { + @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) { return 0; } /** {@inheritDoc} */ - @Override public long getMvccUpdateCounter(long pageAddr, int idx) { + @Override public long getMvccCounter(long pageAddr, int idx) { return CacheCoordinatorsProcessor.COUNTER_NA; } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataLeafIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataLeafIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataLeafIO.java index ff51bc2..ab10b96 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataLeafIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataLeafIO.java @@ -53,12 +53,12 @@ public final class DataLeafIO extends AbstractDataLeafIO { } /** {@inheritDoc} */ - @Override public long getMvccUpdateTopologyVersion(long pageAddr, int idx) { + @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) { return 0; } /** {@inheritDoc} */ - @Override public long getMvccUpdateCounter(long pageAddr, int idx) { + @Override public long getMvccCounter(long pageAddr, int idx) { return CacheCoordinatorsProcessor.COUNTER_NA; } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataInnerIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataInnerIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataInnerIO.java index 5f4f44c..51a911d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataInnerIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataInnerIO.java @@ -53,12 +53,12 @@ public final class MvccDataInnerIO extends AbstractDataInnerIO { } /** {@inheritDoc} */ - @Override public long getMvccUpdateTopologyVersion(long pageAddr, int idx) { + @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) { return PageUtils.getLong(pageAddr, offset(idx) + 12); } /** {@inheritDoc} */ - @Override public long getMvccUpdateCounter(long pageAddr, int idx) { + @Override public long getMvccCounter(long pageAddr, int idx) { return PageUtils.getLong(pageAddr, offset(idx) + 20); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataLeafIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataLeafIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataLeafIO.java index e7cfca7..84c33a4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataLeafIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataLeafIO.java @@ -53,12 +53,12 @@ public final class MvccDataLeafIO extends AbstractDataLeafIO { } /** {@inheritDoc} */ - @Override public long getMvccUpdateTopologyVersion(long pageAddr, int idx) { + @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) { return PageUtils.getLong(pageAddr, offset(idx) + 12); } /** {@inheritDoc} */ - @Override public long getMvccUpdateCounter(long pageAddr, int idx) { + @Override public long getMvccCounter(long pageAddr, int idx) { return PageUtils.getLong(pageAddr, offset(idx) + 20); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccVersionBasedSearchRow.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccVersionBasedSearchRow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccVersionBasedSearchRow.java index f708ffd..6af2c4c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccVersionBasedSearchRow.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccVersionBasedSearchRow.java @@ -57,10 +57,10 @@ public class MvccVersionBasedSearchRow extends SearchRow implements BPlusTree.Ro RowLinkIO rowIo = (RowLinkIO)io; - if (rowIo.getMvccUpdateTopologyVersion(pageAddr, idx) != ver.coordinatorVersion()) + if (rowIo.getMvccCoordinatorVersion(pageAddr, idx) != ver.coordinatorVersion()) return true; - return !ver.activeTransactions().contains(ver.counter()); // TODO IGNITE-3478 sort active transactions? + return !ver.activeTransactions().contains(rowIo.getMvccCounter(pageAddr, idx)); // TODO IGNITE-3478 sort active transactions? } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/RowLinkIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/RowLinkIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/RowLinkIO.java index 8b341cb..111968d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/RowLinkIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/RowLinkIO.java @@ -42,7 +42,17 @@ public interface RowLinkIO { */ public int getCacheId(long pageAddr, int idx); - public long getMvccUpdateTopologyVersion(long pageAddr, int idx); + /** + * @param pageAddr Page address. + * @param idx Index. + * @return Mvcc coordinator version. + */ + public long getMvccCoordinatorVersion(long pageAddr, int idx); - public long getMvccUpdateCounter(long pageAddr, int idx); + /** + * @param pageAddr Page address. + * @param idx Index. + * @return Mvcc counter. + */ + public long getMvccCounter(long pageAddr, int idx); } http://git-wip-us.apache.org/repos/asf/ignite/blob/d4d2c380/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 7936340..89b3df2 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 @@ -2704,56 +2704,77 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest { fut.get(); - final Integer key = 0; + final int KEYS = 1000; for (int i = 0; i < 10; i++) { - try (Transaction tx = node.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) { - cache.put(key + 1, i); + for (int k = 0; k < KEYS; k++) { + final Integer key = k; - tx.commit(); + try (Transaction tx = node.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) { + cache.put(key, i); + + tx.commit(); + } } } - for (int i = 0; i < 10; i++) { - try (Transaction tx = node.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) { - cache.put(key, i); + for (int k = 0; k < KEYS; k++) { + final Integer key = k; - tx.commit(); - } - } + KeyCacheObject key0 = cctx.toCacheKeyObject(key); - KeyCacheObject key0 = cctx.toCacheKeyObject(key); + List<T2<Object, MvccCounter>> vers = cctx.offheap().mvccAllVersions(cctx, key0); - List<T2<Object, MvccCounter>> vers = cctx.offheap().mvccAllVersions(cctx, key0); + assertEquals(10, vers.size()); - assertEquals(10, vers.size()); + CacheDataRow row = cctx.offheap().read(cctx, key0); - CacheDataRow row = cctx.offheap().read(cctx, key0); + checkRow(cctx, row, key0, vers.get(0).get1()); - checkRow(cctx, row, key0, vers.get(0).get1()); + for (T2<Object, MvccCounter> ver : vers) { + MvccCounter cntr = ver.get2(); - for (T2<Object, MvccCounter> ver : vers) { - MvccCounter cntr = ver.get2(); + MvccCoordinatorVersion readVer = + new MvccCoordinatorVersionResponse(cntr.coordinatorVersion(), cntr.counter(), 0); - MvccCoordinatorVersion readVer = - new MvccCoordinatorVersionResponse(cntr.coordinatorVersion(), cntr.counter(), 0); + row = cctx.offheap().mvccRead(cctx, key0, readVer); - row = cctx.offheap().mvccRead(cctx, key0, readVer); + checkRow(cctx, row, key0, ver.get1()); + } - checkRow(cctx, row, key0, ver.get1()); - } + checkRow(cctx, + cctx.offheap().mvccRead(cctx, key0, version(vers.get(0).get2().coordinatorVersion() + 1, 1)), + key0, + vers.get(0).get1()); + + checkRow(cctx, + cctx.offheap().mvccRead(cctx, key0, version(vers.get(0).get2().coordinatorVersion(), vers.get(0).get2().counter() + 1)), + key0, + vers.get(0).get1()); - checkRow(cctx, - cctx.offheap().mvccRead(cctx, key0, new MvccCoordinatorVersionResponse(vers.get(0).get2().coordinatorVersion() + 1, 1, 0)), - key0, - vers.get(0).get1()); + MvccCoordinatorVersionResponse ver = version(crd.currentCoordinator().coordinatorVersion(), 100000); - checkRow(cctx, - cctx.offheap().mvccRead(cctx, key0, new MvccCoordinatorVersionResponse(vers.get(0).get2().coordinatorVersion(), vers.get(0).get2().counter() + 1, 0)), - key0, - vers.get(0).get1()); + for (int v = 0; v < vers.size(); v++) { + MvccCounter cntr = vers.get(v).get2(); + + ver.addTx(cntr.counter()); + + row = cctx.offheap().mvccRead(cctx, key0, ver); + + if (v == vers.size() - 1) + assertNull(row); + else + checkRow(cctx, row, key0, vers.get(v + 1).get1()); + } + } } + /** + * @param cctx Context. + * @param row Row. + * @param expKey Expected row key. + * @param expVal Expected row value. + */ private void checkRow(GridCacheContext cctx, CacheDataRow row, KeyCacheObject expKey, Object expVal) { assertNotNull(row); assertEquals(expKey, row.key()); @@ -2761,6 +2782,15 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest { } /** + * @param crdVer Coordinator version. + * @param cntr Counter. + * @return Version. + */ + private MvccCoordinatorVersionResponse version(long crdVer, long cntr) { + return new MvccCoordinatorVersionResponse(crdVer, cntr, 0); + } + + /** * @return Cache configurations. */ private List<CacheConfiguration<Object, Object>> cacheConfigurations() {
