Repository: ignite
Updated Branches:
  refs/heads/ignite-5993 [created] 7684dfd15


IGNITE-5993: Done.


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

Branch: refs/heads/ignite-5993
Commit: 7684dfd1597ab8aa675f28e2f77dddc81f9832a1
Parents: 870ecf8
Author: devozerov <voze...@gridgain.com>
Authored: Tue Aug 8 17:30:36 2017 +0300
Committer: devozerov <voze...@gridgain.com>
Committed: Tue Aug 8 17:30:36 2017 +0300

----------------------------------------------------------------------
 .../query/h2/opt/GridH2SpatialIndex.java        |   7 -
 .../processors/query/h2/H2RowDescriptor.java    |  11 -
 .../processors/query/h2/H2TableEngine.java      |   4 +-
 .../query/h2/database/H2PkHashIndex.java        |   7 -
 .../query/h2/database/H2TreeIndex.java          |  26 -
 .../query/h2/opt/GridH2IndexBase.java           |  93 +--
 .../query/h2/opt/GridH2QueryContext.java        |  59 --
 .../query/h2/opt/GridH2RowDescriptor.java       |   5 -
 .../processors/query/h2/opt/GridH2Table.java    | 186 +-----
 .../query/h2/opt/GridH2TreeIndex.java           | 602 -------------------
 .../query/h2/twostep/GridMapQueryExecutor.java  |  25 -
 .../query/h2/opt/GridH2TableSelfTest.java       | 172 ------
 12 files changed, 7 insertions(+), 1190 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
----------------------------------------------------------------------
diff --git 
a/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
 
b/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
index 9389290..d83e860 100644
--- 
a/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
+++ 
b/modules/geospatial/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2SpatialIndex.java
@@ -31,7 +31,6 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.processors.query.h2.H2Cursor;
 import org.apache.ignite.internal.util.GridCursorIteratorWrapper;
-import org.apache.ignite.internal.util.IgniteTree;
 import org.apache.ignite.internal.util.lang.GridCursor;
 import org.h2.engine.Session;
 import org.h2.index.Cursor;
@@ -51,7 +50,6 @@ import org.h2.table.IndexColumn;
 import org.h2.table.TableFilter;
 import org.h2.value.Value;
 import org.h2.value.ValueGeometry;
-import org.jetbrains.annotations.Nullable;
 
 import static 
org.apache.ignite.internal.processors.query.h2.opt.GridH2AbstractKeyValueRow.KEY_COL;
 
