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/01/13 13:37:15 UTC

[1/2] ignite git commit: # Conflicts: # modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java

Repository: ignite
Updated Branches:
  refs/heads/ignite-gg-11810-1 c7bd20c5d -> 86896a81f


# Conflicts:
#	modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java


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

Branch: refs/heads/ignite-gg-11810-1
Commit: 4a36602cc0598e6970c48dd89f0ddc6361317d73
Parents: 3202edd
Author: sboikov <sb...@gridgain.com>
Authored: Fri Jan 13 16:36:58 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Jan 13 16:36:58 2017 +0300

----------------------------------------------------------------------
 .../ignite/internal/pagemem/PageMemory.java     |   4 +
 .../ignite/internal/pagemem/PageUtils.java      |   2 +-
 .../pagemem/impl/PageMemoryNoStoreImpl.java     |  60 +++++++----
 .../internal/pagemem/impl/PageNoStoreImpl.java  |  13 +--
 .../cache/IgniteCacheOffheapManagerImpl.java    |  92 ++++++----------
 .../cache/database/CacheDataRowAdapter.java     |  82 +++++++--------
 .../cache/database/DataStructure.java           |   8 ++
 .../cache/database/tree/BPlusTree.java          | 104 ++++++++++---------
 .../cache/database/tree/util/PageHandler.java   |  23 ++++
 .../util/GridCursorIteratorWrapper.java         |  17 +++
 ...niteCachePartitionedFieldsQuerySelfTest.java |   8 +-
 ...gniteCacheReplicatedFieldsQuerySelfTest.java |   6 +-
 .../query/h2/opt/GridH2TableSelfTest.java       |   6 +-
 .../query/h2/sql/GridQueryParsingTest.java      |   4 +-
 14 files changed, 227 insertions(+), 202 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
