You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/09/08 12:36:01 UTC
[29/36] ignite git commit: ignite-3484
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/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 4b4860b..a365fc5 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
@@ -21,7 +21,7 @@ import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.internal.pagemem.PageUtils;
import org.apache.ignite.internal.processors.cache.CacheGroupContext;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.mvcc.TxMvccVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccUpdateVersion;
import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
import org.apache.ignite.internal.processors.cache.persistence.CacheDataRowAdapter;
import org.apache.ignite.internal.processors.cache.persistence.CacheSearchRow;
@@ -114,7 +114,7 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> {
/** {@inheritDoc} */
@Override protected int compare(BPlusIO<CacheSearchRow> iox, long pageAddr, int idx, CacheSearchRow row)
throws IgniteCheckedException {
- assert !grp.mvccEnabled() || row.mvccUpdateTopologyVersion() != 0 || row.getClass() == SearchRow.class;
+ assert !grp.mvccEnabled() || row.mvccUpdateTopologyVersion() != 0;// || row.getClass() == SearchRow.class;
RowLinkIO io = (RowLinkIO)iox;
@@ -155,7 +155,7 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> {
cmp = compareKeys(row.key(), link);
- if (cmp != 0 || !grp.mvccEnabled() || row.mvccUpdateTopologyVersion() == 0)
+ if (cmp != 0 || !grp.mvccEnabled())
return 0;
long mvccTopVer = io.getMvccUpdateTopologyVersion(pageAddr, idx);
@@ -167,7 +167,7 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> {
long mvccCntr = io.getMvccUpdateCounter(pageAddr, idx);
- assert row.mvccUpdateCounter() != TxMvccVersion.COUNTER_NA;
+ assert row.mvccUpdateCounter() != MvccUpdateVersion.COUNTER_NA;
cmp = Long.compare(row.mvccUpdateCounter(), mvccCntr);
@@ -187,7 +187,14 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> {
(CacheDataRowAdapter.RowData)flags :
CacheDataRowAdapter.RowData.FULL;
- return rowStore.dataRow(cacheId, hash, link, x);
+ if (grp.mvccEnabled()) {
+ long mvccTopVer = rowIo.getMvccUpdateTopologyVersion(pageAddr, idx);
+ long mvccCntr = rowIo.getMvccUpdateCounter(pageAddr, idx);
+
+ return rowStore.mvccRow(cacheId, hash, link, x, mvccTopVer, mvccCntr);
+ }
+ else
+ return rowStore.dataRow(cacheId, hash, link, x);
}
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/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 6922302..45856b8 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
@@ -18,7 +18,7 @@
package org.apache.ignite.internal.processors.cache.tree;
import org.apache.ignite.internal.pagemem.PageUtils;
-import org.apache.ignite.internal.processors.cache.mvcc.TxMvccVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccUpdateVersion;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions;
/**
@@ -59,6 +59,6 @@ public final class CacheIdAwareDataInnerIO extends AbstractDataInnerIO {
/** {@inheritDoc} */
@Override public long getMvccUpdateCounter(long pageAddr, int idx) {
- return TxMvccVersion.COUNTER_NA;
+ return MvccUpdateVersion.COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/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 b57fe94..11d56e0 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
@@ -18,7 +18,7 @@
package org.apache.ignite.internal.processors.cache.tree;
import org.apache.ignite.internal.pagemem.PageUtils;
-import org.apache.ignite.internal.processors.cache.mvcc.TxMvccVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccUpdateVersion;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions;
/**
@@ -59,6 +59,6 @@ public final class CacheIdAwareDataLeafIO extends AbstractDataLeafIO {
/** {@inheritDoc} */
@Override public long getMvccUpdateCounter(long pageAddr, int idx) {
- return TxMvccVersion.COUNTER_NA;
+ return MvccUpdateVersion.COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/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 b070de0..92371a1 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
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.processors.cache.tree;
-import org.apache.ignite.internal.processors.cache.mvcc.TxMvccVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccUpdateVersion;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions;
import org.apache.ignite.internal.util.typedef.internal.CU;
@@ -59,6 +59,6 @@ public final class DataInnerIO extends AbstractDataInnerIO {
/** {@inheritDoc} */
@Override public long getMvccUpdateCounter(long pageAddr, int idx) {
- return TxMvccVersion.COUNTER_NA;
+ return MvccUpdateVersion.COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/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 e992d18..bcf733c 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
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.processors.cache.tree;
-import org.apache.ignite.internal.processors.cache.mvcc.TxMvccVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccUpdateVersion;
import org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions;
import org.apache.ignite.internal.util.typedef.internal.CU;
@@ -59,6 +59,6 @@ public final class DataLeafIO extends AbstractDataLeafIO {
/** {@inheritDoc} */
@Override public long getMvccUpdateCounter(long pageAddr, int idx) {
- return TxMvccVersion.COUNTER_NA;
+ return MvccUpdateVersion.COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
index 484e5f1..d0d6ee1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/MvccDataRow.java
@@ -20,7 +20,7 @@ package org.apache.ignite.internal.processors.cache.tree;
import org.apache.ignite.internal.processors.cache.CacheGroupContext;
import org.apache.ignite.internal.processors.cache.CacheObject;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.mvcc.TxMvccVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccUpdateVersion;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
/**
@@ -46,7 +46,7 @@ public class MvccDataRow extends DataRow {
super(grp, hash, link, part, rowData);
assert mvccTopVer > 0 : mvccTopVer;
- assert mvccCntr != TxMvccVersion.COUNTER_NA;
+ assert mvccCntr != MvccUpdateVersion.COUNTER_NA;
this.mvccTopVer = mvccTopVer;
this.mvccCntr = mvccCntr;
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/SearchRow.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/SearchRow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/SearchRow.java
index d2226ca..b7fa275 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/SearchRow.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/SearchRow.java
@@ -18,7 +18,7 @@
package org.apache.ignite.internal.processors.cache.tree;
import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.mvcc.TxMvccVersion;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccUpdateVersion;
import org.apache.ignite.internal.processors.cache.persistence.CacheSearchRow;
/**
@@ -82,6 +82,6 @@ public class SearchRow implements CacheSearchRow {
/** {@inheritDoc} */
@Override public long mvccUpdateCounter() {
- return TxMvccVersion.COUNTER_NA;
+ return MvccUpdateVersion.COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
index 1cad356..eb8795f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
@@ -27,6 +27,7 @@ import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.cache.eviction.EvictableEntry;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicAbstractUpdateFuture;
+import org.apache.ignite.internal.processors.cache.mvcc.MvccQueryVersion;
import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx;
import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey;
@@ -391,7 +392,7 @@ public class GridCacheTestEntryEx extends GridMetadataAwareAdapter implements Gr
String taskName,
@Nullable IgniteCacheExpiryPolicy expiryPlc,
boolean keepBinary,
- long mvccCntr) {
+ MvccQueryVersion mvccVer) {
return val;
}
@@ -408,7 +409,7 @@ public class GridCacheTestEntryEx extends GridMetadataAwareAdapter implements Gr
String taskName,
@Nullable IgniteCacheExpiryPolicy expiryPlc,
boolean keepBinary,
- long mvccCntr,
+ MvccQueryVersion mvccVer,
@Nullable ReaderArguments args) throws IgniteCheckedException, GridCacheEntryRemovedException {
assert false;
@@ -426,7 +427,7 @@ public class GridCacheTestEntryEx extends GridMetadataAwareAdapter implements Gr
String taskName,
@Nullable IgniteCacheExpiryPolicy expiryPlc,
boolean keepBinary,
- long mvccCntr,
+ MvccQueryVersion mvccVer,
@Nullable ReaderArguments readerArgs) {
assert false;
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/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 4c6b206..e0543b5 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
@@ -26,6 +26,7 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.Callable;
+import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -40,6 +41,9 @@ import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteKernal;
+import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxFinishRequest;
+import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxFinishResponse;
import org.apache.ignite.internal.util.lang.GridInClosure3;
import org.apache.ignite.internal.util.typedef.CI1;
import org.apache.ignite.internal.util.typedef.F;
@@ -63,7 +67,7 @@ import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
/**
- *
+ * TODO IGNITE-3478: extend tests to use single/mutiple nodes, all tx types.
*/
public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
/** */
@@ -75,12 +79,18 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
/** */
private boolean client;
+ /** */
+ private boolean testSpi;
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(gridName);
((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(IP_FINDER);
+ if (testSpi)
+ cfg.setCommunicationSpi(new TestRecordingCommunicationSpi());
+
((TcpCommunicationSpi)cfg.getCommunicationSpi()).setSharedMemoryPort(-1);
cfg.setClientMode(client);
@@ -88,6 +98,13 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
return cfg;
}
+ /** {@inheritDoc} */
+ @Override protected void afterTest() throws Exception {
+ verifyCoordinatorInternalState();
+
+ stopAllGrids();
+ }
+
/**
* @throws Exception If failed.
*/
@@ -206,7 +223,7 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
Ignite ignite = startGrid(SRVS);
- CacheConfiguration ccfg = cacheConfiguration(PARTITIONED, FULL_SYNC, 1);
+ CacheConfiguration ccfg = cacheConfiguration(PARTITIONED, FULL_SYNC, 1, 512);
IgniteCache<Integer, Integer> cache = ignite.createCache(ccfg);
@@ -231,7 +248,7 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
IgniteTransactions txs = node.transactions();
- final IgniteCache<Object, Object> cache = node.createCache(cacheConfiguration(PARTITIONED, FULL_SYNC, 0));
+ final IgniteCache<Object, Object> cache = node.createCache(cacheConfiguration(PARTITIONED, FULL_SYNC, 0, 1));
final int KEYS = 10_000;
@@ -285,6 +302,158 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
/**
* @throws Exception If failed.
*/
+ public void testMyUpdatesAreVisible() throws Exception {
+ final Ignite ignite = startGrid(0);
+
+ final IgniteCache<Object, Object> cache = ignite.createCache(cacheConfiguration(PARTITIONED, FULL_SYNC, 0, 1));
+
+ final int THREADS = Runtime.getRuntime().availableProcessors() * 2;
+
+ final int KEYS = 10;
+
+ final CyclicBarrier b = new CyclicBarrier(THREADS);
+
+ GridTestUtils.runMultiThreaded(new IgniteInClosure<Integer>() {
+ @Override public void apply(Integer idx) {
+ try {
+ int min = idx * KEYS;
+ int max = min + KEYS;
+
+ Set<Integer> keys = new HashSet<>();
+
+ for (int k = min; k < max; k++)
+ keys.add(k);
+
+ b.await();
+
+ for (int i = 0; i < 100; i++) {
+ try (Transaction tx = ignite.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) {
+ for (int k = min; k < max; k++)
+ cache.put(k, i);
+
+ tx.commit();
+ }
+
+ Map<Object, Object> res = cache.getAll(keys);
+
+ for (Integer key : keys)
+ assertEquals(i, res.get(key));
+
+ assertEquals(KEYS, res.size());
+ }
+ }
+ catch (Exception e) {
+ error("Unexpected error: " + e, e);
+
+ fail("Unexpected error: " + e);
+ }
+ }
+ }, THREADS, "test-thread");
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testPartialCommitGetAll() throws Exception {
+ testSpi = true;
+
+ startGrids(2);
+
+ client = true;
+
+ final Ignite ignite = startGrid(3);
+
+ awaitPartitionMapExchange();
+
+ final IgniteCache<Object, Object> cache =
+ ignite.createCache(cacheConfiguration(PARTITIONED, FULL_SYNC, 0, 16));
+
+ final Integer key1 = primaryKey(ignite(0).cache(cache.getName()));
+ final Integer key2 = primaryKey(ignite(1).cache(cache.getName()));
+
+ try (Transaction tx = ignite.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) {
+ cache.put(key1, 1);
+ cache.put(key2, 1);
+
+ tx.commit();
+ }
+
+ Integer val = 1;
+
+ // Allow finish update for key1 and block update for key2.
+
+ TestRecordingCommunicationSpi clientSpi = TestRecordingCommunicationSpi.spi(ignite);
+ TestRecordingCommunicationSpi srvSpi = TestRecordingCommunicationSpi.spi(ignite(0));
+
+ for (int i = 0; i < 10; i++) {
+ info("Iteration: " + i);
+
+ clientSpi.blockMessages(GridNearTxFinishRequest.class, getTestIgniteInstanceName(1));
+
+ srvSpi.record(GridNearTxFinishResponse.class);
+
+ final Integer newVal = val + 1;
+
+ IgniteInternalFuture<?> fut = GridTestUtils.runAsync(new Callable<Void>() {
+ @Override public Void call() throws Exception {
+ try (Transaction tx = ignite.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) {
+ cache.put(key1, newVal);
+ cache.put(key2, newVal);
+
+ tx.commit();
+ }
+
+ return null;
+ }
+ });
+
+ try {
+ srvSpi.waitForRecorded();
+
+ srvSpi.recordedMessages(true);
+
+ assertFalse(fut.isDone());
+
+ if (i % 2 == 1) {
+ // Execute one more update to increase counter.
+ try (Transaction tx = ignite.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) {
+ cache.put(1000_0000, 1);
+
+ tx.commit();
+ }
+ }
+
+ Set<Integer> keys = new HashSet<>();
+ keys.add(key1);
+ keys.add(key2);
+
+ Map<Object, Object> res;
+
+ res = cache.getAll(keys);
+
+ assertEquals(val, res.get(key1));
+ assertEquals(val, res.get(key2));
+
+ clientSpi.stopBlock(true);
+
+ fut.get();
+
+ res = cache.getAll(keys);
+
+ assertEquals(newVal, res.get(key1));
+ assertEquals(newVal, res.get(key2));
+
+ val = newVal;
+ }
+ finally {
+ clientSpi.stopBlock(true);
+ }
+ }
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
public void testPutAllGetAll() throws Exception {
final int RANGE = 20;
@@ -392,16 +561,16 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
/**
* @throws Exception If failed.
*/
- public void testAccountsSumGetAll() throws Exception {
+ public void testAccountsTxGetAll() throws Exception {
final int ACCOUNTS = 20;
final int ACCOUNT_START_VAL = 1000;
final long time = 10_000;
- final int writers = 1;
+ final int writers = 4;
- final int readers = 1;
+ final int readers = 4;
final IgniteInClosure<IgniteCache<Object, Object>> init = new IgniteInClosure<IgniteCache<Object, Object>>() {
@Override public void apply(IgniteCache<Object, Object> cache) {
@@ -432,13 +601,13 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
while (!stop.get()) {
cnt++;
- try (Transaction tx = txs.txStart(PESSIMISTIC, REPEATABLE_READ)) {
- Integer id1 = rnd.nextInt(ACCOUNTS);
- Integer id2 = rnd.nextInt(ACCOUNTS);
+ Integer id1 = rnd.nextInt(ACCOUNTS);
+ Integer id2 = rnd.nextInt(ACCOUNTS);
- if (id1.equals(id2))
- continue;
+ while (id1.equals(id2))
+ id2 = rnd.nextInt(ACCOUNTS);
+ try (Transaction tx = txs.txStart(PESSIMISTIC, REPEATABLE_READ)) {
Account a1;
Account a2;
@@ -450,7 +619,7 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
Map<Object, Object> accounts = cache.getAll(keys);
a1 = (Account)accounts.get(id1);
- a2 = (Account)accounts.get(id1);
+ a2 = (Account)accounts.get(id2);
assertNotNull(a1);
assertNotNull(a2);
@@ -519,6 +688,7 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
* @param time Test time.
* @param writers Number of writers.
* @param readers Number of readers.
+ * @param init Optional init closure.
* @param writer Writers threads closure.
* @param reader Readers threads closure.
* @throws Exception If failed.
@@ -531,7 +701,7 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
final GridInClosure3<Integer, IgniteCache<Object, Object>, AtomicBoolean> reader) throws Exception {
final Ignite ignite = startGrid(0);
- final IgniteCache<Object, Object> cache = ignite.createCache(cacheConfiguration(PARTITIONED, FULL_SYNC, 0));
+ final IgniteCache<Object, Object> cache = ignite.createCache(cacheConfiguration(PARTITIONED, FULL_SYNC, 0, 1));
if (init != null)
init.apply(cache);
@@ -602,10 +772,10 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
private List<CacheConfiguration<Object, Object>> cacheConfigurations() {
List<CacheConfiguration<Object, Object>> ccfgs = new ArrayList<>();
- ccfgs.add(cacheConfiguration(PARTITIONED, FULL_SYNC, 0));
- ccfgs.add(cacheConfiguration(PARTITIONED, FULL_SYNC, 1));
- ccfgs.add(cacheConfiguration(PARTITIONED, FULL_SYNC, 2));
- ccfgs.add(cacheConfiguration(REPLICATED, FULL_SYNC, 0));
+ ccfgs.add(cacheConfiguration(PARTITIONED, FULL_SYNC, 0, RendezvousAffinityFunction.DFLT_PARTITION_COUNT));
+ ccfgs.add(cacheConfiguration(PARTITIONED, FULL_SYNC, 1, RendezvousAffinityFunction.DFLT_PARTITION_COUNT));
+ ccfgs.add(cacheConfiguration(PARTITIONED, FULL_SYNC, 2, RendezvousAffinityFunction.DFLT_PARTITION_COUNT));
+ ccfgs.add(cacheConfiguration(REPLICATED, FULL_SYNC, 0, RendezvousAffinityFunction.DFLT_PARTITION_COUNT));
return ccfgs;
}
@@ -646,19 +816,21 @@ public class CacheMvccTransactionsTest extends GridCommonAbstractTest {
* @param cacheMode Cache mode.
* @param syncMode Write synchronization mode.
* @param backups Number of backups.
+ * @param parts Number of partitions.
* @return Cache configuration.
*/
private CacheConfiguration<Object, Object> cacheConfiguration(
CacheMode cacheMode,
CacheWriteSynchronizationMode syncMode,
- int backups) {
+ int backups,
+ int parts) {
CacheConfiguration<Object, Object> ccfg = new CacheConfiguration<>(DEFAULT_CACHE_NAME);
ccfg.setCacheMode(cacheMode);
ccfg.setAtomicityMode(TRANSACTIONAL);
ccfg.setWriteSynchronizationMode(syncMode);
ccfg.setMvccEnabled(true);
- ccfg.setAffinity(new RendezvousAffinityFunction(false, 1));
+ ccfg.setAffinity(new RendezvousAffinityFunction(false, parts));
if (cacheMode == PARTITIONED)
ccfg.setBackups(backups);
http://git-wip-us.apache.org/repos/asf/ignite/blob/e40b4d9d/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java
index bd64bce..e3144b3 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java
@@ -179,4 +179,14 @@ public abstract class GridH2Row implements GridSearchRowPointer, CacheDataRow, R
@Override public int cacheId() {
return 0;
}
+
+ /** {@inheritDoc} */
+ @Override public long mvccUpdateTopologyVersion() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
+ @Override public long mvccUpdateCounter() {
+ throw new UnsupportedOperationException();
+ }
}
\ No newline at end of file