@@ -158,11 +156,6 @@ public class GridH2SpatialIndex extends GridH2IndexBase 
implements SpatialIndex
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override protected IgniteTree doTakeSnapshot() {
-        return null; // TODO We do not support snapshots, but probably this is 
possible.
-    }
-
-    /** {@inheritDoc} */
     @Override public GridH2Row put(GridH2Row row) {
         assert row instanceof GridH2AbstractKeyValueRow : "requires key to be 
at 0";
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowDescriptor.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowDescriptor.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowDescriptor.java
index dab83d1..31f0e69 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowDescriptor.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowDescriptor.java
@@ -107,9 +107,6 @@ public class H2RowDescriptor implements GridH2RowDescriptor 
{
     private final GridUnsafeGuard guard;
 
     /** */
-    private final boolean snapshotableIdx;
-
-    /** */
     private final GridQueryProperty[] props;
 
     /** Id of user-defined key column */
@@ -170,9 +167,6 @@ public class H2RowDescriptor implements GridH2RowDescriptor 
{
 
         valueAliasColumnId =
             (type.valueFieldName() != null) ? DEFAULT_COLUMNS_COUNT + 
fieldsList.indexOf(type.valueFieldAlias()) : -1;
-
-        // Index is not snapshotable in db-x.
-        snapshotableIdx = false;
     }
 
     /** {@inheritDoc} */
@@ -382,11 +376,6 @@ public class H2RowDescriptor implements 
GridH2RowDescriptor {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean snapshotableIndex() {
-        return snapshotableIdx;
-    }
-
-    /** {@inheritDoc} */
     @Override public boolean isKeyColumn(int columnId) {
         assert columnId >= 0;
         return columnId == KEY_COL || columnId == keyAliasColumnId;

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableEngine.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableEngine.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableEngine.java
index 57b7ba0..6bdcc30 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableEngine.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableEngine.java
@@ -56,8 +56,8 @@ public class H2TableEngine implements TableEngine {
      * @throws SQLException If failed.
      * @return Created table.
      */
-    public static synchronized GridH2Table createTable(Connection conn, String 
sql,
-        @Nullable GridH2RowDescriptor rowDesc, H2RowFactory rowFactory, 
H2TableDescriptor tblDesc)
+    public static synchronized GridH2Table createTable(Connection conn, String 
sql, GridH2RowDescriptor rowDesc,
+        H2RowFactory rowFactory, H2TableDescriptor tblDesc)
         throws SQLException {
         rowDesc0 = rowDesc;
         rowFactory0 = rowFactory;

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
index 2ae5868..1937a4b 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
@@ -30,7 +30,6 @@ import 
org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2IndexBase;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Row;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
-import org.apache.ignite.internal.util.IgniteTree;
 import org.apache.ignite.internal.util.lang.GridCursor;
 import org.apache.ignite.lang.IgniteBiPredicate;
 import org.apache.ignite.spi.indexing.IndexingQueryFilter;
@@ -44,7 +43,6 @@ import org.h2.result.SortOrder;
 import org.h2.table.Column;
 import org.h2.table.IndexColumn;
 import org.h2.table.TableFilter;
-import org.jetbrains.annotations.Nullable;
 
 /**
  *
@@ -199,11 +197,6 @@ public class H2PkHashIndex extends GridH2IndexBase {
         throw new UnsupportedOperationException();
     }
 
-    /** {@inheritDoc} */
-    @Nullable @Override protected IgniteTree doTakeSnapshot() {
-        throw new AssertionError("This method must not be called for PK 
index");
-    }
-
     /**
      * Cursor.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
index e02510f..eb579c3 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java
@@ -215,25 +215,6 @@ public class H2TreeIndex extends GridH2IndexBase {
     }
 
     /** {@inheritDoc} */
-    @Override public boolean putx(GridH2Row row) {
-        try {
-            InlineIndexHelper.setCurrentInlineIndexes(inlineIdxs);
-
-            int seg = segmentForRow(row);
-
-            H2Tree tree = treeForRead(seg);
-
-            return tree.putx(row);
-        }
-        catch (IgniteCheckedException e) {
-            throw DbException.convert(e);
-        }
-        finally {
-            InlineIndexHelper.clearCurrentInlineIndexes();
-        }
-    }
-
-    /** {@inheritDoc} */
     @Override public GridH2Row remove(SearchRow row) {
         try {
             InlineIndexHelper.setCurrentInlineIndexes(inlineIdxs);
@@ -344,13 +325,6 @@ public class H2TreeIndex extends GridH2IndexBase {
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override protected IgniteTree<SearchRow, GridH2Row> 
doTakeSnapshot() {
-        int seg = threadLocalSegment();
-
-        return treeForRead(seg);
-    }
-
-    /** {@inheritDoc} */
     @Override protected H2Tree treeForRead(int segment) {
         return segments[segment];
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
index 542adf0..5d5fb56 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
@@ -22,7 +22,6 @@ import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.Future;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
 import javax.cache.CacheException;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteInterruptedException;
@@ -35,7 +34,6 @@ import 
org.apache.ignite.internal.managers.communication.GridIoPolicy;
 import org.apache.ignite.internal.managers.communication.GridMessageListener;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
-import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridReservable;
 import 
org.apache.ignite.internal.processors.query.h2.twostep.msg.GridH2IndexRangeRequest;
 import 
org.apache.ignite.internal.processors.query.h2.twostep.msg.GridH2IndexRangeResponse;
 import 
org.apache.ignite.internal.processors.query.h2.twostep.msg.GridH2RowMessage;
@@ -93,15 +91,6 @@ public abstract class GridH2IndexBase extends BaseIndex {
     private static final Object EXPLICIT_NULL = new Object();
 
     /** */
-    private static final AtomicLong idxIdGen = new AtomicLong();
-
-    /** */
-    protected final long idxId = idxIdGen.incrementAndGet();
-
-    /** */
-    private final ThreadLocal<Object> snapshot = new ThreadLocal<>();
-
-    /** */
     private Object msgTopic;
 
     /** */
@@ -198,16 +187,6 @@ public abstract class GridH2IndexBase extends BaseIndex {
     public abstract GridH2Row put(GridH2Row row);
 
     /**
-     * Puts row.
-     *
-     * @param row Row.
-     * @return {@code True} if replaced existing row.
-     */
-    public boolean putx(GridH2Row row) {
-        return put(row) != null;
-    }
-
-    /**
      * Remove row from index.
      *
      * @param row Row.
@@ -233,32 +212,6 @@ public abstract class GridH2IndexBase extends BaseIndex {
     public abstract GridH2Row findOne(GridH2Row row);
 
     /**
-     * Takes or sets existing snapshot to be used in current thread.
-     *
-     * @param s Optional existing snapshot to use.
-     * @param qctx Query context.
-     * @return Snapshot.
-     */
-    public final Object takeSnapshot(@Nullable Object s, GridH2QueryContext 
qctx) {
-        assert snapshot.get() == null;
-
-        if (s == null)
-            s = doTakeSnapshot();
-
-        if (s != null) {
-            if (s instanceof GridReservable && !((GridReservable)s).reserve())
-                return null;
-
-            snapshot.set(s);
-
-            if (qctx != null)
-                qctx.putSnapshot(idxId, s);
-        }
-
-        return s;
-    }
-
-    /**
      * @param ses Session.
      */
     private static void clearViewIndexCache(Session ses) {
@@ -303,38 +256,6 @@ public abstract class GridH2IndexBase extends BaseIndex {
     }
 
     /**
-     * Takes and returns actual snapshot or {@code null} if snapshots are not 
supported.
-     *
-     * @return Snapshot or {@code null}.
-     */
-    @Nullable protected abstract IgniteTree doTakeSnapshot();
-
-    /**
-     * @return Thread local snapshot.
-     */
-    @SuppressWarnings("unchecked")
-    protected <T> T threadLocalSnapshot() {
-        return (T)snapshot.get();
-    }
-
-    /**
-     * Releases snapshot for current thread.
-     */
-    public void releaseSnapshot() {
-        Object s = snapshot.get();
-
-        assert s != null;
-
-        snapshot.remove();
-
-        if (s instanceof GridReservable)
-            ((GridReservable)s).release();
-
-        if (s instanceof AutoCloseable)
-            U.closeQuiet((AutoCloseable)s);
-    }
-
-    /**
      * Filters rows from expired ones and using predicate.
      *
      * @param cursor GridCursor over rows.
@@ -498,11 +419,9 @@ public abstract class GridH2IndexBase extends BaseIndex {
 
                 if (msg.bounds() != null) {
                     // This is the first request containing all the search 
rows.
-                    IgniteTree snapshotTree = qctx.getSnapshot(idxId);
-
                     assert !msg.bounds().isEmpty() : "empty bounds";
 
-                    src = new RangeSource(msg.bounds(), msg.segment(), 
snapshotTree, qctx.filter());
+                    src = new RangeSource(msg.bounds(), msg.segment(), 
qctx.filter());
                 }
                 else {
                     // This is request to fetch next portion of data.
@@ -619,7 +538,7 @@ public abstract class GridH2IndexBase extends BaseIndex {
 
         if (isLocalQry) {
             if (partMap != null && !partMap.containsKey(cctx.localNodeId()))
-                return Collections.<SegmentKey>emptyList(); // Prevent remote 
index call for local queries.
+                return Collections.emptyList(); // Prevent remote index call 
for local queries.
 
             nodes = Collections.singletonList(cctx.localNode());
         }
@@ -1543,9 +1462,6 @@ public abstract class GridH2IndexBase extends BaseIndex {
         int curRangeId = -1;
 
         /** */
-        final IgniteTree tree;
-
-        /** */
         private final int segment;
 
         /** */
@@ -1556,18 +1472,15 @@ public abstract class GridH2IndexBase extends BaseIndex 
{
 
         /**
          * @param bounds Bounds.
-         * @param tree Snapshot.
          * @param filter Filter.
          */
         RangeSource(
             Iterable<GridH2RowRangeBounds> bounds,
             int segment,
-            IgniteTree tree,
             IndexingQueryFilter filter
         ) {
             this.segment = segment;
             this.filter = filter;
-            this.tree = tree;
             boundsIter = bounds.iterator();
         }
 
@@ -1623,7 +1536,7 @@ public abstract class GridH2IndexBase extends BaseIndex {
                 SearchRow first = toSearchRow(bounds.first());
                 SearchRow last = toSearchRow(bounds.last());
 
-                IgniteTree t = tree != null ? tree : treeForRead(segment);
+                IgniteTree t = treeForRead(segment);
 
                 iter = new CursorIteratorWrapper(doFind0(t, first, true, last, 
filter));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2QueryContext.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2QueryContext.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2QueryContext.java
index a7ee0dc..2b4e180 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2QueryContext.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2QueryContext.java
@@ -25,7 +25,6 @@ import java.util.concurrent.ConcurrentMap;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.GridReservable;
-import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.spi.indexing.IndexingQueryFilter;
@@ -51,10 +50,6 @@ public class GridH2QueryContext {
     /** */
     private volatile boolean cleared;
 
-    /** Index snapshots. */
-    @GridToStringInclude
-    private Map<Long, Object> snapshots;
-
     /** */
     private List<GridReservable> reservations;
 
@@ -248,51 +243,6 @@ public class GridH2QueryContext {
     }
 
     /**
-     * @param idxId Index ID.
-     * @param snapshot Index snapshot.
-     */
-    public void putSnapshot(long idxId, Object snapshot) {
-        assert snapshot != null;
-        assert get() == null : "need to snapshot indexes before setting query 
context for correct visibility";
-
-        if (snapshot instanceof GridReservable && 
!((GridReservable)snapshot).reserve())
-            throw new IllegalStateException("Must be already reserved 
before.");
-
-        if (snapshots == null)
-            snapshots = new HashMap<>();
-
-        if (snapshots.put(idxId, snapshot) != null)
-            throw new IllegalStateException("Index already snapshoted.");
-    }
-
-    /**
-     * Clear taken snapshots.
-     */
-    public void clearSnapshots() {
-        if (F.isEmpty(snapshots))
-            return;
-
-        for (Object snapshot : snapshots.values()) {
-            if (snapshot instanceof GridReservable)
-                ((GridReservable)snapshot).release();
-        }
-
-        snapshots = null;
-    }
-
-    /**
-     * @param idxId Index ID.
-     * @return Index snapshot or {@code null} if none.
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T getSnapshot(long idxId) {
-        if (snapshots == null)
-            return null;
-
-        return (T)snapshots.get(idxId);
-    }
-
-    /**
      * @param batchLookupId Batch lookup ID.
      * @param streams Range streams.
      */
@@ -363,13 +313,6 @@ public class GridH2QueryContext {
     }
 
     /**
-     * @return If indexes were snapshotted before query execution.
-     */
-    public boolean hasIndexSnapshots() {
-        return snapshots != null;
-    }
-
-    /**
      * Sets current thread local context. This method must be called when all 
the non-volatile properties are
      * already set to ensure visibility for other threads.
      *
@@ -440,8 +383,6 @@ public class GridH2QueryContext {
     public void clearContext(boolean nodeStop) {
         cleared = true;
 
-        clearSnapshots();
-
         List<GridReservable> r = reservations;
 
         if (!nodeStop && !F.isEmpty(r)) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
index ce73010..d273e16 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
@@ -154,11 +154,6 @@ public interface GridH2RowDescriptor extends 
GridOffHeapSmartPointerFactory<Grid
     public Value wrap(Object o, int type) throws IgniteCheckedException;
 
     /**
-     * @return {@code True} if index should support snapshots.
-     */
-    public boolean snapshotableIndex();
-
-    /**
      * Checks if provided column id matches key column or key alias.
      *
      * @param colId Column id.

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/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 76d0258..f76cb5f 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
@@ -22,8 +22,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReferenceArray;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -61,7 +59,6 @@ import org.jsr166.LongAdder8;
 
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static 
org.apache.ignite.internal.processors.query.h2.opt.GridH2AbstractKeyValueRow.KEY_COL;
-import static 
org.apache.ignite.internal.processors.query.h2.opt.GridH2QueryType.MAP;
 
 /**
  * H2 Table implementation.
@@ -95,18 +92,12 @@ public class GridH2Table extends TableBase {
     private final ConcurrentMap<Session, Boolean> sessions = new 
ConcurrentHashMap8<>();
 
     /** */
-    private final AtomicReferenceArray<Object[]> actualSnapshot;
-
-    /** */
     private IndexColumn affKeyCol;
 
     /** */
     private final LongAdder8 size = new LongAdder8();
 
     /** */
-    private final boolean snapshotEnabled;
-
-    /** */
     private final H2RowFactory rowFactory;
 
     /** */
@@ -127,7 +118,7 @@ public class GridH2Table extends TableBase {
      * @param idxsFactory Indexes factory.
      * @param cctx Cache context.
      */
-    public GridH2Table(CreateTableData createTblData, @Nullable 
GridH2RowDescriptor desc, H2RowFactory rowFactory,
+    public GridH2Table(CreateTableData createTblData, GridH2RowDescriptor 
desc, H2RowFactory rowFactory,
         GridH2SystemIndexFactory idxsFactory, GridCacheContext cctx) {
         super(createTblData);
 
@@ -136,7 +127,7 @@ public class GridH2Table extends TableBase {
         this.desc = desc;
         this.cctx = cctx;
 
-        if (desc != null && desc.context() != null && 
!desc.context().customAffinityMapper()) {
+        if (desc.context() != null && !desc.context().customAffinityMapper()) {
             boolean affinityColExists = true;
 
             String affKey = desc.type().affinityKey();
@@ -186,18 +177,10 @@ public class GridH2Table extends TableBase {
         else
             idxs.add(0, new GridH2PrimaryScanIndex(this, index(0), null));
 
-        snapshotEnabled = desc == null || desc.snapshotableIndex();
-
         pkIndexPos = hasHashIndex ? 2 : 1;
 
         sysIdxsCnt = idxs.size();
 
-        final int segments = desc != null ? 
desc.context().config().getQueryParallelism() :
-            // Get index segments count from PK index. Null desc can be passed 
from tests.
-            index(pkIndexPos).segmentsCount();
-
-        actualSnapshot = snapshotEnabled ? new 
AtomicReferenceArray<Object[]>(Math.max(segments, 1)) : null;
-
         lock = new ReentrantReadWriteLock();
     }
 
@@ -259,79 +242,10 @@ public class GridH2Table extends TableBase {
             throw new IllegalStateException("Table " + identifierString() + " 
already destroyed.");
         }
 
-        if (snapshotInLock()) {
-            final GridH2QueryContext qctx = GridH2QueryContext.get();
-
-            assert qctx != null;
-
-            snapshotIndexes(null, qctx.segment());
-        }
-
         return false;
     }
 
     /**
-     * @return {@code True} If we must snapshot and release index snapshots in 
{@link #lock(Session, boolean, boolean)}
-     * and {@link #unlock(Session)} methods.
-     */
-    private boolean snapshotInLock() {
-        if (!snapshotEnabled)
-            return false;
-
-        GridH2QueryContext qctx = GridH2QueryContext.get();
-
-        // On MAP queries with distributed joins we lock tables before the 
queries.
-        return qctx == null || qctx.type() != MAP || !qctx.hasIndexSnapshots();
-    }
-
-    /**
-     * @param qctx Query context.
-     * @param segment id of index segment to be snapshoted.
-     */
-    public void snapshotIndexes(GridH2QueryContext qctx, int segment) {
-        if (!snapshotEnabled)
-            return;
-
-        Object[] segmentSnapshot;
-
-        // Try to reuse existing snapshots outside of the lock.
-        for (long waitTime = 200; ; waitTime *= 2) { // Increase wait time to 
avoid starvation.
-            segmentSnapshot = actualSnapshot.get(segment);
-
-            if (segmentSnapshot != null) { // Reuse existing snapshot without 
locking.
-                segmentSnapshot = doSnapshotIndexes(segment, segmentSnapshot, 
qctx);
-
-                if (segmentSnapshot != null)
-                    return; // Reused successfully.
-            }
-
-            if (tryLock(true, waitTime))
-                break;
-        }
-
-        try {
-            ensureNotDestroyed();
-
-            // Try again inside of the lock.
-            segmentSnapshot = actualSnapshot.get(segment);
-
-            if (segmentSnapshot != null) // Try reusing.
-                segmentSnapshot = doSnapshotIndexes(segment, segmentSnapshot, 
qctx);
-
-            if (segmentSnapshot == null) { // Reuse failed, produce new 
snapshots.
-                segmentSnapshot = doSnapshotIndexes(segment,null, qctx);
-
-                assert segmentSnapshot != null;
-
-                actualSnapshot.set(segment, segmentSnapshot);
-            }
-        }
-        finally {
-            unlock(true);
-        }
-    }
-
-    /**
      * @return Table identifier.
      */
     public QueryTable identifier() {
@@ -364,27 +278,6 @@ public class GridH2Table extends TableBase {
     }
 
     /**
-     * @param exclusive Exclusive lock.
-     * @param waitMillis Milliseconds to wait for the lock.
-     * @return Whether lock was acquired.
-     */
-    private boolean tryLock(boolean exclusive, long waitMillis) {
-        Lock l = exclusive ? lock.writeLock() : lock.readLock();
-
-        try {
-            if (!l.tryLock(waitMillis, TimeUnit.MILLISECONDS))
-                return false;
-        }
-        catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-
-            throw new IgniteInterruptedException("Thread got interrupted while 
trying to acquire table lock.", e);
-        }
-
-        return true;
-    }
-
-    /**
      * Release table lock.
      *
      * @param exclusive Exclusive flag.
@@ -403,55 +296,6 @@ public class GridH2Table extends TableBase {
             throw new IllegalStateException("Table " + identifierString() + " 
already destroyed.");
     }
 
-    /**
-     * Must be called inside of write lock because when using multiple indexes 
we have to ensure that all of them have
-     * the same contents at snapshot taking time.
-     *
-     * @param segment id of index segment snapshot.
-     * @param segmentSnapshot snapshot to be reused.
-     * @param qctx Query context.
-     * @return New indexes data snapshot.
-     */
-    @SuppressWarnings("unchecked")
-    private Object[] doSnapshotIndexes(int segment, Object[] segmentSnapshot, 
GridH2QueryContext qctx) {
-        assert snapshotEnabled;
-
-        //TODO: make HashIndex snapshotable or remove it at all?
-        if (segmentSnapshot == null) // Nothing to reuse, create new snapshots.
-            segmentSnapshot = new Object[idxs.size() - pkIndexPos];
-
-        // Take snapshots on all except first which is scan.
-        for (int i = pkIndexPos, len = idxs.size(); i < len; i++) {
-            Object s = segmentSnapshot[i - pkIndexPos];
-
-            boolean reuseExisting = s != null;
-
-            if (!(idxs.get(i) instanceof GridH2IndexBase))
-                continue;
-
-            s = index(i).takeSnapshot(s, qctx);
-
-            if (reuseExisting && s == null) { // Existing snapshot was 
invalidated before we were able to reserve it.
-                // Release already taken snapshots.
-                if (qctx != null)
-                    qctx.clearSnapshots();
-
-                for (int j = pkIndexPos; j < i; j++)
-                    if ((idxs.get(j) instanceof GridH2IndexBase))
-                        index(j).releaseSnapshot();
-
-                // Drop invalidated snapshot.
-                actualSnapshot.compareAndSet(segment, segmentSnapshot, null);
-
-                return null;
-            }
-
-            segmentSnapshot[i - pkIndexPos] = s;
-        }
-
-        return segmentSnapshot;
-    }
-
     /** {@inheritDoc} */
     @Override public void close(Session ses) {
         // No-op.
@@ -525,32 +369,10 @@ public class GridH2Table extends TableBase {
         if (exclusive == null)
             return;
 
-        if (snapshotInLock())
-            releaseSnapshots();
-
         unlock(exclusive);
     }
 
     /**
-     * Releases snapshots.
-     */
-    public void releaseSnapshots() {
-        if (!snapshotEnabled)
-            return;
-
-        releaseSnapshots0(idxs);
-    }
-
-    /**
-     * @param idxs Indexes.
-     */
-    private void releaseSnapshots0(ArrayList<Index> idxs) {
-        // Release snapshots on all except first which is scan and second 
which is hash.
-        for (int i = 2, len = idxs.size(); i < len; i++)
-            ((GridH2IndexBase)idxs.get(i)).releaseSnapshot();
-    }
-
-    /**
      * Updates table for given key. If value is null then row with given key 
will be removed from table,
      * otherwise value and expiration time will be updated or new row will be 
added.
      *
@@ -700,10 +522,6 @@ public class GridH2Table extends TableBase {
                     return false;
             }
 
-            // The snapshot is not actual after update.
-            if (actualSnapshot != null)
-                actualSnapshot.set(pk.segmentForRow(row), null);
-
             return true;
         }
         finally {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java
deleted file mode 100644
index 03fedcb..0000000
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TreeIndex.java
+++ /dev/null
@@ -1,602 +0,0 @@
-/*
- * 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.opt;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.NavigableMap;
-import java.util.concurrent.ConcurrentSkipListMap;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.processors.query.h2.H2Cursor;
-import org.apache.ignite.internal.util.GridCursorIteratorWrapper;
-import org.apache.ignite.internal.util.IgniteTree;
-import org.apache.ignite.internal.util.lang.GridCursor;
-import org.apache.ignite.internal.util.offheap.unsafe.GridOffHeapSnapTreeMap;
-import org.apache.ignite.internal.util.offheap.unsafe.GridUnsafeGuard;
-import org.apache.ignite.internal.util.snaptree.SnapTreeMap;
-import org.apache.ignite.internal.util.typedef.internal.SB;
-import org.apache.ignite.spi.indexing.IndexingQueryFilter;
-import org.h2.engine.Session;
-import org.h2.index.Cursor;
-import org.h2.index.IndexType;
-import org.h2.index.SingleRowCursor;
-import org.h2.message.DbException;
-import org.h2.result.SearchRow;
-import org.h2.result.SortOrder;
-import org.h2.table.Column;
-import org.h2.table.IndexColumn;
-import org.h2.table.TableFilter;
-import org.h2.value.Value;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Base class for snapshotable segmented tree indexes.
- */
-@SuppressWarnings("ComparatorNotSerializable")
-public class GridH2TreeIndex extends GridH2IndexBase implements 
Comparator<GridSearchRowPointer> {
-    /** */
-    private final IgniteNavigableMapTree[] segments;
-
-    /** */
-    private final boolean snapshotEnabled;
-
-    /**
-     * Constructor with index initialization. Creates index with single 
segment.
-     *
-     * @param name Index name.
-     * @param tbl Table.
-     * @param pk If this index is primary key.
-     * @param colsList Index columns list.
-     */
-    @SuppressWarnings("unchecked")
-    public GridH2TreeIndex(String name, GridH2Table tbl, boolean pk, 
List<IndexColumn> colsList) {
-        this(name, tbl, pk, colsList, 1);
-    }
-
-    /**
-     * Constructor with index initialization.
-     *
-     * @param name Index name.
-     * @param tbl Table.
-     * @param pk If this index is primary key.
-     * @param colsList Index columns list.
-     * @param segmentsCnt Number of segments.
-     */
-    @SuppressWarnings("unchecked")
-    public GridH2TreeIndex(String name, GridH2Table tbl, boolean pk, 
List<IndexColumn> colsList, int segmentsCnt) {
-        assert segmentsCnt > 0 : segmentsCnt;
-
-        IndexColumn[] cols = colsList.toArray(new 
IndexColumn[colsList.size()]);
-
-        IndexColumn.mapColumns(cols, tbl);
-
-        initBaseIndex(tbl, 0, name, cols,
-            pk ? IndexType.createPrimaryKey(false, false) : 
IndexType.createNonUnique(false, false, false));
-
-        segments = new IgniteNavigableMapTree[segmentsCnt];
-
-        final GridH2RowDescriptor desc = tbl.rowDescriptor();
-
-        if (desc == null || desc.memory() == null) {
-            snapshotEnabled = desc == null || desc.snapshotableIndex();
-
-            if (snapshotEnabled) {
-                for (int i = 0; i < segmentsCnt; i++) {
-                    segments[i] = new IgniteNavigableMapTree(new 
SnapTreeMap<GridSearchRowPointer, GridH2Row>(this) {
-                        @Override protected void 
afterNodeUpdate_nl(Node<GridSearchRowPointer, GridH2Row> node, Object val) {
-                            if (val != null)
-                                node.key = (GridSearchRowPointer)val;
-                        }
-
-                        @Override protected Comparable<? super 
GridSearchRowPointer> comparable(Object key) {
-                            if (key instanceof ComparableRow)
-                                return (Comparable<? super SearchRow>)key;
-
-                            return super.comparable(key);
-                        }
-                    });
-                }
-            }
-            else {
-                for (int i = 0; i < segmentsCnt; i++) {
-                    segments[i] = new IgniteNavigableMapTree(
-                    new ConcurrentSkipListMap<GridSearchRowPointer, GridH2Row>(
-                        new Comparator<GridSearchRowPointer>() {
-                            @Override public int compare(GridSearchRowPointer 
o1, GridSearchRowPointer o2) {
-                                if (o1 instanceof ComparableRow)
-                                    return ((ComparableRow)o1).compareTo(o2);
-
-                                if (o2 instanceof ComparableRow)
-                                    return -((ComparableRow)o2).compareTo(o1);
-
-                                return compareRows(o1, o2);
-                            }
-                        }
-                    ));
-                }
-            }
-        }
-        else {
-            assert desc.snapshotableIndex() : desc;
-
-            snapshotEnabled = true;
-
-            for (int i = 0; i < segmentsCnt; i++) {
-                segments[i] = new IgniteNavigableMapTree(new 
GridOffHeapSnapTreeMap<GridSearchRowPointer, GridH2Row>(desc, desc, 
desc.memory(), desc.guard(), this) {
-                    @Override protected void afterNodeUpdate_nl(long node, 
GridH2Row val) {
-                        final long oldKey = keyPtr(node);
-
-                        if (val != null) {
-                            key(node, val);
-
-                            guard.finalizeLater(new Runnable() {
-                                @Override public void run() {
-                                    
desc.createPointer(oldKey).decrementRefCount();
-                                }
-                            });
-                        }
-                    }
-
-                    @Override protected Comparable<? super 
GridSearchRowPointer> comparable(Object key) {
-                        if (key instanceof ComparableRow)
-                            return (Comparable<? super SearchRow>)key;
-
-                        return super.comparable(key);
-                    }
-                });
-            }
-        }
-
-        initDistributedJoinMessaging(tbl);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteTree doTakeSnapshot() {
-        assert snapshotEnabled;
-
-        int seg = threadLocalSegment();
-
-        IgniteNavigableMapTree tree = segments[seg];
-
-        return tree.clone();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected final IgniteTree treeForRead(int seg) {
-        if (!snapshotEnabled)
-            return segments[seg];
-
-        IgniteTree res = threadLocalSnapshot();
-
-        if (res == null)
-            return segments[seg];
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void destroy() {
-        assert threadLocalSnapshot() == null;
-
-        super.destroy();
-    }
-
-    /** {@inheritDoc} */
-    @Override public long getRowCount(@Nullable Session ses) {
-        IndexingQueryFilter f = threadLocalFilter();
-
-        int seg = threadLocalSegment();
-
-        // Fast path if we don't need to perform any filtering.
-        if (f == null || f.forCache((getTable()).cacheName()) == null)
-            try {
-                return treeForRead(seg).size();
-            } catch (IgniteCheckedException e) {
-                throw DbException.convert(e);
-            }
-
-        GridCursor<GridH2Row> cursor = doFind(null, false, null);
-
-        long size = 0;
-
-        try {
-            while (cursor.next())
-                size++;
-        }
-        catch (IgniteCheckedException e) {
-            throw DbException.convert(e);
-        }
-
-        return size;
-    }
-
-    /** {@inheritDoc} */
-    @Override public long getRowCountApproximation() {
-        return table.getRowCountApproximation();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int compare(GridSearchRowPointer r1, GridSearchRowPointer 
r2) {
-        // Second row here must be data row if first is a search row.
-        return -compareRows(r2, r1);
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        SB sb = new SB((indexType.isUnique() ? "Unique index '" : "Index '") + 
getName() + "' [");
-
-        boolean first = true;
-
-        for (IndexColumn col : getIndexColumns()) {
-            if (first)
-                first = false;
-            else
-                sb.a(", ");
-
-            sb.a(col.getSQL());
-        }
-
-        sb.a(" ]");
-
-        return sb.toString();
-    }
-
-    /** {@inheritDoc} */
-    @Override public double getCost(Session ses, int[] masks, TableFilter[] 
filters, int filter,
-        SortOrder sortOrder, HashSet<Column> cols) {
-        long rowCnt = getRowCountApproximation();
-        double baseCost = getCostRangeIndex(masks, rowCnt, filters, filter, 
sortOrder, false, cols);
-        int mul = getDistributedMultiplier(ses, filters, filter);
-
-        return mul * baseCost;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean canFindNext() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Cursor find(Session ses, @Nullable SearchRow first, 
@Nullable SearchRow last) {
-        return new H2Cursor(doFind(first, true, last), null);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Cursor findNext(Session ses, SearchRow higherThan, 
SearchRow last) {
-        return new H2Cursor(doFind(higherThan, false, last), null);
-    }
-
-    /**
-     * Finds row with key equal one in given search row.
-     * WARNING!! Method call must be protected by {@link 
GridUnsafeGuard#begin()}
-     * {@link GridUnsafeGuard#end()} block.
-     *
-     * @param row Search row.
-     * @return Row.
-     */
-    @Override public GridH2Row findOne(GridH2Row row) {
-        int seg = segmentForRow(row);
-
-        return segments[seg].findOne(row);
-    }
-
-    /**
-     * Returns sub-tree bounded by given values.
-     *
-     * @param first Lower bound.
-     * @param includeFirst Whether lower bound should be inclusive.
-     * @param last Upper bound always inclusive.
-     * @return Iterator over rows in given range.
-     */
-    @SuppressWarnings("unchecked")
-    private GridCursor<GridH2Row> doFind(@Nullable SearchRow first, boolean 
includeFirst, @Nullable SearchRow last) {
-        int seg = threadLocalSegment();
-
-        IgniteTree t = treeForRead(seg);
-
-        return doFind0(t, first, includeFirst, last, threadLocalFilter());
-    }
-
-    /** {@inheritDoc} */
-    @Override protected final GridCursor<GridH2Row> doFind0(
-        IgniteTree t,
-        @Nullable SearchRow first,
-        boolean includeFirst,
-        @Nullable SearchRow last,
-        IndexingQueryFilter filter
-    ) {
-        includeFirst &= first != null;
-
-        GridCursor<GridH2Row> range = subTree(t, comparable(first, 
includeFirst ? -1 : 1),
-            comparable(last, 1));
-
-        if (range == null)
-            return EMPTY_CURSOR;
-
-        return filter(range, filter);
-    }
-
-    /**
-     * @param row Row.
-     * @param bias Bias.
-     * @return Comparable row.
-     */
-    private GridSearchRowPointer comparable(SearchRow row, int bias) {
-        if (row == null)
-            return null;
-
-        if (bias == 0 && row instanceof GridH2Row)
-            return (GridSearchRowPointer)row;
-
-        return new ComparableRow(row, bias);
-    }
-
-    /**
-     * Takes sup-map from given one.
-     *
-     * @param tree Tree.
-     * @param first Lower bound.
-     * @param last Upper bound.
-     * @return Sub-map.
-     */
-    @SuppressWarnings({"IfMayBeConditional", "TypeMayBeWeakened"})
-    private GridCursor<GridH2Row> subTree(IgniteTree tree,
-        @Nullable GridSearchRowPointer first, @Nullable GridSearchRowPointer 
last) {
-
-        if (first != null && last != null && compare(first, last) > 0)
-            return null;
-
-        try {
-            // We take exclusive bounds because it is possible that one search 
row will be equal to multiple key rows
-            // in tree and we must return them all.
-            return tree.find(first, last);
-        }
-        catch (IgniteCheckedException e) {
-            throw DbException.convert(e);
-        }
-    }
-
-    /**
-     * Gets iterator over all rows in this index.
-     *
-     * @return Rows iterator.
-     */
-    GridCursor<GridH2Row> rows() {
-        return doFind(null, false, null);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean canGetFirstOrLast() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Cursor findFirstOrLast(Session ses, boolean first) {
-        try {
-            int seg = threadLocalSegment();
-
-            IgniteTree t = treeForRead(seg);
-
-            GridH2Row row = (GridH2Row)(first ? t.findFirst() : t.findLast());
-
-            return new SingleRowCursor(row);
-        }
-        catch (IgniteCheckedException e) {
-            throw DbException.convert(e);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridH2Row put(GridH2Row row) {
-        int seg = segmentForRow(row);
-
-        return segments[seg].put(row);
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridH2Row remove(SearchRow row) {
-        GridSearchRowPointer comparable = comparable(row, 0);
-
-        int seg = segmentForRow(row);
-
-        return segments[seg].remove(comparable);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int segmentsCount() {
-        return segments.length;
-    }
-
-    /**
-     * Comparable row with bias. Will be used for queries to have correct 
bounds (in case of multicolumn index
-     * and query on few first columns we will multiple equal entries in tree).
-     */
-    private final class ComparableRow implements GridSearchRowPointer, 
Comparable<SearchRow> {
-        /** */
-        private final SearchRow row;
-
-        /** */
-        private final int bias;
-
-        /**
-         * @param row Row.
-         * @param bias Bias.
-         */
-        private ComparableRow(SearchRow row, int bias) {
-            this.row = row;
-            this.bias = bias;
-        }
-
-        /** {@inheritDoc} */
-        @Override public int compareTo(SearchRow o) {
-            int res = compareRows(o, row);
-
-            if (res == 0)
-                return bias;
-
-            return -res;
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object obj) {
-            throw new IllegalStateException("Should never be called.");
-        }
-
-        /** {@inheritDoc} */
-        @Override public int getColumnCount() {
-            return row.getColumnCount();
-        }
-
-        /** {@inheritDoc} */
-        @Override public Value getValue(int idx) {
-            return row.getValue(idx);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void setValue(int idx, Value v) {
-            row.setValue(idx, v);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void setKeyAndVersion(SearchRow old) {
-            row.setKeyAndVersion(old);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int getVersion() {
-            return row.getVersion();
-        }
-
-        /** {@inheritDoc} */
-        @Override public void setKey(long key) {
-            row.setKey(key);
-        }
-
-        /** {@inheritDoc} */
-        @Override public long getKey() {
-            return row.getKey();
-        }
-
-        /** {@inheritDoc} */
-        @Override public int getMemory() {
-            return row.getMemory();
-        }
-
-        /** {@inheritDoc} */
-        @Override public long pointer() {
-            throw new IllegalStateException();
-        }
-
-        /** {@inheritDoc} */
-        @Override public void incrementRefCount() {
-            throw new IllegalStateException();
-        }
-
-        /** {@inheritDoc} */
-        @Override public void decrementRefCount() {
-            throw new IllegalStateException();
-        }
-    }
-
-    /**
-     * Adapter from {@link NavigableMap} to {@link IgniteTree}.
-     */
-    private static final class IgniteNavigableMapTree implements 
IgniteTree<GridSearchRowPointer, GridH2Row>, Cloneable {
-        /** Tree. */
-        private final NavigableMap<GridSearchRowPointer, GridH2Row> tree;
-
-        /**
-         * @param tree Tree.
-         */
-        private IgniteNavigableMapTree(NavigableMap<GridSearchRowPointer, 
GridH2Row> tree) {
-            this.tree = tree;
-        }
-
-        /** {@inheritDoc} */
-        @Override public void invoke(GridSearchRowPointer key, Object x, 
InvokeClosure<GridH2Row> c) {
-            throw new UnsupportedOperationException();
-        }
-
-        /** {@inheritDoc} */
-        @Override public GridH2Row put(GridH2Row val) {
-            return tree.put(val, val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public GridH2Row findOne(GridSearchRowPointer key) {
-            return tree.get(key);
-        }
-
-        /** {@inheritDoc} */
-        @Override public GridCursor<GridH2Row> find(GridSearchRowPointer 
lower, GridSearchRowPointer upper)
-            throws IgniteCheckedException {
-
-            Collection<GridH2Row> rows;
-
-            if (lower == null && upper == null)
-                rows = tree.values();
-            else if (lower != null && upper == null)
-                rows = tree.tailMap(lower).values();
-            else if (lower == null)
-                rows = tree.headMap(upper).values();
-            else
-                rows = tree.subMap(lower, false, upper, false).values();
-
-            return new GridCursorIteratorWrapper<>(rows.iterator());
-        }
-
-        /** {@inheritDoc} */
-        @Override public GridH2Row findFirst() throws IgniteCheckedException {
-            Map.Entry<GridSearchRowPointer, GridH2Row> first = 
tree.firstEntry();
-            return (first == null) ? null : first.getValue();
-        }
-
-        /** {@inheritDoc} */
-        @Override public GridH2Row findLast() throws IgniteCheckedException {
-            Map.Entry<GridSearchRowPointer, GridH2Row> last = tree.lastEntry();
-            return (last == null) ? null : last.getValue();
-        }
-
-        /** {@inheritDoc} */
-        @Override public GridH2Row remove(GridSearchRowPointer key) {
-            return tree.remove(key);
-        }
-
-        /** {@inheritDoc} */
-        @Override public long size() {
-            return tree.size();
-        }
-
-        /** {@inheritDoc} */
-        @Override public IgniteNavigableMapTree clone() {
-            IgniteNavigableMapTree cp;
-
-            try {
-                cp = (IgniteNavigableMapTree)super.clone();
-            }
-            catch (final CloneNotSupportedException e) {
-                throw DbException.convert(e);
-            }
-
-            return new IgniteNavigableMapTree(cp.tree);
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
index 19b628b..e717367 100644
--- 
a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
+++ 
b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
@@ -26,7 +26,6 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.UUID;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentMap;
@@ -59,7 +58,6 @@ import 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
 import org.apache.ignite.internal.processors.query.h2.opt.DistributedJoinMode;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2QueryContext;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2RetryException;
-import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
 import 
org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryCancelRequest;
 import 
org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryFailResponse;
 import 
org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageRequest;
@@ -545,22 +543,6 @@ public class GridMapQueryExecutor {
                 .topologyVersion(topVer)
                 .reservations(reserved);
 
-            List<GridH2Table> snapshotedTbls = null;
-
-            if (!F.isEmpty(tbls)) {
-                snapshotedTbls = new ArrayList<>(tbls.size());
-
-                for (QueryTable tbl : tbls) {
-                    GridH2Table h2Tbl = h2.dataTable(tbl);
-
-                    Objects.requireNonNull(h2Tbl, tbl.toString());
-
-                    h2Tbl.snapshotIndexes(qctx, segmentId);
-
-                    snapshotedTbls.add(h2Tbl);
-                }
-            }
-
             Connection conn = h2.connectionForSchema(schemaName);
 
             H2Utils.setupConnection(conn, distributedJoinMode != OFF, 
enforceJoinOrder);
@@ -596,8 +578,6 @@ public class GridMapQueryExecutor {
                             qr.queryCancel(qryIdx));
 
                         if (evt) {
-                            assert mainCctx != null;
-
                             ctx.event().record(new CacheQueryExecutedEvent<>(
                                 node,
                                 "SQL query executed.",
@@ -635,11 +615,6 @@ public class GridMapQueryExecutor {
 
                 if (distributedJoinMode == OFF)
                     qctx.clearContext(false);
-
-                if (!F.isEmpty(snapshotedTbls)) {
-                    for (GridH2Table dataTbl : snapshotedTbls)
-                        dataTbl.releaseSnapshots();
-                }
             }
         }
         catch (Throwable e) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7684dfd1/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TableSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TableSelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TableSelfTest.java
index 88ff61e..a1a64e8 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TableSelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2TableSelfTest.java
@@ -18,38 +18,20 @@
 package org.apache.ignite.internal.processors.query.h2.opt;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashSet;
 import java.util.Random;
-import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.internal.processors.query.h2.database.H2PkHashIndex;
-import org.apache.ignite.internal.processors.query.h2.database.H2RowFactory;
-import org.apache.ignite.internal.util.lang.GridCursor;
-import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.h2.Driver;
-import org.h2.index.Cursor;
-import org.h2.index.Index;
-import org.h2.result.Row;
-import org.h2.result.SearchRow;
-import org.h2.result.SortOrder;
-import org.h2.table.IndexColumn;
 import org.h2.value.ValueLong;
 import org.h2.value.ValueString;
 import org.h2.value.ValueTimestamp;
 import org.h2.value.ValueUuid;
-import org.jetbrains.annotations.Nullable;
 
 /**
  * Tests H2 Table.
@@ -173,47 +155,6 @@ public class GridH2TableSelfTest extends 
GridCommonAbstractTest {
             assertEquals(MAX_X, idx.getRowCount(null));
         }
 
-        // Check correct rows order.
-        checkOrdered((GridH2TreeIndex)tbl.indexes().get(0), new 
Comparator<SearchRow>() {
-            @Override public int compare(SearchRow o1, SearchRow o2) {
-                UUID id1 = (UUID)o1.getValue(0).getObject();
-                UUID id2 = (UUID)o2.getValue(0).getObject();
-
-                return id1.compareTo(id2);
-            }
-        });
-
-        checkOrdered((GridH2TreeIndex)tbl.indexes().get(1), new 
Comparator<SearchRow>() {
-            @Override public int compare(SearchRow o1, SearchRow o2) {
-                Long x1 = (Long)o1.getValue(3).getObject();
-                Long x2 = (Long)o2.getValue(3).getObject();
-
-                int c = x2.compareTo(x1);
-
-                if (c != 0)
-                    return c;
-
-                Timestamp t1 = (Timestamp)o1.getValue(1).getObject();
-                Timestamp t2 = (Timestamp)o2.getValue(1).getObject();
-
-                return t1.compareTo(t2);
-            }
-        });
-
-        checkOrdered((GridH2TreeIndex)tbl.indexes().get(2), new 
Comparator<SearchRow>() {
-            @Override public int compare(SearchRow o1, SearchRow o2) {
-                String s1 = (String)o1.getValue(2).getObject();
-                String s2 = (String)o2.getValue(2).getObject();
-
-                return s2.compareTo(s1);
-            }
-        });
-
-        // Indexes data consistency.
-        ArrayList<? extends Index> idxs = tbl.indexes();
-
-        checkIndexesConsistent((ArrayList<Index>)idxs, null);
-
         // Check unique index.
         UUID id = UUID.randomUUID();
         UUID id2 = UUID.randomUUID();
@@ -405,54 +346,6 @@ public class GridH2TableSelfTest extends 
GridCommonAbstractTest {
 
 
     /**
-     * @throws Exception If failed.
-     */
-    public void testIndexFindFirstOrLast() throws Exception {
-        Index index = tbl.getIndexes().get(2);
-        assertTrue(index instanceof GridH2TreeIndex);
-        assertTrue(index.canGetFirstOrLast());
-
-        //find first on empty data
-        Cursor cursor = index.findFirstOrLast(null, true);
-        assertFalse(cursor.next());
-        assertNull(cursor.get());
-
-        //find last on empty data
-        cursor = index.findFirstOrLast(null, false);
-        assertFalse(cursor.next());
-        assertNull(cursor.get());
-
-        //fill with data
-        int rows = 100;
-        long t = System.currentTimeMillis();
-        Random rnd = new Random();
-        UUID min = null;
-        UUID max = null;
-
-        for (int i = 0 ; i < rows; i++) {
-            UUID id = UUID.randomUUID();
-            if (min == null || id.compareTo(min) < 0)
-                min = id;
-            if (max == null || id.compareTo(max) > 0)
-                max = id;
-            GridH2Row row = row(id, t++, id.toString(), rnd.nextInt(100));
-            ((GridH2TreeIndex)index).put(row);
-        }
-
-        //find first
-        cursor = index.findFirstOrLast(null, true);
-        assertTrue(cursor.next());
-        assertEquals(min, cursor.get().getValue(0).getObject());
-        assertFalse(cursor.next());
-
-        //find last
-        cursor = index.findFirstOrLast(null, false);
-        assertTrue(cursor.next());
-        assertEquals(max, cursor.get().getValue(0).getObject());
-        assertFalse(cursor.next());
-    }
-
-    /**
      * Check query plan to correctly select index.
      *
      * @param conn Connection.
@@ -473,69 +366,4 @@ public class GridH2TableSelfTest extends 
GridCommonAbstractTest {
             }
         }
     }
-
-    /**
-     * @param idxs Indexes.
-     * @param rowSet Rows.
-     * @return Rows.
-     */
-    private Set<Row> checkIndexesConsistent(ArrayList<Index> idxs, @Nullable 
Set<Row> rowSet) throws IgniteCheckedException {
-        for (Index idx : idxs) {
-            if (!(idx instanceof GridH2TreeIndex))
-                continue;
-
-            Set<Row> set = new HashSet<>();
-
-            GridCursor<GridH2Row> cursor = ((GridH2TreeIndex)idx).rows();
-
-            while(cursor.next())
-                assertTrue(set.add(cursor.get()));
-
-            //((GridH2SnapTreeSet)((GridH2Index)idx).tree).print();
-
-            if (rowSet == null || rowSet.isEmpty())
-                rowSet = set;
-            else
-                assertEquals(rowSet, set);
-        }
-
-        return rowSet;
-    }
-
-    /**
-     * @param idxs Indexes list.
-     */
-    private void checkOrdered(ArrayList<Index> idxs) throws 
IgniteCheckedException {
-        for (Index idx : idxs) {
-            if (!(idx instanceof GridH2TreeIndex))
-                continue;
-
-            GridH2TreeIndex h2Idx = (GridH2TreeIndex)idx;
-
-            checkOrdered(h2Idx, h2Idx);
-        }
-    }
-
-    /**
-     * @param idx Index.
-     * @param cmp Comparator.
-     */
-    private void checkOrdered(GridH2TreeIndex idx, Comparator<? super 
GridH2Row> cmp) throws IgniteCheckedException {
-        GridCursor<GridH2Row> cursor = idx.rows();
-
-        GridH2Row min = null;
-
-        while (cursor.next()) {
-            GridH2Row row = cursor.get();
-
-            System.out.println(row);
-
-            assertNotNull(row);
-
-            assertFalse("Incorrect row order in index: " + idx + "\n min: " + 
min + "\n row: " + row,
-                min != null && cmp.compare(min, row) > 0);
-
-            min = row;
-        }
-    }
 }
\ No newline at end of file

Reply via email to