index cfee19f..f90e718 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java
@@ -38,6 +38,10 @@ public interface PageMemory extends LifecycleAware, PageIdAllocator {
      */
     public Page page(int cacheId, long pageId) throws IgniteCheckedException;
 
+    public long readLockPage0(int cacheId, long pageId);
+
+    public void readUnlockPage0(long pageAddr);
+
     /**
      * @see #page(int, long)
      * Will not read page from file if it is not present in memory.

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java
index e9e228a..f824368 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java
@@ -130,7 +130,7 @@ public class PageUtils {
         assert addr > 0 : addr;
         assert off >= 0;
         assert bytes != null;
-        assert bytesOff >= 0 && bytesOff < bytes.length : bytesOff;
+        assert bytesOff >= 0 && (bytesOff < bytes.length || bytes.length == 0) : bytesOff;
 
         GridUnsafe.copyMemory(bytes, GridUnsafe.BYTE_ARR_OFF + bytesOff, null, addr + off, bytes.length - bytesOff);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
index 79ac383..fd0ae75 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
@@ -220,13 +220,13 @@ public class PageMemoryNoStoreImpl implements PageMemory {
             relPtr = seg.borrowFreePage();
 
             if (relPtr != INVALID_REL_PTR) {
-                absPtr = seg.absolute(relPtr);
+                absPtr = seg.absolute(PageIdUtils.pageIndex(relPtr));
 
                 break;
             }
         }
 
-        // No segments conatined a free page.
+        // No segments contained a free page.
         if (relPtr == INVALID_REL_PTR) {
             int segAllocIdx = nextRoundRobinIndex();
 
@@ -238,7 +238,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
                 relPtr = seg.allocateFreePage(flags);
 
                 if (relPtr != INVALID_REL_PTR) {
-                    absPtr = seg.absolute(relPtr);
+                    absPtr = seg.absolute(PageIdUtils.pageIndex(relPtr));
 
                     break;
                 }
@@ -263,7 +263,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public boolean freePage(int cacheId, long pageId) {
-        Segment seg = segment(pageId);
+        Segment seg = segment(PageIdUtils.pageIndex(pageId));
 
         seg.releaseFreePage(pageId);
 
@@ -272,9 +272,11 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public Page page(int cacheId, long pageId) throws IgniteCheckedException {
-        Segment seg = segment(pageId);
+        int pageIdx = PageIdUtils.pageIndex(pageId);
 
-        return seg.acquirePage(cacheId, pageId);
+        Segment seg = segment(pageIdx);
+
+        return seg.acquirePage(pageIdx, pageId);
     }
 
     /** {@inheritDoc} */
@@ -285,7 +287,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
     /** {@inheritDoc} */
     @Override public void releasePage(Page p) {
         if (trackAcquiredPages) {
-            Segment seg = segment(p.id());
+            Segment seg = segment(PageIdUtils.pageIndex(p.id()));
 
             seg.onPageRelease();
         }
@@ -363,6 +365,23 @@ public class PageMemoryNoStoreImpl implements PageMemory {
         return rwLock.readLock(absPtr + LOCK_OFFSET, tag);
     }
 
+    @Override public long readLockPage0(int cacheId, long pageId) {
+        int pageIdx = PageIdUtils.pageIndex(pageId);
+
+        Segment seg = segment(pageIdx);
+
+        long absPtr = seg.absolute(pageIdx);
+
+        if (readLockPage(absPtr, PageIdUtils.tag(pageId)))
+            return absPtr + PageMemoryNoStoreImpl.PAGE_OVERHEAD;
+
+        return 0;
+    }
+
+    @Override public void readUnlockPage0(long pageAddr) {
+        readUnlockPage(pageAddr - PAGE_OVERHEAD);
+    }
+
     /**
      * @param absPtr Page absolute address.
      */
@@ -442,12 +461,10 @@ public class PageMemoryNoStoreImpl implements PageMemory {
     }
 
     /**
-     * @param pageId Page ID.
+     * @param pageIdx Page index.
      * @return Segment.
      */
-    private Segment segment(long pageId) {
-        long pageIdx = PageIdUtils.pageIndex(pageId);
-
+    private Segment segment(int pageIdx) {
         int segIdx = segmentIndex(pageIdx);
 
         return segments[segIdx];
@@ -537,18 +554,17 @@ public class PageMemoryNoStoreImpl implements PageMemory {
         }
 
         /**
-         * @param cacheId Cache ID.
          * @param pageId Page ID to pin.
          * @return Pinned page impl.
          */
         @SuppressWarnings("TypeMayBeWeakened")
-        private PageNoStoreImpl acquirePage(int cacheId, long pageId) {
-            long absPtr = absolute(pageId);
+        private PageNoStoreImpl acquirePage(int pageIdx, long pageId) {
+            long absPtr = absolute(pageIdx);
 
             if (trackAcquiredPages)
                 acquiredPages.incrementAndGet();
 
-            return new PageNoStoreImpl(PageMemoryNoStoreImpl.this, absPtr, cacheId, pageId);
+            return new PageNoStoreImpl(PageMemoryNoStoreImpl.this, absPtr, pageId);
         }
 
         /**
@@ -558,12 +574,10 @@ public class PageMemoryNoStoreImpl implements PageMemory {
         }
 
         /**
-         * @param relativePtr Relative pointer.
+         * @param pageIdx Page index.
          * @return Absolute pointer.
          */
-        private long absolute(long relativePtr) {
-            int pageIdx = PageIdUtils.pageIndex(relativePtr);
-
+        private long absolute(int pageIdx) {
             pageIdx &= idxMask;
 
             long off = ((long)pageIdx) * sysPageSize;
@@ -589,10 +603,12 @@ public class PageMemoryNoStoreImpl implements PageMemory {
          * @param pageId Page ID to release.
          */
         private void releaseFreePage(long pageId) {
+            int pageIdx = PageIdUtils.pageIndex(pageId);
+
             // Clear out flags and file ID.
-            long relPtr = PageIdUtils.pageId(0, (byte)0, PageIdUtils.pageIndex(pageId));
+            long relPtr = PageIdUtils.pageId(0, (byte)0, pageIdx);
 
-            long absPtr = absolute(relPtr);
+            long absPtr = absolute(pageIdx);
 
             // Second, write clean relative pointer instead of page ID.
             writePageId(absPtr, relPtr);
@@ -624,7 +640,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
                 long cnt = ((freePageRelPtrMasked & COUNTER_MASK) + COUNTER_INC) & COUNTER_MASK;
 
                 if (freePageRelPtr != INVALID_REL_PTR) {
-                    long freePageAbsPtr = absolute(freePageRelPtr);
+                    long freePageAbsPtr = absolute(PageIdUtils.pageIndex(freePageRelPtr));
 
                     long nextFreePageRelPtr = GridUnsafe.getLong(freePageAbsPtr) & ADDRESS_MASK;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java
index 3d6a553..d68466f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java
@@ -36,21 +36,17 @@ public class PageNoStoreImpl implements Page {
     private long pageId;
 
     /** */
-    private int cacheId;
-
-    /** */
     private PageMemoryNoStoreImpl pageMem;
 
     /**
+     * @param pageMem Page memory.
      * @param absPtr Absolute pointer.
+     * @param pageId Page ID.
      */
-    PageNoStoreImpl(
-        PageMemoryNoStoreImpl pageMem, long absPtr, int cacheId, long pageId
-    ) {
+    PageNoStoreImpl(PageMemoryNoStoreImpl pageMem, long absPtr, long pageId) {
         this.pageMem = pageMem;
         this.absPtr = absPtr;
 
-        this.cacheId = cacheId;
         this.pageId = pageId;
     }
 
@@ -68,7 +64,7 @@ public class PageNoStoreImpl implements Page {
 
     /** {@inheritDoc} */
     @Override public FullPageId fullId() {
-        return new FullPageId(pageId, cacheId);
+        throw new UnsupportedOperationException();
     }
 
     /** {@inheritDoc} */
@@ -142,7 +138,6 @@ public class PageNoStoreImpl implements Page {
         SB sb = new SB("PageNoStoreImpl [absPtr=0x");
 
         sb.appendHex(absPtr);
-        sb.a(", cacheId=").a(cacheId);
         sb.a(", pageId=0x").appendHex(pageId);
         sb.a("]");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
index 9838768..76d0832 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
@@ -1074,41 +1074,6 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
     /**
      *
      */
-    private static class LinkSearchRow implements CacheSearchRow {
-        /** */
-        private final int hash;
-
-        /** */
-        private final long link;
-
-        /**
-         * @param hash Key hash code.
-         * @param link Link.
-         */
-        LinkSearchRow(int hash, long link) {
-            this.hash = hash;
-            this.link = link;
-        }
-
-        /** {@inheritDoc} */
-        @Override public KeyCacheObject key() {
-            throw new UnsupportedOperationException();
-        }
-
-        /** {@inheritDoc} */
-        @Override public long link() {
-            return link;
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hash() {
-            return hash;
-        }
-    }
-
-    /**
-     *
-     */
     private class DataRow extends CacheDataRowAdapter {
         /** */
         protected int part = -1;
@@ -1119,8 +1084,9 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
         /**
          * @param hash Hash code.
          * @param link Link.
+         * @param keyOnly If {@code true} initializes only key.
          */
-        DataRow(int hash, long link) {
+        DataRow(int hash, long link, boolean keyOnly) {
             super(link);
 
             this.hash = hash;
@@ -1129,7 +1095,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
 
             try {
                 // We can not init data row lazily because underlying buffer can be concurrently cleared.
-                initFromLink(cctx, false);
+                initFromLink(cctx, keyOnly);
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
@@ -1238,41 +1204,41 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
 
             PageMemory pageMem = cctx.shared().database().pageMemory();
 
-            try (Page page = page(pageId(link))) {
-                long pageAddr = page.getForReadPointer(); // Non-empty data page must not be recycled.
+//            try (Page page = page(pageId(link))) {
+//            }
+            long pageAddr = pageMem.readLockPage0(0, pageId(link)); // Non-empty data page must not be recycled.
 
-                assert pageAddr != 0L : link;
+            assert pageAddr != 0L : link;
 
-                try {
-                    DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr);
-
-                    DataPagePayload data = io.readPayload(pageAddr,
-                        itemId(link),
-                        pageMem.pageSize());
+            try {
+                DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr);
 
-                    if (data.nextLink() == 0) {
-                        long addr = pageAddr + data.offset();
+                DataPagePayload data = io.readPayload(pageAddr,
+                    itemId(link),
+                    pageMem.pageSize());
 
-                        int len = PageUtils.getInt(addr, 0);
+                if (data.nextLink() == 0) {
+                    long addr = pageAddr + data.offset();
 
-                        int size = Math.min(bytes.length, len);
+                    int len = PageUtils.getInt(addr, 0);
 
-                        addr += 5; // Skip length and type byte.
+                    int size = Math.min(bytes.length, len);
 
-                        for (int i = 0; i < size; i++) {
-                            byte b1 = PageUtils.getByte(addr, i);
-                            byte b2 = bytes[i];
+                    addr += 5; // Skip length and type byte.
 
-                            if (b1 != b2)
-                                return b1 > b2 ? 1 : -1;
-                        }
+                    for (int i = 0; i < size; i++) {
+                        byte b1 = PageUtils.getByte(addr, i);
+                        byte b2 = bytes[i];
 
-                        return Integer.compare(len, bytes.length);
+                        if (b1 != b2)
+                            return b1 > b2 ? 1 : -1;
                     }
+
+                    return Integer.compare(len, bytes.length);
                 }
-                finally {
-                    page.releaseRead();
-                }
+            }
+            finally {
+                pageMem.readUnlockPage0(pageAddr);
             }
 
             // TODO GG-11768.
@@ -1323,7 +1289,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
          * @return Search row.
          */
         private CacheSearchRow keySearchRow(int hash, long link) {
-            return new LinkSearchRow(hash, link);
+            return new DataRow(hash, link, true);
         }
 
         /**
@@ -1332,7 +1298,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple
          * @return Data row.
          */
         private CacheDataRow dataRow(int hash, long link) {
-            return new DataRow(hash, link);
+            return new DataRow(hash, link, false);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
index acb435e..3e215d5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java
@@ -93,45 +93,45 @@ public class CacheDataRowAdapter implements CacheDataRow {
         do {
             PageMemory pageMem = cctx.shared().database().pageMemory();
 
-            try (Page page = page(pageId(nextLink), cctx)) {
-                long pageAddr = page.getForReadPointer(); // Non-empty data page must not be recycled.
+            long pageAddr = pageMem.readLockPage0(0, pageId(nextLink)); // Non-empty data page must not be recycled.
 
-                assert pageAddr != 0L : nextLink;
+            assert pageAddr != 0L : nextLink;
 
-                try {
-                    DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr);
+            try {
+                DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr);
 
-                    DataPagePayload data = io.readPayload(pageAddr,
-                        itemId(nextLink),
-                        pageMem.pageSize());
+                DataPagePayload data = io.readPayload(pageAddr,
+                    itemId(nextLink),
+                    pageMem.pageSize());
 
-                    nextLink = data.nextLink();
+                nextLink = data.nextLink();
 
-                    if (first) {
-                        if (nextLink == 0) {
-                            // Fast path for a single page row.
-                            readFullRow(coctx, pageAddr + data.offset(), keyOnly);
+                if (first) {
+                    if (nextLink == 0) {
+                        // Fast path for a single page row.
+                        readFullRow(coctx, pageAddr + data.offset(), keyOnly);
 
-                            return;
-                        }
-
-                        first = false;
+                        return;
                     }
 
-                    ByteBuffer buf = pageMem.pageBuffer(pageAddr);
+                    first = false;
+                }
 
-                    buf.position(data.offset());
-                    buf.limit(data.offset() + data.payloadSize());
+                ByteBuffer buf = pageMem.pageBuffer(pageAddr);
 
-                    incomplete = readFragment(coctx, buf, keyOnly, incomplete);
+                buf.position(data.offset());
+                buf.limit(data.offset() + data.payloadSize());
 
-                    if (keyOnly && key != null)
-                        return;
-                }
-                finally {
-                    page.releaseRead();
-                }
+                incomplete = readFragment(coctx, buf, keyOnly, incomplete);
+
+                if (keyOnly && key != null)
+                    return;
+            }
+            finally {
+                pageMem.readUnlockPage0(pageAddr);
             }
+//            try (Page page = page(pageId(nextLink), cctx)) {
+//            }
         }
         while(nextLink != 0);
 
@@ -200,17 +200,13 @@ public class CacheDataRowAdapter implements CacheDataRow {
         int len = PageUtils.getInt(addr, off);
         off += 4;
 
-        if (len == 0)
-            key = null;
-        else {
-            byte type = PageUtils.getByte(addr, off);
-            off++;
+        byte type = PageUtils.getByte(addr, off);
+        off++;
 
-            byte[] bytes = PageUtils.getBytes(addr, off, len);
-            off += len;
+        byte[] bytes = PageUtils.getBytes(addr, off, len);
+        off += len;
 
-            key = coctx.processor().toKeyCacheObject(coctx, type, bytes);
-        }
+        key = coctx.processor().toKeyCacheObject(coctx, type, bytes);
 
         if (keyOnly) {
             assert key != null: "key";
@@ -221,17 +217,13 @@ public class CacheDataRowAdapter implements CacheDataRow {
         len = PageUtils.getInt(addr, off);
         off += 4;
 
-        if (len == 0)
-            val = null;
-        else {
-            byte type = PageUtils.getByte(addr, off);
-            off++;
+        type = PageUtils.getByte(addr, off);
+        off++;
 
-            byte[] bytes = PageUtils.getBytes(addr, off, len);
-            off += len;
+        bytes = PageUtils.getBytes(addr, off, len);
+        off += len;
 
-            val = coctx.processor().toCacheObject(coctx, type, bytes);
-        }
+        val = coctx.processor().toCacheObject(coctx, type, bytes);
 
         ver = CacheVersionIO.read(addr + off, false);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java
index f47a697..1ca38da 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java
@@ -162,6 +162,14 @@ public abstract class DataStructure implements PageLockListener {
         return PageHandler.readLock(page, this);
     }
 
+    protected final long readLock0(long pageId) {
+        return pageMem.readLockPage0(0, pageId);
+    }
+
+    protected final void readUnlock0(long pageAddr) {
+        pageMem.readUnlockPage0(pageAddr);
+    }
+
     /**
      * @param page Page.
      * @param buf Buffer.

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
index 7cf829e..82d3ae6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
@@ -746,15 +746,23 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
             firstPageId = getFirstPageId(meta, 0); // Level 0 is always at the bottom.
         }
 
-        try (Page first = page(firstPageId)) {
-            long pageAddr = readLock(first); // We always merge pages backwards, the first page is never removed.
+//        try (Page first = page(firstPageId)) {
+//            long pageAddr = readLock(first); // We always merge pages backwards, the first page is never removed.
+//
+//            try {
+//                cursor.init(pageAddr, io(pageAddr), 0);
+//            }
+//            finally {
+//                readUnlock(first, pageAddr);
+//            }
+//        }
+        long pageAddr = readLock0(firstPageId); // We always merge pages backwards, the first page is never removed.
 
-            try {
-                cursor.init(pageAddr, io(pageAddr), 0);
-            }
-            finally {
-                readUnlock(first, pageAddr);
-            }
+        try {
+            cursor.init(pageAddr, io(pageAddr), 0);
+        }
+        finally {
+            readUnlock0(pageAddr);
         }
 
         return cursor;
@@ -856,7 +864,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
      */
     private Result findDown(final Get g, final long pageId, final long fwdId, final int lvl)
         throws IgniteCheckedException {
-        Page page = page(pageId);
+        //Page page = page(pageId);
 
         try {
             for (;;) {
@@ -864,7 +872,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
                 g.pageId = pageId;
                 g.fwdId = fwdId;
 
-                Result res = readPage(page, this, search, g, lvl, RETRY);
+                Result res = readPage(pageMem, pageId, search, g, lvl, RETRY);
 
                 switch (res) {
                     case GO_DOWN:
@@ -898,8 +906,8 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
             }
         }
         finally {
-            if (g.canRelease(page, lvl))
-                page.close();
+//            if (g.canRelease(page, lvl))
+//                page.close();
         }
     }
 
@@ -1021,28 +1029,26 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
      * @throws IgniteCheckedException If failed.
      */
     private L getGreatestRowInSubTree(long pageId) throws IgniteCheckedException {
-        try (Page page = page(pageId)) {
-            long pageAddr = readLock(page); // No correctness guaranties.
+        long pageAddr = readLock0(pageId); // No correctness guaranties.
 
-            try {
-                BPlusIO<L> io = io(pageAddr);
+        try {
+            BPlusIO<L> io = io(pageAddr);
 
-                int cnt = io.getCount(pageAddr);
+            int cnt = io.getCount(pageAddr);
 
-                if (io.isLeaf()) {
-                    if (cnt <= 0) // This code is called only if the tree is not empty, so we can't see empty leaf.
-                        fail("Invalid leaf count: " + cnt + " " + U.hexLong(pageId));
+            if (io.isLeaf()) {
+                if (cnt <= 0) // This code is called only if the tree is not empty, so we can't see empty leaf.
+                    fail("Invalid leaf count: " + cnt + " " + U.hexLong(pageId));
 
-                    return io.getLookupRow(this, pageAddr, cnt - 1);
-                }
+                return io.getLookupRow(this, pageAddr, cnt - 1);
+            }
 
-                long rightId = inner(io).getLeft(pageAddr, cnt);// The same as getRight(cnt - 1), but good for routing pages.
+            long rightId = inner(io).getLeft(pageAddr, cnt);// The same as getRight(cnt - 1), but good for routing pages.
 
-                return getGreatestRowInSubTree(rightId);
-            }
-            finally {
-                readUnlock(page, pageAddr);
-            }
+            return getGreatestRowInSubTree(rightId);
+        }
+        finally {
+            readUnlock0(pageAddr);
         }
     }
 
@@ -1385,7 +1391,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
                 r.fwdId = fwdId;
                 r.backId = backId;
 
-                Result res = readPage(page, this, search, r, lvl, RETRY);
+                Result res = readPage(pageMem, pageId, search, r, lvl, RETRY);
 
                 switch (res) {
                     case GO_DOWN_X:
@@ -1784,10 +1790,12 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
      * @return Operation result.
      */
     private Result askNeighbor(long pageId, Get g, boolean back) throws IgniteCheckedException {
-        try (Page page = page(pageId)) {
-            return readPage(page, this, askNeighbor, g,
-                back ? TRUE.ordinal() : FALSE.ordinal(), RETRY);
-        }
+        return readPage(pageMem, pageId, askNeighbor, g,
+            back ? TRUE.ordinal() : FALSE.ordinal(), RETRY);
+//        try (Page page = page(pageId)) {
+//            return readPage(page, this, askNeighbor, g,
+//                back ? TRUE.ordinal() : FALSE.ordinal(), RETRY);
+//        }
     }
 
     /**
@@ -1810,7 +1818,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
                 p.pageId = pageId;
                 p.fwdId = fwdId;
 
-                Result res = readPage(page, this, search, p, lvl, RETRY);
+                Result res = readPage(pageMem, pageId, search, p, lvl, RETRY);
 
                 switch (res) {
                     case GO_DOWN:
@@ -3671,24 +3679,22 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
                     return false; // Done.
                 }
 
-                try (Page next = page(nextPageId)) {
-                    long pageAddr = readLock(next); // Doing explicit null check.
+                long pageAddr = readLock0(nextPageId); // Doing explicit null check.
 
-                    // If concurrent merge occurred we have to reinitialize cursor from the last returned row.
-                    if (pageAddr == 0L)
-                        break;
+                // If concurrent merge occurred we have to reinitialize cursor from the last returned row.
+                if (pageAddr == 0L)
+                    break;
 
-                    try {
-                        BPlusIO<L> io = io(pageAddr);
+                try {
+                    BPlusIO<L> io = io(pageAddr);
 
-                        if (fillFromBuffer(pageAddr, io, 0, io.getCount(pageAddr)))
-                            return true;
+                    if (fillFromBuffer(pageAddr, io, 0, io.getCount(pageAddr)))
+                        return true;
 
-                        // Continue fetching forward.
-                    }
-                    finally {
-                        readUnlock(next, pageAddr);
-                    }
+                    // Continue fetching forward.
+                }
+                finally {
+                    readUnlock0(pageAddr);
                 }
             }
 
@@ -3724,7 +3730,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         @SuppressWarnings("unchecked")
         @Override public final Result run(Page page, PageIO iox, long pageAddr, G g, int lvl)
             throws IgniteCheckedException {
-            assert PageIO.getPageId(pageAddr) == page.id();
+//            assert PageIO.getPageId(pageAddr) == page.id();
 
             // If we've passed the check for correct page ID, we can safely cast.
             BPlusIO<L> io = (BPlusIO<L>)iox;

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java
index 3e6e637..37adc49 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java
@@ -95,6 +95,29 @@ public abstract class PageHandler<X, R> {
         }
     }
 
+    public static <X, R> R readPage(
+        PageMemory pageMem,
+        long pageId,
+        PageHandler<X, R> h,
+        X arg,
+        int intArg,
+        R lockFailed
+    ) throws IgniteCheckedException {
+        long pageAddr = pageMem.readLockPage0(0, pageId);
+
+        if (pageAddr == 0L)
+            return lockFailed;
+
+        try {
+            PageIO io = PageIO.getPageIO(pageAddr);
+
+            return h.run(null, io, pageAddr, arg, intArg);
+        }
+        finally {
+            pageMem.readUnlockPage0(pageAddr);
+        }
+    }
+
     /**
      * @param pageMem Page memory.
      * @param page Page.

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/core/src/main/java/org/apache/ignite/internal/util/GridCursorIteratorWrapper.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridCursorIteratorWrapper.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridCursorIteratorWrapper.java
index 201c8dd..e13854b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridCursorIteratorWrapper.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridCursorIteratorWrapper.java
@@ -1,3 +1,20 @@
+/*
+ * 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.util;
 
 import java.util.Iterator;

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCachePartitionedFieldsQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCachePartitionedFieldsQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCachePartitionedFieldsQuerySelfTest.java
index 26f3191..4934255 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCachePartitionedFieldsQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCachePartitionedFieldsQuerySelfTest.java
@@ -62,20 +62,20 @@ public class IgniteCachePartitionedFieldsQuerySelfTest extends IgniteCacheAbstra
 
     /** @throws Exception If failed. */
     public void testLocalQuery() throws Exception {
-        IgniteCache<Object, Object> cache = grid(0).cache( null);
+        IgniteCache<Integer, Integer> cache = jcache(Integer.class, Integer.class);
 
         awaitPartitionMapExchange(true, true, null);
 
-        int expected = 0;
+        int exp = 0;
 
         for(Cache.Entry e: cache.localEntries(CachePeekMode.PRIMARY)){
             if(e.getValue() instanceof Integer)
-                expected++;
+                exp++;
         }
 
         QueryCursor<List<?>> qry = cache
             .query(new SqlFieldsQuery("select _key, _val from Integer").setLocal(true));
 
-        assertEquals(expected, qry.getAll().size());
+        assertEquals(exp, qry.getAll().size());
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java
index 4ec840c..953e5fa 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedFieldsQuerySelfTest.java
@@ -48,13 +48,13 @@ public class IgniteCacheReplicatedFieldsQuerySelfTest extends IgniteCacheAbstrac
      * @throws Exception If failed.
      */
     public void testLostIterator() throws Exception {
-        IgniteCache<Object, Object> cache = grid(0).cache(null);
+        IgniteCache<Integer, Integer> cache = intCache;
 
         QueryCursor<List<?>> qry = null;
 
-        int maximumQueryIteratorCount = cache.getConfiguration(CacheConfiguration.class).getMaxQueryIteratorsCount();
+        int maximumQryIterCnt = cache.getConfiguration(CacheConfiguration.class).getMaxQueryIteratorsCount();
 
-        for (int i = 0; i < maximumQueryIteratorCount + 1; i++) {
+        for (int i = 0; i < maximumQryIterCnt + 1; i++) {
             QueryCursor<List<?>> q = cache
                 .query(new SqlFieldsQuery("select _key from Integer where _key >= 0 order by _key"));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/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 5daf415..72f186c 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
@@ -27,16 +27,14 @@ import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashSet;
-import java.util.Iterator;
 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.*;
+import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.processors.query.h2.database.H2RowFactory;
-import org.apache.ignite.internal.util.lang.*;
+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;

http://git-wip-us.apache.org/repos/asf/ignite/blob/4a36602c/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java
index 0992fe2..09a1884 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java
@@ -383,10 +383,10 @@ public class GridQueryParsingTest extends GridCommonAbstractTest {
         checkQuery("update Person p set name='Peter', old = length('zzz') limit 20");
         checkQuery("update Person p set name=DEFAULT, old = null limit ?");
         checkQuery("update Person p set name=? where old >= ? and old < ? limit ?");
-        checkQuery("update Person p set name=(select a.Street from Address a where a.id=p.addrId), old = (select 42)" +
+        checkQuery("update Person p set name=(select a.Street from \"addr\".Address a where a.id=p.addrId), old = (select 42)" +
             " where old = sqrt(?)");
         checkQuery("update Person p set (name, old) = (select 'Peter', 42)");
-        checkQuery("update Person p set (name, old) = (select street, id from Address where id > 5 and id <= ?)");
+        checkQuery("update Person p set (name, old) = (select street, id from \"addr\".Address where id > 5 and id <= ?)");
     }
 
     /**


[2/2] ignite git commit: Merge remote-tracking branch 'origin/ignite-gg-11810-1' into ignite-gg-11810-1

Posted by sb...@apache.org.
Merge remote-tracking branch 'origin/ignite-gg-11810-1' into ignite-gg-11810-1


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

Branch: refs/heads/ignite-gg-11810-1
Commit: 86896a81f1ca0ec927a75ecca2e03915e67cab13
Parents: 4a36602 c7bd20c
Author: sboikov <sb...@gridgain.com>
Authored: Fri Jan 13 16:37:22 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Jan 13 16:37:22 2017 +0300

----------------------------------------------------------------------

----------------------------------------------------------------------