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/10/19 12:32:05 UTC
[1/3] ignite git commit: ignite-5937
Repository: ignite
Updated Branches:
refs/heads/ignite-5937 df707f489 -> 0014b2f6e
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccSqlQueriesTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccSqlQueriesTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccSqlQueriesTest.java
index c14fe65..08b7552 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccSqlQueriesTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccSqlQueriesTest.java
@@ -24,12 +24,16 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.atomic.AtomicBoolean;
+import javax.cache.processor.MutableEntry;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cache.CacheEntryProcessor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.cache.query.SqlQuery;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.internal.util.lang.GridInClosure3;
import org.apache.ignite.internal.util.typedef.internal.S;
import org.apache.ignite.lang.IgniteInClosure;
@@ -38,8 +42,8 @@ import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
/**
* TODO IGNITE-3478: text/spatial indexes with mvcc.
+ * TODO IGNITE-3478: indexingSpi with mvcc.
* TODO IGNITE-3478: dynamic index create.
- * TODO IGNITE-3478: tests with/without inline.
*/
@SuppressWarnings("unchecked")
public class CacheMvccSqlQueriesTest extends CacheMvccAbstractTest {
@@ -47,56 +51,217 @@ public class CacheMvccSqlQueriesTest extends CacheMvccAbstractTest {
* @throws Exception If failed.
*/
public void testAccountsTxSql_SingleNode_SinglePartition() throws Exception {
- accountsTxReadAll(1, 0, 0, 1, new IgniteInClosure<CacheConfiguration>() {
- @Override public void apply(CacheConfiguration ccfg) {
- ccfg.setIndexedTypes(Integer.class, MvccTestAccount.class).setSqlIndexMaxInlineSize(0);
- }
- }, false, ReadMode.SQL_ALL);
+ accountsTxReadAll(1, 0, 0, 1, new InitIndexing(Integer.class, MvccTestAccount.class), false, ReadMode.SQL_ALL);
}
/**
* @throws Exception If failed.
*/
public void testAccountsTxSql_WithRemoves_SingleNode_SinglePartition() throws Exception {
- accountsTxReadAll(1, 0, 0, 1, new IgniteInClosure<CacheConfiguration>() {
- @Override public void apply(CacheConfiguration ccfg) {
- ccfg.setIndexedTypes(Integer.class, MvccTestAccount.class).setSqlIndexMaxInlineSize(0);
- }
- }, true, ReadMode.SQL_ALL);
+ accountsTxReadAll(1, 0, 0, 1, new InitIndexing(Integer.class, MvccTestAccount.class), true, ReadMode.SQL_ALL);
}
/**
* @throws Exception If failed.
*/
public void testAccountsTxSql_SingleNode() throws Exception {
- accountsTxReadAll(1, 0, 0, 64, new IgniteInClosure<CacheConfiguration>() {
- @Override public void apply(CacheConfiguration ccfg) {
- ccfg.setIndexedTypes(Integer.class, MvccTestAccount.class).setSqlIndexMaxInlineSize(0);
- }
- }, false, ReadMode.SQL_ALL);
+ accountsTxReadAll(1, 0, 0, 64, new InitIndexing(Integer.class, MvccTestAccount.class), false, ReadMode.SQL_ALL);
}
/**
* @throws Exception If failed.
*/
public void testAccountsTxSql_WithRemoves_SingleNode() throws Exception {
- accountsTxReadAll(1, 0, 0, 64, new IgniteInClosure<CacheConfiguration>() {
- @Override public void apply(CacheConfiguration ccfg) {
- ccfg.setIndexedTypes(Integer.class, MvccTestAccount.class).setSqlIndexMaxInlineSize(0);
+ accountsTxReadAll(1, 0, 0, 64, new InitIndexing(Integer.class, MvccTestAccount.class), true, ReadMode.SQL_ALL);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testUpdateSingleValue() throws Exception {
+ final int VALS = 100;
+
+ final int writers = 4;
+
+ final int readers = 4;
+
+ final int INC_BY = 110;
+
+ final IgniteInClosure<IgniteCache<Object, Object>> init = new IgniteInClosure<IgniteCache<Object, Object>>() {
+ @Override public void apply(IgniteCache<Object, Object> cache) {
+ Map<Integer, MvccTestSqlIndexValue> vals = new HashMap<>();
+
+ for (int i = 0; i < VALS; i++)
+ vals.put(i, new MvccTestSqlIndexValue(i));
+
+ cache.putAll(vals);
}
- }, true, ReadMode.SQL_ALL);
+ };
+
+ GridInClosure3<Integer, List<TestCache>, AtomicBoolean> writer =
+ new GridInClosure3<Integer, List<TestCache>, AtomicBoolean>() {
+ @Override public void apply(Integer idx, List<TestCache> caches, AtomicBoolean stop) {
+ ThreadLocalRandom rnd = ThreadLocalRandom.current();
+
+ int cnt = 0;
+
+ while (!stop.get()) {
+ TestCache<Integer, MvccTestSqlIndexValue> cache = randomCache(caches, rnd);
+
+ try {
+ Integer key = rnd.nextInt(VALS);
+
+ cache.cache.invoke(key, new CacheEntryProcessor<Integer, MvccTestSqlIndexValue, Object>() {
+ @Override public Object process(MutableEntry<Integer, MvccTestSqlIndexValue> e, Object... args) {
+ Integer key = e.getKey();
+
+ MvccTestSqlIndexValue val = e.getValue();
+
+ int newIdxVal;
+
+ if (val.idxVal1 < INC_BY) {
+ assertEquals(key.intValue(), val.idxVal1);
+
+ newIdxVal = val.idxVal1 + INC_BY;
+ }
+ else {
+ assertEquals(INC_BY + key, val.idxVal1);
+
+ newIdxVal = key;
+ }
+
+ e.setValue(new MvccTestSqlIndexValue(newIdxVal));
+
+ return null;
+ }
+ });
+ }
+ finally {
+ cache.readUnlock();
+ }
+ }
+
+ info("Writer finished, updates: " + cnt);
+ }
+ };
+
+ GridInClosure3<Integer, List<TestCache>, AtomicBoolean> reader =
+ new GridInClosure3<Integer, List<TestCache>, AtomicBoolean>() {
+ @Override public void apply(Integer idx, List<TestCache> caches, AtomicBoolean stop) {
+ ThreadLocalRandom rnd = ThreadLocalRandom.current();
+
+ SqlFieldsQuery[] qrys = new SqlFieldsQuery[3];
+
+ qrys[0] = new SqlFieldsQuery(
+ "select _key, idxVal1 from MvccTestSqlIndexValue where idxVal1=?");
+
+ qrys[1] = new SqlFieldsQuery(
+ "select _key, idxVal1 from MvccTestSqlIndexValue where idxVal1=? or idxVal1=?");
+
+ qrys[2] = new SqlFieldsQuery(
+ "select _key, idxVal1 from MvccTestSqlIndexValue where _key=?");
+
+ while (!stop.get()) {
+ Integer key = rnd.nextInt(VALS);
+
+ int qryIdx = rnd.nextInt(3);
+
+ TestCache<Integer, MvccTestSqlIndexValue> cache = randomCache(caches, rnd);
+
+ List<List<?>> res;
+
+ try {
+ SqlFieldsQuery qry = qrys[qryIdx];
+
+ if (qryIdx == 1)
+ qry.setArgs(key, key + INC_BY);
+ else
+ qry.setArgs(key);
+
+ res = cache.cache.query(qry).getAll();
+ }
+ finally {
+ cache.readUnlock();
+ }
+
+ assertTrue(qryIdx == 0 || !res.isEmpty());
+
+ if (!res.isEmpty()) {
+ assertEquals(1, res.size());
+
+ List<?> resVals = res.get(0);
+
+ Integer key0 = (Integer)resVals.get(0);
+ Integer val0 = (Integer)resVals.get(1);
+
+ assertEquals(key, key0);
+ assertTrue(val0.equals(key) || val0.equals(key + INC_BY));
+ }
+ }
+
+ if (idx == 0) {
+ SqlFieldsQuery qry = new SqlFieldsQuery("select _key, idxVal1 from MvccTestSqlIndexValue");
+
+ TestCache<Integer, MvccTestSqlIndexValue> cache = randomCache(caches, rnd);
+
+ List<List<?>> res;
+
+ try {
+ res = cache.cache.query(qry).getAll();
+ }
+ finally {
+ cache.readUnlock();
+ }
+
+ assertEquals(VALS, res.size());
+
+ for (List<?> vals : res)
+ info("Value: " + vals);
+ }
+ }
+ };
+
+ readWriteTest(
+ null,
+ 1,
+ 0,
+ 0,
+ 32,
+ writers,
+ readers,
+ DFLT_TEST_TIME,
+ new InitIndexing(Integer.class, MvccTestSqlIndexValue.class),
+ init,
+ writer,
+ reader);
}
/**
* @throws Exception If failed.
*/
public void testSqlSimple() throws Exception {
- Ignite srv0 = startGrid(0);
+ startGrid(0);
+
+ for (int i = 0; i < 4; i++)
+ sqlSimple(i * 512);
+
+ ThreadLocalRandom rnd = ThreadLocalRandom.current();
+
+ for (int i = 0; i < 5; i++)
+ sqlSimple(rnd.nextInt(2048));
+ }
+
+ /**
+ * @param inlineSize Inline size.
+ * @throws Exception If failed.
+ */
+ private void sqlSimple(int inlineSize) throws Exception {
+ Ignite srv0 = ignite(0);
IgniteCache<Integer, MvccTestSqlIndexValue> cache = (IgniteCache)srv0.createCache(
cacheConfiguration(PARTITIONED, FULL_SYNC, 0, DFLT_PARTITION_COUNT).
setIndexedTypes(Integer.class, MvccTestSqlIndexValue.class).
- setSqlIndexMaxInlineSize(0));
+ setSqlIndexMaxInlineSize(inlineSize));
Map<Integer, Integer> expVals = new HashMap<>();
@@ -134,18 +299,35 @@ public class CacheMvccSqlQueriesTest extends CacheMvccAbstractTest {
checkValues(expVals, cache);
checkActiveQueriesCleanup(srv0);
+
+ srv0.destroyCache(cache.getName());
}
/**
* @throws Exception If failed.
*/
public void testSqlSimplePutRemoveRandom() throws Exception {
- Ignite srv0 = startGrid(0);
+ startGrid(0);
+
+ testSqlSimplePutRemoveRandom(0);
+
+ ThreadLocalRandom rnd = ThreadLocalRandom.current();
+
+ for (int i = 0; i < 3; i++)
+ testSqlSimplePutRemoveRandom(rnd.nextInt(2048));
+ }
+
+ /**
+ * @param inlineSize Inline size.
+ * @throws Exception If failed.
+ */
+ private void testSqlSimplePutRemoveRandom(int inlineSize) throws Exception {
+ Ignite srv0 = grid(0);
IgniteCache<Integer, MvccTestSqlIndexValue> cache = (IgniteCache) srv0.createCache(
cacheConfiguration(PARTITIONED, FULL_SYNC, 0, DFLT_PARTITION_COUNT).
setIndexedTypes(Integer.class, MvccTestSqlIndexValue.class).
- setSqlIndexMaxInlineSize(0));
+ setSqlIndexMaxInlineSize(inlineSize));
Map<Integer, Integer> expVals = new HashMap<>();
@@ -154,7 +336,7 @@ public class CacheMvccSqlQueriesTest extends CacheMvccAbstractTest {
ThreadLocalRandom rnd = ThreadLocalRandom.current();
- long stopTime = System.currentTimeMillis() + 10_000;
+ long stopTime = System.currentTimeMillis() + 5_000;
for (int i = 0; i < 100_000; i++) {
Integer key = rnd.nextInt(KEYS);
@@ -187,6 +369,8 @@ public class CacheMvccSqlQueriesTest extends CacheMvccAbstractTest {
}
checkActiveQueriesCleanup(srv0);
+
+ srv0.destroyCache(cache.getName());
}
/**
@@ -210,6 +394,12 @@ public class CacheMvccSqlQueriesTest extends CacheMvccAbstractTest {
* @param cache Cache.
*/
private void checkValues(Map<Integer, Integer> expVals, IgniteCache<Integer, MvccTestSqlIndexValue> cache) {
+ SqlFieldsQuery cntQry = new SqlFieldsQuery("select count(*) from MvccTestSqlIndexValue");
+
+ Long cnt = (Long)cache.query(cntQry).getAll().get(0).get(0);
+
+ assertEquals((long)expVals.size(), (Object)cnt);
+
SqlQuery<Integer, MvccTestSqlIndexValue> qry;
qry = new SqlQuery<>(MvccTestSqlIndexValue.class, "true");
@@ -309,4 +499,24 @@ public class CacheMvccSqlQueriesTest extends CacheMvccAbstractTest {
return S.toString(MvccTestSqlIndexValue.class, this);
}
}
+
+ /**
+ *
+ */
+ static class InitIndexing implements IgniteInClosure<CacheConfiguration> {
+ /** */
+ private final Class[] idxTypes;
+
+ /**
+ * @param idxTypes Indexed types.
+ */
+ InitIndexing(Class<?>... idxTypes) {
+ this.idxTypes = idxTypes;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void apply(CacheConfiguration cfg) {
+ cfg.setIndexedTypes(idxTypes);
+ }
+ }
}
[2/3] ignite git commit: ignite-5937
Posted by sb...@apache.org.
ignite-5937
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4abbf601
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4abbf601
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4abbf601
Branch: refs/heads/ignite-5937
Commit: 4abbf60163bc44adb2b0753f6206093bd660ee96
Parents: 5dca77b
Author: sboikov <sb...@gridgain.com>
Authored: Thu Oct 19 11:57:46 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Oct 19 15:30:49 2017 +0300
----------------------------------------------------------------------
.../cache/mvcc/CacheCoordinatorsProcessor.java | 12 +-
.../cache/mvcc/CoordinatorAckRequestTx.java | 2 +-
.../cache/mvcc/PreviousCoordinatorQueries.java | 4 +-
.../cache/persistence/tree/io/IOVersions.java | 7 +
.../cache/persistence/tree/io/PageIO.java | 53 +++-
.../cache/tree/AbstractDataInnerIO.java | 8 +-
.../cache/tree/AbstractDataLeafIO.java | 6 +-
.../processors/cache/tree/CacheDataTree.java | 2 +-
.../cache/tree/CacheIdAwareDataInnerIO.java | 2 +-
.../cache/tree/CacheIdAwareDataLeafIO.java | 2 +-
.../processors/cache/tree/DataInnerIO.java | 2 +-
.../processors/cache/tree/DataLeafIO.java | 2 +-
.../processors/cache/tree/SearchRow.java | 2 +-
.../processors/query/h2/database/H2Tree.java | 44 +++-
.../h2/database/io/AbstractH2ExtrasInnerIO.java | 190 ++++++++++++++
.../h2/database/io/AbstractH2ExtrasLeafIO.java | 187 +++++++++++++
.../query/h2/database/io/AbstractH2InnerIO.java | 58 +----
.../query/h2/database/io/AbstractH2LeafIO.java | 54 +---
.../query/h2/database/io/H2ExtrasInnerIO.java | 116 +--------
.../query/h2/database/io/H2ExtrasLeafIO.java | 112 +-------
.../query/h2/database/io/H2IOUtils.java | 90 +++++++
.../h2/database/io/H2MvccExtrasInnerIO.java | 77 ++++++
.../h2/database/io/H2MvccExtrasLeafIO.java | 76 ++++++
.../query/h2/opt/GridH2KeyValueRowOnheap.java | 2 +-
.../processors/query/h2/opt/GridH2Row.java | 4 +-
.../query/h2/opt/GridH2SearchRowAdapter.java | 2 +-
.../processors/query/h2/opt/GridH2Table.java | 5 +-
.../cache/mvcc/CacheMvccSqlQueriesTest.java | 260 +++++++++++++++++--
28 files changed, 981 insertions(+), 400 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java
index 06d617c..07e30d8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java
@@ -75,7 +75,7 @@ import static org.apache.ignite.internal.managers.communication.GridIoPolicy.SYS
*/
public class CacheCoordinatorsProcessor extends GridProcessorAdapter {
/** */
- public static final long COUNTER_NA = 0L;
+ public static final long MVCC_COUNTER_NA = 0L;
/** */
public static final long MVCC_START_CNTR = 1L;
@@ -154,7 +154,7 @@ public class CacheCoordinatorsProcessor extends GridProcessorAdapter {
*/
public static boolean assertMvccVersionValid(long crdVer, long cntr) {
assert unmaskCoordinatorVersion(crdVer) > 0;
- assert cntr != COUNTER_NA;
+ assert cntr != MVCC_COUNTER_NA;
return true;
}
@@ -663,7 +663,7 @@ public class CacheCoordinatorsProcessor extends GridProcessorAdapter {
private void processCoordinatorTxAckRequest(UUID nodeId, CoordinatorAckRequestTx msg) {
onTxDone(msg.txCounter());
- if (msg.queryCounter() != COUNTER_NA) {
+ if (msg.queryCounter() != MVCC_COUNTER_NA) {
if (msg.queryCoordinatorVersion() == 0)
onQueryDone(nodeId, msg.queryCounter());
else
@@ -836,7 +836,7 @@ public class CacheCoordinatorsProcessor extends GridProcessorAdapter {
else
qryCnt.incrementAndGet();
- res.init(futId, crdVer, mvccCntr, COUNTER_NA);
+ res.init(futId, crdVer, mvccCntr, MVCC_COUNTER_NA);
return res;
}
@@ -921,7 +921,7 @@ public class CacheCoordinatorsProcessor extends GridProcessorAdapter {
// }
// }
//
-// res.init(futId, crdVer, mvccCntr, COUNTER_NA);
+// res.init(futId, crdVer, mvccCntr, MVCC_COUNTER_NA);
//
// return res;
}
@@ -1209,7 +1209,7 @@ public class CacheCoordinatorsProcessor extends GridProcessorAdapter {
* @param res Response.
*/
void onResponse(MvccCoordinatorVersionResponse res) {
- assert res.counter() != COUNTER_NA;
+ assert res.counter() != MVCC_COUNTER_NA;
if (lsnr != null)
lsnr.onMvccResponse(crd.nodeId(), res);
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CoordinatorAckRequestTx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CoordinatorAckRequestTx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CoordinatorAckRequestTx.java
index c0512f0..5ab3d3b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CoordinatorAckRequestTx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CoordinatorAckRequestTx.java
@@ -60,7 +60,7 @@ public class CoordinatorAckRequestTx implements MvccCoordinatorMessage {
/** {@inheritDoc} */
long queryCounter() {
- return CacheCoordinatorsProcessor.COUNTER_NA;
+ return CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/PreviousCoordinatorQueries.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/PreviousCoordinatorQueries.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/PreviousCoordinatorQueries.java
index 5c56f40..521e989 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/PreviousCoordinatorQueries.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/PreviousCoordinatorQueries.java
@@ -26,9 +26,7 @@ import java.util.concurrent.ConcurrentHashMap;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.internal.managers.discovery.DiscoCache;
import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
-import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.CU;
import org.jetbrains.annotations.Nullable;
/**
@@ -165,7 +163,7 @@ class PreviousCoordinatorQueries {
*/
void onQueryDone(UUID nodeId, long crdVer, long cntr) {
assert crdVer != 0;
- assert cntr != CacheCoordinatorsProcessor.COUNTER_NA;
+ assert cntr != CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
synchronized (this) {
MvccCounter mvccCntr = new MvccCounter(crdVer, cntr);
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/IOVersions.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/IOVersions.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/IOVersions.java
index d74d344..9dcad9b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/IOVersions.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/IOVersions.java
@@ -17,6 +17,8 @@
package org.apache.ignite.internal.processors.cache.persistence.tree.io;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
/**
* Registry for IO versions.
*/
@@ -99,4 +101,9 @@ public final class IOVersions<V extends PageIO> {
return res;
}
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(IOVersions.class, this);
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java
index 6267ce0..0a42129 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java
@@ -104,6 +104,12 @@ public abstract class PageIO {
private static List<IOVersions<? extends BPlusLeafIO<?>>> h2ExtraLeafIOs = new ArrayList<>(MAX_PAYLOAD_SIZE);
/** */
+ private static List<IOVersions<? extends BPlusInnerIO<?>>> h2ExtraMvccInnerIOs = new ArrayList<>(MAX_PAYLOAD_SIZE);
+
+ /** */
+ private static List<IOVersions<? extends BPlusLeafIO<?>>> h2ExtraMvccLeafIOs = new ArrayList<>(MAX_PAYLOAD_SIZE);
+
+ /** */
public static final int TYPE_OFF = 0;
/** */
@@ -190,18 +196,30 @@ public abstract class PageIO {
public static final short T_PART_CNTRS = 20;
/** Index for payload == 1. */
- public static final short T_H2_EX_REF_LEAF_START = 10000;
+ public static final short T_H2_EX_REF_LEAF_START = 10_000;
/** */
public static final short T_H2_EX_REF_LEAF_END = T_H2_EX_REF_LEAF_START + MAX_PAYLOAD_SIZE - 1;
/** */
- public static final short T_H2_EX_REF_INNER_START = 20000;
+ public static final short T_H2_EX_REF_INNER_START = 20_000;
/** */
public static final short T_H2_EX_REF_INNER_END = T_H2_EX_REF_INNER_START + MAX_PAYLOAD_SIZE - 1;
/** */
+ public static final short T_H2_EX_REF_MVCC_LEAF_START = 23_000;
+
+ /** */
+ public static final short T_H2_EX_REF_MVCC_LEAF_END = T_H2_EX_REF_MVCC_LEAF_START + MAX_PAYLOAD_SIZE - 1;
+
+ /** */
+ public static final short T_H2_EX_REF_MVCC_INNER_START = 26_000;
+
+ /** */
+ public static final short T_H2_EX_REF_MVCC_INNER_END = T_H2_EX_REF_MVCC_INNER_START + MAX_PAYLOAD_SIZE - 1;
+
+ /** */
public static final short T_DATA_REF_MVCC_INNER = 21;
/** */
@@ -366,8 +384,10 @@ public abstract class PageIO {
*
* @param innerExtIOs Extra versions.
*/
- public static void registerH2ExtraInner(IOVersions<? extends BPlusInnerIO<?>> innerExtIOs) {
- h2ExtraInnerIOs.add(innerExtIOs);
+ public static void registerH2ExtraInner(IOVersions<? extends BPlusInnerIO<?>> innerExtIOs, boolean mvcc) {
+ List<IOVersions<? extends BPlusInnerIO<?>>> ios = mvcc ? h2ExtraMvccInnerIOs : h2ExtraInnerIOs;
+
+ ios.add(innerExtIOs);
}
/**
@@ -375,24 +395,30 @@ public abstract class PageIO {
*
* @param leafExtIOs Extra versions.
*/
- public static void registerH2ExtraLeaf(IOVersions<? extends BPlusLeafIO<?>> leafExtIOs) {
- h2ExtraLeafIOs.add(leafExtIOs);
+ public static void registerH2ExtraLeaf(IOVersions<? extends BPlusLeafIO<?>> leafExtIOs, boolean mvcc) {
+ List<IOVersions<? extends BPlusLeafIO<?>>> ios = mvcc ? h2ExtraMvccLeafIOs : h2ExtraLeafIOs;
+
+ ios.add(leafExtIOs);
}
/**
* @param idx Index.
* @return IOVersions for given idx.
*/
- public static IOVersions<? extends BPlusInnerIO<?>> getInnerVersions(int idx) {
- return h2ExtraInnerIOs.get(idx);
+ public static IOVersions<? extends BPlusInnerIO<?>> getInnerVersions(int idx, boolean mvcc) {
+ List<IOVersions<? extends BPlusInnerIO<?>>> ios = mvcc ? h2ExtraMvccInnerIOs : h2ExtraInnerIOs;
+
+ return ios.get(idx);
}
/**
* @param idx Index.
* @return IOVersions for given idx.
*/
- public static IOVersions<? extends BPlusLeafIO<?>> getLeafVersions(int idx) {
- return h2ExtraLeafIOs.get(idx);
+ public static IOVersions<? extends BPlusLeafIO<?>> getLeafVersions(int idx, boolean mvcc) {
+ List<IOVersions<? extends BPlusLeafIO<?>>> ios = mvcc ? h2ExtraMvccLeafIOs : h2ExtraLeafIOs;
+
+ return ios.get(idx);
}
/**
@@ -511,13 +537,18 @@ public abstract class PageIO {
*/
@SuppressWarnings("unchecked")
public static <Q extends BPlusIO<?>> Q getBPlusIO(int type, int ver) throws IgniteCheckedException {
-
if (type >= T_H2_EX_REF_LEAF_START && type <= T_H2_EX_REF_LEAF_END)
return (Q)h2ExtraLeafIOs.get(type - T_H2_EX_REF_LEAF_START).forVersion(ver);
if (type >= T_H2_EX_REF_INNER_START && type <= T_H2_EX_REF_INNER_END)
return (Q)h2ExtraInnerIOs.get(type - T_H2_EX_REF_INNER_START).forVersion(ver);
+ if (type >= T_H2_EX_REF_MVCC_LEAF_START && type <= T_H2_EX_REF_MVCC_LEAF_END)
+ return (Q)h2ExtraMvccLeafIOs.get(type - T_H2_EX_REF_MVCC_LEAF_START).forVersion(ver);
+
+ if (type >= T_H2_EX_REF_MVCC_INNER_START && type <= T_H2_EX_REF_MVCC_INNER_END)
+ return (Q)h2ExtraMvccInnerIOs.get(type - T_H2_EX_REF_MVCC_INNER_START).forVersion(ver);
+
switch (type) {
case T_H2_REF_INNER:
if (h2InnerIOs == null)
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 31aa2ca..c36d5cb 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
@@ -26,7 +26,7 @@ import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusInne
import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.lang.IgniteInClosure;
-import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.COUNTER_NA;
+import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.unmaskCoordinatorVersion;
/**
@@ -62,7 +62,7 @@ public abstract class AbstractDataInnerIO extends BPlusInnerIO<CacheSearchRow> i
if (storeMvccVersion()) {
assert unmaskCoordinatorVersion(row.mvccCoordinatorVersion()) > 0 : row;
- assert row.mvccCounter() != COUNTER_NA : row;
+ assert row.mvccCounter() != MVCC_COUNTER_NA : row;
PageUtils.putLong(pageAddr, off, row.mvccCoordinatorVersion());
off += 8;
@@ -82,7 +82,7 @@ public abstract class AbstractDataInnerIO extends BPlusInnerIO<CacheSearchRow> i
long mvccCntr = getMvccCounter(pageAddr, idx);
assert unmaskCoordinatorVersion(mvccTopVer) > 0 : mvccTopVer;
- assert mvccCntr != COUNTER_NA;
+ assert mvccCntr != MVCC_COUNTER_NA;
return ((CacheDataTree)tree).rowStore().mvccRow(cacheId,
hash,
@@ -128,7 +128,7 @@ public abstract class AbstractDataInnerIO extends BPlusInnerIO<CacheSearchRow> i
long mvccCntr = rowIo.getMvccCounter(srcPageAddr, srcIdx);
assert unmaskCoordinatorVersion(mvccTopVer) > 0 : mvccTopVer;
- assert mvccCntr != COUNTER_NA;
+ assert mvccCntr != MVCC_COUNTER_NA;
PageUtils.putLong(dstPageAddr, off, mvccTopVer);
off += 8;
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 47d8a6f..d60aef2 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
@@ -26,7 +26,7 @@ import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusLeaf
import org.apache.ignite.internal.util.typedef.internal.CU;
import org.apache.ignite.lang.IgniteInClosure;
-import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.COUNTER_NA;
+import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.unmaskCoordinatorVersion;
/**
@@ -64,7 +64,7 @@ public abstract class AbstractDataLeafIO extends BPlusLeafIO<CacheSearchRow> imp
long mvccUpdateCntr = row.mvccCounter();
assert unmaskCoordinatorVersion(mvccCrdVer) > 0 : mvccCrdVer;
- assert mvccUpdateCntr != COUNTER_NA;
+ assert mvccUpdateCntr != MVCC_COUNTER_NA;
PageUtils.putLong(pageAddr, off, mvccCrdVer);
off += 8;
@@ -100,7 +100,7 @@ public abstract class AbstractDataLeafIO extends BPlusLeafIO<CacheSearchRow> imp
long mvccUpdateCntr = ((RowLinkIO)srcIo).getMvccCounter(srcPageAddr, srcIdx);
assert unmaskCoordinatorVersion(mvccUpdateTopVer) > 0 : mvccUpdateCntr;
- assert mvccUpdateCntr != COUNTER_NA;
+ assert mvccUpdateCntr != MVCC_COUNTER_NA;
PageUtils.putLong(dstPageAddr, off, mvccUpdateTopVer);
off += 8;
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 e8861bd..d4e9eea 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
@@ -169,7 +169,7 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> {
long mvccCntr = io.getMvccCounter(pageAddr, idx);
- assert row.mvccCounter() != CacheCoordinatorsProcessor.COUNTER_NA;
+ assert row.mvccCounter() != CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
cmp = Long.compare(row.mvccCounter(), mvccCntr);
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 3d02b27..36ffd49 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
@@ -59,6 +59,6 @@ public final class CacheIdAwareDataInnerIO extends AbstractDataInnerIO {
/** {@inheritDoc} */
@Override public long getMvccCounter(long pageAddr, int idx) {
- return CacheCoordinatorsProcessor.COUNTER_NA;
+ return CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 58ae9ff..ae6fc0d 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
@@ -59,6 +59,6 @@ public final class CacheIdAwareDataLeafIO extends AbstractDataLeafIO {
/** {@inheritDoc} */
@Override public long getMvccCounter(long pageAddr, int idx) {
- return CacheCoordinatorsProcessor.COUNTER_NA;
+ return CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 19a5c47..98a5450 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
@@ -59,6 +59,6 @@ public final class DataInnerIO extends AbstractDataInnerIO {
/** {@inheritDoc} */
@Override public long getMvccCounter(long pageAddr, int idx) {
- return CacheCoordinatorsProcessor.COUNTER_NA;
+ return CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 ab10b96..b644e6a 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
@@ -59,6 +59,6 @@ public final class DataLeafIO extends AbstractDataLeafIO {
/** {@inheritDoc} */
@Override public long getMvccCounter(long pageAddr, int idx) {
- return CacheCoordinatorsProcessor.COUNTER_NA;
+ return CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 5bdc495..5fd7e8f 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
@@ -83,7 +83,7 @@ public class SearchRow implements CacheSearchRow {
/** {@inheritDoc} */
@Override public long mvccCounter() {
- return CacheCoordinatorsProcessor.COUNTER_NA;
+ return CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java
index f5032eb..03c5c68 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java
@@ -29,6 +29,7 @@ import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusMeta
import org.apache.ignite.internal.processors.cache.persistence.tree.reuse.ReuseList;
import org.apache.ignite.internal.processors.query.h2.database.io.H2ExtrasInnerIO;
import org.apache.ignite.internal.processors.query.h2.database.io.H2ExtrasLeafIO;
+import org.apache.ignite.internal.processors.query.h2.database.io.H2RowLinkIO;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
import org.apache.ignite.internal.util.typedef.internal.S;
@@ -37,7 +38,7 @@ import org.h2.result.SearchRow;
import org.h2.table.IndexColumn;
import org.h2.value.Value;
-import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.COUNTER_NA;
+import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.assertMvccVersionValid;
import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.unmaskCoordinatorVersion;
@@ -206,7 +207,7 @@ public abstract class H2Tree extends BPlusTree<GridH2SearchRow, GridH2Row> {
}
if (lastIdxUsed == cols.length)
- return 0;
+ return mvccCompare((H2RowLinkIO)io, pageAddr, idx, row);
SearchRow rowData = getRow(io, pageAddr, idx);
@@ -218,7 +219,7 @@ public abstract class H2Tree extends BPlusTree<GridH2SearchRow, GridH2Row> {
if (v2 == null) {
// Can't compare further.
- return 0;
+ return mvccCompare((H2RowLinkIO)io, pageAddr, idx, row);
}
Value v1 = rowData.getValue(idx0);
@@ -229,7 +230,7 @@ public abstract class H2Tree extends BPlusTree<GridH2SearchRow, GridH2Row> {
return InlineIndexHelper.fixSort(c, col.sortType);
}
- return 0;
+ return mvccCompare((H2RowLinkIO)io, pageAddr, idx, row);
}
}
@@ -266,6 +267,37 @@ public abstract class H2Tree extends BPlusTree<GridH2SearchRow, GridH2Row> {
return mvccCompare(r1, r2);
}
+ private int mvccCompare(H2RowLinkIO io, long pageAddr, int idx, GridH2SearchRow r2) {
+ int c = 0;
+
+ if (mvccEnabled && !r2.indexSearchRow()) {
+ long crdVer1 = io.getMvccCoordinatorVersion(pageAddr, idx);
+ long crdVer2 = r2.mvccCoordinatorVersion();
+
+ assert crdVer1 != 0;
+ assert crdVer2 != 0 : r2;
+
+ c = Long.compare(unmaskCoordinatorVersion(crdVer1), unmaskCoordinatorVersion(crdVer2));
+
+ if (c != 0)
+ return c;
+
+ long cntr = io.getMvccCounter(pageAddr, idx);
+
+ assert cntr != MVCC_COUNTER_NA;
+ assert r2.mvccCounter() != MVCC_COUNTER_NA : r2;
+
+ c = Long.compare(cntr, r2.mvccCounter());
+ }
+
+ return c;
+ }
+
+ /**
+ * @param r1 First row.
+ * @param r2 Second row.
+ * @return Comparison result.
+ */
private int mvccCompare(GridH2Row r1, GridH2SearchRow r2) {
if (mvccEnabled && !r2.indexSearchRow()) {
long crdVer1 = r1.mvccCoordinatorVersion();
@@ -279,8 +311,8 @@ public abstract class H2Tree extends BPlusTree<GridH2SearchRow, GridH2Row> {
if (c != 0)
return c;
- assert r1.mvccCounter() != COUNTER_NA : r1;
- assert r2.mvccCounter() != COUNTER_NA : r2;
+ assert r1.mvccCounter() != MVCC_COUNTER_NA : r1;
+ assert r2.mvccCounter() != MVCC_COUNTER_NA : r2;
c = Long.compare(r1.mvccCounter(), r2.mvccCounter());
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasInnerIO.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasInnerIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasInnerIO.java
new file mode 100644
index 0000000..550aade
--- /dev/null
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasInnerIO.java
@@ -0,0 +1,190 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.query.h2.database.io;
+
+import java.util.List;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.pagemem.PageUtils;
+import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusInnerIO;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
+import org.apache.ignite.internal.processors.query.h2.database.H2Tree;
+import org.apache.ignite.internal.processors.query.h2.database.InlineIndexHelper;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
+
+import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
+
+/**
+ * Inner page for H2 row references.
+ */
+public abstract class AbstractH2ExtrasInnerIO extends BPlusInnerIO<GridH2SearchRow> implements H2RowLinkIO {
+ /** Payload size. */
+ private final int payloadSize;
+
+ /** */
+ public static void register() {
+ register(false);
+
+ register(true);
+ }
+
+ /**
+ * @param mvcc Mvcc flag.
+ */
+ private static void register(boolean mvcc) {
+ short type = mvcc ? PageIO.T_H2_EX_REF_MVCC_INNER_START : PageIO.T_H2_EX_REF_INNER_START;
+
+ for (short payload = 1; payload <= PageIO.MAX_PAYLOAD_SIZE; payload++) {
+ IOVersions<? extends AbstractH2ExtrasInnerIO> io =
+ getVersions((short)(type + payload - 1), payload, mvcc);
+
+ PageIO.registerH2ExtraInner(io, mvcc);
+ }
+ }
+
+ /**
+ * @param payload Payload size.
+ * @param mvccEnabled Mvcc flag.
+ * @return IOVersions for given payload.
+ */
+ @SuppressWarnings("unchecked")
+ public static IOVersions<? extends BPlusInnerIO<GridH2SearchRow>> getVersions(int payload, boolean mvccEnabled) {
+ assert payload >= 0 && payload <= PageIO.MAX_PAYLOAD_SIZE;
+
+ if (payload == 0)
+ return mvccEnabled ? H2MvccInnerIO.VERSIONS : H2InnerIO.VERSIONS;
+ else
+ return (IOVersions<BPlusInnerIO<GridH2SearchRow>>)PageIO.getInnerVersions((short)(payload - 1), mvccEnabled);
+ }
+
+ /**
+ * @param type Type.
+ * @param payload Payload size.
+ * @param mvcc Mvcc flag.
+ * @return Instance of IO versions.
+ */
+ private static IOVersions<? extends AbstractH2ExtrasInnerIO> getVersions(short type, short payload, boolean mvcc) {
+ return new IOVersions<>(mvcc ? new H2MvccExtrasInnerIO(type, 1, payload) : new H2ExtrasInnerIO(type, 1, payload));
+ }
+
+ /**
+ * @param type Page type.
+ * @param ver Page format version.
+ * @param itemSize Item size.
+ * @param payloadSize Payload size.
+ */
+ AbstractH2ExtrasInnerIO(short type, int ver, int itemSize, int payloadSize) {
+ super(type, ver, true, itemSize + payloadSize);
+
+ this.payloadSize = payloadSize;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("ForLoopReplaceableByForEach")
+ @Override public final void storeByOffset(long pageAddr, int off, GridH2SearchRow row) {
+ GridH2Row row0 = (GridH2Row)row;
+
+ assert row0.link() != 0 : row0;
+
+ List<InlineIndexHelper> inlineIdxs = InlineIndexHelper.getCurrentInlineIndexes();
+
+ assert inlineIdxs != null : "no inline index helpers";
+
+
+ int fieldOff = 0;
+
+ for (int i = 0; i < inlineIdxs.size(); i++) {
+ InlineIndexHelper idx = inlineIdxs.get(i);
+
+ int size = idx.put(pageAddr, off + fieldOff, row.getValue(idx.columnIndex()), payloadSize - fieldOff);
+
+ if (size == 0)
+ break;
+
+ fieldOff += size;
+ }
+
+ H2IOUtils.storeRow(row0, pageAddr, off + payloadSize, storeMvccInfo());
+ }
+
+ /** {@inheritDoc} */
+ @Override public final GridH2SearchRow getLookupRow(BPlusTree<GridH2SearchRow, ?> tree, long pageAddr, int idx)
+ throws IgniteCheckedException {
+ long link = getLink(pageAddr, idx);
+
+ assert link != 0;
+
+ if (storeMvccInfo()) {
+ long mvccCrdVer = getMvccCoordinatorVersion(pageAddr, idx);
+ long mvccCntr = getMvccCounter(pageAddr, idx);
+
+ return ((H2Tree)tree).getRowFactory().getMvccRow(link, mvccCrdVer, mvccCntr);
+ }
+
+ return ((H2Tree)tree).getRowFactory().getRow(link);
+ }
+
+ /** {@inheritDoc} */
+ @Override public final void store(long dstPageAddr, int dstIdx, BPlusIO<GridH2SearchRow> srcIo, long srcPageAddr, int srcIdx) {
+ int srcOff = srcIo.offset(srcIdx);
+
+ byte[] payload = PageUtils.getBytes(srcPageAddr, srcOff, payloadSize);
+ long link = PageUtils.getLong(srcPageAddr, srcOff + payloadSize);
+
+ assert link != 0;
+
+ int dstOff = offset(dstIdx);
+
+ PageUtils.putBytes(dstPageAddr, dstOff, payload);
+
+ H2IOUtils.store(dstPageAddr, dstOff + payloadSize, srcIo, srcPageAddr, srcIdx, storeMvccInfo());
+ }
+
+ /** {@inheritDoc} */
+ @Override public final long getLink(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + payloadSize);
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getMvccCounter(long pageAddr, int idx) {
+ return MVCC_COUNTER_NA;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getNewMvccCoordinatorVersion(long pageAddr, int idx) {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getNewMvccCounter(long pageAddr, int idx) {
+ return MVCC_COUNTER_NA;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean storeMvccInfo() {
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasLeafIO.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasLeafIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasLeafIO.java
new file mode 100644
index 0000000..7beecf2
--- /dev/null
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2ExtrasLeafIO.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.query.h2.database.io;
+
+import java.util.List;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.pagemem.PageUtils;
+import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusLeafIO;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
+import org.apache.ignite.internal.processors.query.h2.database.H2Tree;
+import org.apache.ignite.internal.processors.query.h2.database.InlineIndexHelper;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
+
+import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
+
+/**
+ * Leaf page for H2 row references.
+ */
+public class AbstractH2ExtrasLeafIO extends BPlusLeafIO<GridH2SearchRow> implements H2RowLinkIO {
+ /** Payload size. */
+ private final int payloadSize;
+
+ /** */
+ public static void register() {
+ register(false);
+
+ register(true);
+ }
+
+ /**
+ * @param mvcc Mvcc flag.
+ */
+ private static void register(boolean mvcc) {
+ short type = mvcc ? PageIO.T_H2_EX_REF_MVCC_LEAF_START : PageIO.T_H2_EX_REF_LEAF_START;
+
+ for (short payload = 1; payload <= PageIO.MAX_PAYLOAD_SIZE; payload++) {
+ IOVersions<? extends AbstractH2ExtrasLeafIO> io =
+ getVersions((short)(type + payload - 1), payload, mvcc);
+
+ PageIO.registerH2ExtraLeaf(io, mvcc);
+ }
+ }
+
+ /**
+ * @param payload Payload size.
+ * @param mvccEnabled Mvcc flag.
+ * @return IOVersions for given payload.
+ */
+ @SuppressWarnings("unchecked")
+ public static IOVersions<? extends BPlusLeafIO<GridH2SearchRow>> getVersions(int payload, boolean mvccEnabled) {
+ assert payload >= 0 && payload <= PageIO.MAX_PAYLOAD_SIZE;
+
+ if (payload == 0)
+ return mvccEnabled ? H2MvccLeafIO.VERSIONS : H2LeafIO.VERSIONS;
+ else
+ return (IOVersions<BPlusLeafIO<GridH2SearchRow>>)PageIO.getLeafVersions((short)(payload - 1), mvccEnabled);
+ }
+
+ /**
+ * @param type Type.
+ * @param payload Payload size.
+ * @param mvcc Mvcc flag.
+ * @return Versions.
+ */
+ private static IOVersions<? extends AbstractH2ExtrasLeafIO> getVersions(short type, short payload, boolean mvcc) {
+ return new IOVersions<>(mvcc ? new H2MvccExtrasLeafIO(type, 1, payload) : new H2ExtrasLeafIO(type, 1, payload));
+ }
+
+ /**
+ * @param type Page type.
+ * @param ver Page format version.
+ * @param itemSize Item size.
+ * @param payloadSize Payload size.
+ */
+ AbstractH2ExtrasLeafIO(short type, int ver, int itemSize, int payloadSize) {
+ super(type, ver, itemSize + payloadSize);
+
+ this.payloadSize = payloadSize;
+ }
+
+ /** {@inheritDoc} */
+ @SuppressWarnings("ForLoopReplaceableByForEach")
+ @Override public final void storeByOffset(long pageAddr, int off, GridH2SearchRow row) {
+ GridH2Row row0 = (GridH2Row)row;
+
+ assert row0.link() != 0;
+
+ List<InlineIndexHelper> inlineIdxs = InlineIndexHelper.getCurrentInlineIndexes();
+
+ assert inlineIdxs != null : "no inline index helpers";
+
+ int fieldOff = 0;
+
+ for (int i = 0; i < inlineIdxs.size(); i++) {
+ InlineIndexHelper idx = inlineIdxs.get(i);
+
+ int size = idx.put(pageAddr, off + fieldOff, row.getValue(idx.columnIndex()), payloadSize - fieldOff);
+
+ if (size == 0)
+ break;
+
+ fieldOff += size;
+ }
+
+ H2IOUtils.storeRow(row0, pageAddr, off + payloadSize, storeMvccInfo());
+ }
+
+ /** {@inheritDoc} */
+ @Override public final void store(long dstPageAddr, int dstIdx, BPlusIO<GridH2SearchRow> srcIo, long srcPageAddr, int srcIdx) {
+ int srcOff = srcIo.offset(srcIdx);
+
+ byte[] payload = PageUtils.getBytes(srcPageAddr, srcOff, payloadSize);
+ long link = PageUtils.getLong(srcPageAddr, srcOff + payloadSize);
+
+ assert link != 0;
+
+ int dstOff = offset(dstIdx);
+
+ PageUtils.putBytes(dstPageAddr, dstOff, payload);
+
+ H2IOUtils.store(dstPageAddr, dstOff + payloadSize, srcIo, srcPageAddr, srcIdx, storeMvccInfo());
+ }
+
+ /** {@inheritDoc} */
+ @Override public final GridH2SearchRow getLookupRow(BPlusTree<GridH2SearchRow, ?> tree, long pageAddr, int idx)
+ throws IgniteCheckedException {
+ long link = getLink(pageAddr, idx);
+
+ if (storeMvccInfo()) {
+ long mvccCrdVer = getMvccCoordinatorVersion(pageAddr, idx);
+ long mvccCntr = getMvccCounter(pageAddr, idx);
+
+ return ((H2Tree)tree).getRowFactory().getMvccRow(link, mvccCrdVer, mvccCntr);
+ }
+
+ return ((H2Tree)tree).getRowFactory().getRow(link);
+ }
+
+ /** {@inheritDoc} */
+ @Override public final long getLink(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + payloadSize);
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getMvccCounter(long pageAddr, int idx) {
+ return MVCC_COUNTER_NA;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getNewMvccCoordinatorVersion(long pageAddr, int idx) {
+ return 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getNewMvccCounter(long pageAddr, int idx) {
+ return MVCC_COUNTER_NA;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean storeMvccInfo() {
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2InnerIO.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2InnerIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2InnerIO.java
index bdfbe9c..2f12e75 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2InnerIO.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2InnerIO.java
@@ -26,8 +26,6 @@ import org.apache.ignite.internal.processors.query.h2.database.H2Tree;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
-import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.assertMvccVersionValid;
-
/**
* Inner page for H2 row references.
*/
@@ -50,31 +48,7 @@ public abstract class AbstractH2InnerIO extends BPlusInnerIO<GridH2SearchRow> im
@Override public void storeByOffset(long pageAddr, int off, GridH2SearchRow row) {
GridH2Row row0 = (GridH2Row)row;
- assert row0.link() != 0;
-
- PageUtils.putLong(pageAddr, off, row0.link());
-
- if (storeMvccInfo()) {
- long mvccCrdVer = row.mvccCoordinatorVersion();
- long mvccCntr = row.mvccCounter();
-
- assert assertMvccVersionValid(mvccCrdVer, mvccCntr);
-
- PageUtils.putLong(pageAddr, off + 8, mvccCrdVer);
- PageUtils.putLong(pageAddr, off + 16, mvccCntr);
-
- long newMvccCrdVer = row0.newMvccCoordinatorVersion();
-
- PageUtils.putLong(pageAddr, off + 24, newMvccCrdVer);
-
- if (newMvccCrdVer != 0) {
- long newMvccCntr = row0.newMvccCounter();
-
- assert assertMvccVersionValid(newMvccCrdVer, newMvccCntr);
-
- PageUtils.putLong(pageAddr, off + 32, newMvccCntr);
- }
- }
+ H2IOUtils.storeRow(row0, pageAddr, off, storeMvccInfo());
}
/** {@inheritDoc} */
@@ -94,35 +68,7 @@ public abstract class AbstractH2InnerIO extends BPlusInnerIO<GridH2SearchRow> im
/** {@inheritDoc} */
@Override public void store(long dstPageAddr, int dstIdx, BPlusIO<GridH2SearchRow> srcIo, long srcPageAddr, int srcIdx) {
- H2RowLinkIO rowIo = (H2RowLinkIO)srcIo;
-
- long link = rowIo.getLink(srcPageAddr, srcIdx);
-
- int off = offset(dstIdx);
-
- PageUtils.putLong(dstPageAddr, off, link);
-
- if (storeMvccInfo()) {
- long mvccCrdVer = rowIo.getMvccCoordinatorVersion(srcPageAddr, srcIdx);
- long mvccCntr = rowIo.getMvccCounter(srcPageAddr, srcIdx);
-
- assert assertMvccVersionValid(mvccCrdVer, mvccCntr);
-
- PageUtils.putLong(dstPageAddr, off + 8, mvccCrdVer);
- PageUtils.putLong(dstPageAddr, off + 16, mvccCntr);
-
- long newMvccCrdVer = rowIo.getNewMvccCoordinatorVersion(srcPageAddr, srcIdx);
-
- PageUtils.putLong(dstPageAddr, off + 24, newMvccCrdVer);
-
- if (newMvccCrdVer != 0) {
- long newMvccCntr = rowIo.getNewMvccCounter(srcPageAddr, srcIdx);
-
- assertMvccVersionValid(newMvccCrdVer, newMvccCntr);
-
- PageUtils.putLong(dstPageAddr, off + 32, newMvccCntr);
- }
- }
+ H2IOUtils.store(dstPageAddr, offset(dstIdx), srcIo, srcPageAddr, srcIdx, storeMvccInfo());
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2LeafIO.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2LeafIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2LeafIO.java
index 609c87e..a5cf7c2 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2LeafIO.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/AbstractH2LeafIO.java
@@ -26,8 +26,6 @@ import org.apache.ignite.internal.processors.query.h2.database.H2Tree;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
-import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.assertMvccVersionValid;
-
/**
* Leaf page for H2 row references.
*/
@@ -50,62 +48,14 @@ public abstract class AbstractH2LeafIO extends BPlusLeafIO<GridH2SearchRow> impl
@Override public final void storeByOffset(long pageAddr, int off, GridH2SearchRow row) {
GridH2Row row0 = (GridH2Row)row;
- assert row0.link() != 0;
-
- PageUtils.putLong(pageAddr, off, row0.link());
-
- if (storeMvccInfo()) {
- long mvccCrdVer = row.mvccCoordinatorVersion();
- long mvccCntr = row.mvccCounter();
-
- assert assertMvccVersionValid(mvccCrdVer, mvccCntr);
-
- PageUtils.putLong(pageAddr, off + 8, mvccCrdVer);
- PageUtils.putLong(pageAddr, off + 16, mvccCntr);
-
- long newMvccCrdVer = row0.newMvccCoordinatorVersion();
-
- PageUtils.putLong(pageAddr, off + 24, newMvccCrdVer);
-
- if (newMvccCrdVer != 0) {
- long newMvccCntr = row0.newMvccCounter();
-
- assert assertMvccVersionValid(newMvccCrdVer, newMvccCntr);
-
- PageUtils.putLong(pageAddr, off + 32, newMvccCntr);
- }
- }
+ H2IOUtils.storeRow(row0, pageAddr, off, storeMvccInfo());
}
/** {@inheritDoc} */
@Override public final void store(long dstPageAddr, int dstIdx, BPlusIO<GridH2SearchRow> srcIo, long srcPageAddr, int srcIdx) {
assert srcIo == this;
- int off = offset(dstIdx);
-
- PageUtils.putLong(dstPageAddr, off, getLink(srcPageAddr, srcIdx));
-
- if (storeMvccInfo()) {
- long mvccCrdVer = getMvccCoordinatorVersion(srcPageAddr, srcIdx);
- long mvccCntr = getMvccCounter(srcPageAddr, srcIdx);
-
- assert assertMvccVersionValid(mvccCrdVer, mvccCntr);
-
- PageUtils.putLong(dstPageAddr, off + 8, mvccCrdVer);
- PageUtils.putLong(dstPageAddr, off + 16, mvccCntr);
-
- long newMvccCrdVer = getNewMvccCoordinatorVersion(srcPageAddr, srcIdx);
-
- PageUtils.putLong(dstPageAddr, off + 24, newMvccCrdVer);
-
- if (newMvccCrdVer != 0) {
- long newMvccCntr = getNewMvccCounter(srcPageAddr, srcIdx);
-
- assertMvccVersionValid(newMvccCrdVer, newMvccCntr);
-
- PageUtils.putLong(dstPageAddr, off + 32, newMvccCntr);
- }
- }
+ H2IOUtils.store(dstPageAddr, offset(dstIdx), srcIo, srcPageAddr, srcIdx, storeMvccInfo());
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasInnerIO.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasInnerIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasInnerIO.java
index d7741dc..8dc8c96 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasInnerIO.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasInnerIO.java
@@ -17,125 +17,17 @@
package org.apache.ignite.internal.processors.query.h2.database.io;
-import java.util.List;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.pagemem.PageUtils;
-import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
-import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO;
-import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusInnerIO;
-import org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions;
-import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
-import org.apache.ignite.internal.processors.query.h2.database.H2Tree;
-import org.apache.ignite.internal.processors.query.h2.database.InlineIndexHelper;
-import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
-import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
-
/**
* Inner page for H2 row references.
*/
-public class H2ExtrasInnerIO extends BPlusInnerIO<GridH2SearchRow> {
- /** Payload size. */
- private final int payloadSize;
-
- /** */
- public static void register() {
- for (short payload = 1; payload <= PageIO.MAX_PAYLOAD_SIZE; payload++)
- PageIO.registerH2ExtraInner(getVersions((short)(PageIO.T_H2_EX_REF_INNER_START + payload - 1), payload));
- }
-
- /**
- * @param payload Payload size.
- * @param mvccEnabled Mvcc flag.
- * @return IOVersions for given payload.
- */
- @SuppressWarnings("unchecked")
- public static IOVersions<? extends BPlusInnerIO<GridH2SearchRow>> getVersions(int payload, boolean mvccEnabled) {
- assert payload >= 0 && payload <= PageIO.MAX_PAYLOAD_SIZE;
-
- if (payload == 0)
- return mvccEnabled ? H2MvccInnerIO.VERSIONS : H2InnerIO.VERSIONS;
- else
- return (IOVersions<BPlusInnerIO<GridH2SearchRow>>)PageIO.getInnerVersions((short)(payload - 1));
- }
-
- /**
- * @param type Type.
- * @param payload Payload size.
- * @return Instance of IO versions.
- */
- private static IOVersions<H2ExtrasInnerIO> getVersions(short type, short payload) {
- return new IOVersions<>(new H2ExtrasInnerIO(type, 1, payload));
- }
-
+public class H2ExtrasInnerIO extends AbstractH2ExtrasInnerIO implements H2RowLinkIO {
/**
* @param type Page type.
* @param ver Page format version.
* @param payloadSize Payload size.
*/
- private H2ExtrasInnerIO(short type, int ver, int payloadSize) {
- super(type, ver, true, 8 + payloadSize);
- this.payloadSize = payloadSize;
- }
-
- /** {@inheritDoc} */
- @SuppressWarnings("ForLoopReplaceableByForEach")
- @Override public void storeByOffset(long pageAddr, int off, GridH2SearchRow row) {
- GridH2Row row0 = (GridH2Row)row;
-
- assert row0.link() != 0 : row0;
-
- List<InlineIndexHelper> inlineIdxs = InlineIndexHelper.getCurrentInlineIndexes();
-
- assert inlineIdxs != null : "no inline index helpers";
-
-
- int fieldOff = 0;
-
- for (int i = 0; i < inlineIdxs.size(); i++) {
- InlineIndexHelper idx = inlineIdxs.get(i);
-
- int size = idx.put(pageAddr, off + fieldOff, row.getValue(idx.columnIndex()), payloadSize - fieldOff);
-
- if (size == 0)
- break;
-
- fieldOff += size;
- }
-
- PageUtils.putLong(pageAddr, off + payloadSize, row0.link());
- }
-
- /** {@inheritDoc} */
- @Override public GridH2SearchRow getLookupRow(BPlusTree<GridH2SearchRow, ?> tree, long pageAddr, int idx)
- throws IgniteCheckedException {
- long link = getLink(pageAddr, idx);
-
- assert link != 0;
-
- return ((H2Tree)tree).getRowFactory().getRow(link);
- }
-
- /** {@inheritDoc} */
- @Override public void store(long dstPageAddr, int dstIdx, BPlusIO<GridH2SearchRow> srcIo, long srcPageAddr, int srcIdx) {
- int srcOff = srcIo.offset(srcIdx);
-
- byte[] payload = PageUtils.getBytes(srcPageAddr, srcOff, payloadSize);
- long link = PageUtils.getLong(srcPageAddr, srcOff + payloadSize);
-
- assert link != 0;
-
- int dstOff = offset(dstIdx);
-
- PageUtils.putBytes(dstPageAddr, dstOff, payload);
- PageUtils.putLong(dstPageAddr, dstOff + payloadSize, link);
- }
-
- /**
- * @param pageAddr Page address.
- * @param idx Index.
- * @return Link to row.
- */
- private long getLink(long pageAddr, int idx) {
- return PageUtils.getLong(pageAddr, offset(idx) + payloadSize);
+ H2ExtrasInnerIO(short type, int ver, int payloadSize) {
+ super(type, ver, 8, payloadSize);
}
}
+
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasLeafIO.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasLeafIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasLeafIO.java
index 46d6fd1..085f98b 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasLeafIO.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2ExtrasLeafIO.java
@@ -17,122 +17,16 @@
package org.apache.ignite.internal.processors.query.h2.database.io;
-import java.util.List;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.pagemem.PageUtils;
-import org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree;
-import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO;
-import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusLeafIO;
-import org.apache.ignite.internal.processors.cache.persistence.tree.io.IOVersions;
-import org.apache.ignite.internal.processors.cache.persistence.tree.io.PageIO;
-import org.apache.ignite.internal.processors.query.h2.database.H2Tree;
-import org.apache.ignite.internal.processors.query.h2.database.InlineIndexHelper;
-import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
-import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
-
/**
* Leaf page for H2 row references.
*/
-public class H2ExtrasLeafIO extends BPlusLeafIO<GridH2SearchRow> {
- /** Payload size. */
- private final int payloadSize;
-
- /** */
- public static void register() {
- for (short payload = 1; payload <= PageIO.MAX_PAYLOAD_SIZE; payload++)
- PageIO.registerH2ExtraLeaf(getVersions((short)(PageIO.T_H2_EX_REF_LEAF_START + payload - 1), payload));
- }
-
- /**
- * @param payload Payload size.
- * @param mvccEnabled Mvcc flag.
- * @return IOVersions for given payload.
- */
- @SuppressWarnings("unchecked")
- public static IOVersions<? extends BPlusLeafIO<GridH2SearchRow>> getVersions(int payload, boolean mvccEnabled) {
- assert payload >= 0 && payload <= PageIO.MAX_PAYLOAD_SIZE;
-
- if (payload == 0)
- return mvccEnabled ? H2MvccLeafIO.VERSIONS : H2LeafIO.VERSIONS;
- else
- return (IOVersions<BPlusLeafIO<GridH2SearchRow>>)PageIO.getLeafVersions((short)(payload - 1));
- }
-
- /**
- * @param type Type.
- * @param payload Payload size.
- * @return Versions.
- */
- private static IOVersions<H2ExtrasLeafIO> getVersions(short type, short payload) {
- return new IOVersions<>(new H2ExtrasLeafIO(type, 1, payload));
- }
-
+public class H2ExtrasLeafIO extends AbstractH2ExtrasLeafIO {
/**
* @param type Page type.
* @param ver Page format version.
* @param payloadSize Payload size.
*/
- private H2ExtrasLeafIO(short type, int ver, int payloadSize) {
- super(type, ver, 8 + payloadSize);
- this.payloadSize = payloadSize;
- }
-
- /** {@inheritDoc} */
- @SuppressWarnings("ForLoopReplaceableByForEach")
- @Override public void storeByOffset(long pageAddr, int off, GridH2SearchRow row) {
- GridH2Row row0 = (GridH2Row)row;
-
- assert row0.link() != 0;
-
- List<InlineIndexHelper> inlineIdxs = InlineIndexHelper.getCurrentInlineIndexes();
-
- assert inlineIdxs != null : "no inline index helpers";
-
- int fieldOff = 0;
-
- for (int i = 0; i < inlineIdxs.size(); i++) {
- InlineIndexHelper idx = inlineIdxs.get(i);
-
- int size = idx.put(pageAddr, off + fieldOff, row.getValue(idx.columnIndex()), payloadSize - fieldOff);
-
- if (size == 0)
- break;
-
- fieldOff += size;
- }
-
- PageUtils.putLong(pageAddr, off + payloadSize, row0.link());
- }
-
- /** {@inheritDoc} */
- @Override public void store(long dstPageAddr, int dstIdx, BPlusIO<GridH2SearchRow> srcIo, long srcPageAddr, int srcIdx) {
- int srcOff = srcIo.offset(srcIdx);
-
- byte[] payload = PageUtils.getBytes(srcPageAddr, srcOff, payloadSize);
- long link = PageUtils.getLong(srcPageAddr, srcOff + payloadSize);
-
- assert link != 0;
-
- int dstOff = offset(dstIdx);
-
- PageUtils.putBytes(dstPageAddr, dstOff, payload);
- PageUtils.putLong(dstPageAddr, dstOff + payloadSize, link);
- }
-
- /** {@inheritDoc} */
- @Override public GridH2SearchRow getLookupRow(BPlusTree<GridH2SearchRow, ?> tree, long pageAddr, int idx)
- throws IgniteCheckedException {
- long link = getLink(pageAddr, idx);
-
- return ((H2Tree)tree).getRowFactory().getRow(link);
- }
-
- /**
- * @param pageAddr Page address.
- * @param idx Index.
- * @return Link to row.
- */
- private long getLink(long pageAddr, int idx) {
- return PageUtils.getLong(pageAddr, offset(idx) + payloadSize);
+ H2ExtrasLeafIO(short type, int ver, int payloadSize) {
+ super(type, ver, 8, payloadSize);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2IOUtils.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2IOUtils.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2IOUtils.java
new file mode 100644
index 0000000..54b168d
--- /dev/null
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2IOUtils.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.query.h2.database.io;
+
+import org.apache.ignite.internal.pagemem.PageUtils;
+import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2SearchRow;
+
+import static org.apache.ignite.internal.processors.cache.mvcc.CacheCoordinatorsProcessor.assertMvccVersionValid;
+
+public class H2IOUtils {
+ /**
+ * @param row
+ * @param pageAddr
+ * @param off
+ */
+ static void storeRow(GridH2Row row, long pageAddr, int off, boolean storeMvcc) {
+ assert row.link() != 0;
+
+ PageUtils.putLong(pageAddr, off, row.link());
+
+ if (storeMvcc) {
+ long mvccCrdVer = row.mvccCoordinatorVersion();
+ long mvccCntr = row.mvccCounter();
+
+ assert assertMvccVersionValid(mvccCrdVer, mvccCntr);
+
+ PageUtils.putLong(pageAddr, off + 8, mvccCrdVer);
+ PageUtils.putLong(pageAddr, off + 16, mvccCntr);
+
+ long newMvccCrdVer = row.newMvccCoordinatorVersion();
+
+ PageUtils.putLong(pageAddr, off + 24, newMvccCrdVer);
+
+ if (newMvccCrdVer != 0) {
+ long newMvccCntr = row.newMvccCounter();
+
+ assert assertMvccVersionValid(newMvccCrdVer, newMvccCntr);
+
+ PageUtils.putLong(pageAddr, off + 32, newMvccCntr);
+ }
+ }
+ }
+
+ static void store(long dstPageAddr, int dstOff, BPlusIO<GridH2SearchRow> srcIo, long srcPageAddr, int srcIdx, boolean storeMvcc) {
+ H2RowLinkIO rowIo = (H2RowLinkIO)srcIo;
+
+ long link = rowIo.getLink(srcPageAddr, srcIdx);
+
+ PageUtils.putLong(dstPageAddr, dstOff, link);
+
+ if (storeMvcc) {
+ long mvccCrdVer = rowIo.getMvccCoordinatorVersion(srcPageAddr, srcIdx);
+ long mvccCntr = rowIo.getMvccCounter(srcPageAddr, srcIdx);
+
+ assert assertMvccVersionValid(mvccCrdVer, mvccCntr);
+
+ PageUtils.putLong(dstPageAddr, dstOff + 8, mvccCrdVer);
+ PageUtils.putLong(dstPageAddr, dstOff + 16, mvccCntr);
+
+ long newMvccCrdVer = rowIo.getNewMvccCoordinatorVersion(srcPageAddr, srcIdx);
+
+ PageUtils.putLong(dstPageAddr, dstOff + 24, newMvccCrdVer);
+
+ if (newMvccCrdVer != 0) {
+ long newMvccCntr = rowIo.getNewMvccCounter(srcPageAddr, srcIdx);
+
+ assertMvccVersionValid(newMvccCrdVer, newMvccCntr);
+
+ PageUtils.putLong(dstPageAddr, dstOff + 32, newMvccCntr);
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasInnerIO.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasInnerIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasInnerIO.java
new file mode 100644
index 0000000..fa6978e
--- /dev/null
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasInnerIO.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.query.h2.database.io;
+
+import org.apache.ignite.internal.pagemem.PageUtils;
+
+/**
+ *
+ */
+class H2MvccExtrasInnerIO extends AbstractH2ExtrasInnerIO {
+ /** */
+ private final int crdVerOff;
+
+ /** */
+ private final int cntrOff;
+
+ /** */
+ private final int newCrdVerOff;
+
+ /** */
+ private final int newCntrOff;
+
+ /**
+ * @param type Page type.
+ * @param ver Page format version.
+ * @param payloadSize Payload size.
+ */
+ H2MvccExtrasInnerIO(short type, int ver, int payloadSize) {
+ super(type, ver, 40, payloadSize);
+
+ crdVerOff = payloadSize + 8;
+ cntrOff = payloadSize + 16;
+ newCrdVerOff = payloadSize + 24;
+ newCntrOff = payloadSize + 32;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + crdVerOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getMvccCounter(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + cntrOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getNewMvccCoordinatorVersion(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + newCrdVerOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getNewMvccCounter(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + newCntrOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean storeMvccInfo() {
+ return true;
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasLeafIO.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasLeafIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasLeafIO.java
new file mode 100644
index 0000000..2448e76
--- /dev/null
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2MvccExtrasLeafIO.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.query.h2.database.io;
+
+import org.apache.ignite.internal.pagemem.PageUtils;
+
+/**
+ * Leaf page for H2 row references.
+ */
+class H2MvccExtrasLeafIO extends AbstractH2ExtrasLeafIO {
+ /** */
+ private final int crdVerOff;
+
+ /** */
+ private final int cntrOff;
+
+ /** */
+ private final int newCrdVerOff;
+
+ /** */
+ private final int newCntrOff;
+
+ /**
+ * @param type Page type.
+ * @param ver Page format version.
+ * @param payloadSize Payload size.
+ */
+ H2MvccExtrasLeafIO(short type, int ver, int payloadSize) {
+ super(type, ver, 40, payloadSize);
+
+ crdVerOff = payloadSize + 8;
+ cntrOff = payloadSize + 16;
+ newCrdVerOff = payloadSize + 24;
+ newCntrOff = payloadSize + 32;
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getMvccCoordinatorVersion(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + crdVerOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getMvccCounter(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + cntrOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getNewMvccCoordinatorVersion(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + newCrdVerOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public long getNewMvccCounter(long pageAddr, int idx) {
+ return PageUtils.getLong(pageAddr, offset(idx) + newCntrOff);
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean storeMvccInfo() {
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java
index ba12dd2..62b459a 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java
@@ -98,7 +98,7 @@ public class GridH2KeyValueRowOnheap extends GridH2Row {
/** {@inheritDoc} */
@Override public long newMvccCounter() {
- return newVer != null ? newVer.counter(): CacheCoordinatorsProcessor.COUNTER_NA;
+ return newVer != null ? newVer.counter(): CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/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 3333214..70f0330 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
@@ -107,13 +107,11 @@ public abstract class GridH2Row extends GridH2SearchRowAdapter implements CacheD
return false;
}
- /** {@inheritDoc} */
public long newMvccCoordinatorVersion() {
return 0;
}
- /** {@inheritDoc} */
public long newMvccCounter() {
- return CacheCoordinatorsProcessor.COUNTER_NA;
+ return CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SearchRowAdapter.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SearchRowAdapter.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SearchRowAdapter.java
index 2c05c68..4fc8ee5 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SearchRowAdapter.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SearchRowAdapter.java
@@ -109,6 +109,6 @@ public abstract class GridH2SearchRowAdapter implements GridH2SearchRow {
/** {@inheritDoc} */
@Override public long mvccCounter() {
- return CacheCoordinatorsProcessor.COUNTER_NA;
+ return CacheCoordinatorsProcessor.MVCC_COUNTER_NA;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/4abbf601/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
index c1743af..baa4d92 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
@@ -457,7 +457,7 @@ public class GridH2Table extends TableBase {
*/
@SuppressWarnings("LockAcquiredButNotSafelyReleased")
private boolean doUpdate(final GridH2Row row, boolean del) throws IgniteCheckedException {
- assert !cctx.mvccEnabled() || row.mvccCounter() != CacheCoordinatorsProcessor.COUNTER_NA : row;
+ assert !cctx.mvccEnabled() || row.mvccCounter() != CacheCoordinatorsProcessor.MVCC_COUNTER_NA : row;
// Here we assume that each key can't be updated concurrently and case when different indexes
// getting updated from different threads with different rows with the same key is impossible.
lock(false);
@@ -479,6 +479,9 @@ public class GridH2Table extends TableBase {
assert replaced == (row.newMvccCoordinatorVersion() != 0);
old = null;
+
+ if (!replaced)
+ size.increment();
}
else {
old = pk.put(row);
[3/3] ignite git commit: Merge remote-tracking branch
'origin/ignite-5937' into ignite-5937
Posted by sb...@apache.org.
Merge remote-tracking branch 'origin/ignite-5937' into ignite-5937
# Conflicts:
# modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccSqlQueriesTest.java
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0014b2f6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0014b2f6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0014b2f6
Branch: refs/heads/ignite-5937
Commit: 0014b2f6e4f258633dd510d859ebda9dd41ebfd5
Parents: 4abbf60 df707f4
Author: sboikov <sb...@gridgain.com>
Authored: Thu Oct 19 15:31:41 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Oct 19 15:31:41 2017 +0300
----------------------------------------------------------------------
----------------------------------------------------------------------