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 2016/12/21 08:35:43 UTC

ignite git commit: opt2

Repository: ignite
Updated Branches:
  refs/heads/ignite-db-x-opt2 8ec142e0c -> 64d5d744e


opt2


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

Branch: refs/heads/ignite-db-x-opt2
Commit: 64d5d744e15b5b82f8617fea92a40ea1cee13520
Parents: 8ec142e
Author: sboikov <sb...@gridgain.com>
Authored: Wed Dec 21 11:35:38 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Dec 21 11:35:38 2016 +0300

----------------------------------------------------------------------
 .../ignite/internal/pagemem/PageMemory.java     |  4 ++
 .../pagemem/impl/PageMemoryNoStoreImpl.java     | 17 +++++++
 .../internal/pagemem/impl/PageNoStoreImpl.java  |  2 +-
 .../cache/database/CacheDataRowAdapter.java     | 50 ++++++++++++--------
 4 files changed, 52 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/64d5d744/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 61414ea..8a9cd5c 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
@@ -39,6 +39,10 @@ public interface PageMemory extends LifecycleAware, PageIdAllocator {
 
     public Page readPage(int cacheId, long pageId) throws IgniteCheckedException;
 
+    public long readLockPageAddr(int cacheId, long pageId) throws IgniteCheckedException;
+
+    public void releaseReadLock(long absPtr) throws IgniteCheckedException;
+
     public long pageAddr(int cacheId, long pageId) throws IgniteCheckedException;
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/64d5d744/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 d5777de..ba906dc 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
@@ -281,6 +281,23 @@ public class PageMemoryNoStoreImpl implements PageMemory {
     }
 
     @Override
+    public long readLockPageAddr(int cacheId, long pageId) throws IgniteCheckedException {
+        Segment seg = segment(pageId);
+
+        long absPtr = seg.absolute(pageId);
+
+        if (readLockPage(absPtr, PageIdUtils.tag(pageId)))
+            return absPtr + PageMemoryNoStoreImpl.PAGE_OVERHEAD;
+
+        return -1L;
+    }
+
+    @Override
+    public void releaseReadLock(long absPtr) throws IgniteCheckedException {
+        readUnlockPage(absPtr - PageMemoryNoStoreImpl.PAGE_OVERHEAD);
+    }
+
+    @Override
     public long pageAddr(int cacheId, long pageId) throws IgniteCheckedException {
         Segment seg = segment(pageId);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/64d5d744/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 5fe15a0..552b28b 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
@@ -154,7 +154,7 @@ public class PageNoStoreImpl implements Page {
 
     /** {@inheritDoc} */
     @Override public void close() {
-        pageMem.releasePage(this);
+        //pageMem.releasePage(this);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/64d5d744/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 89636cb..5e4c8ec 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
@@ -76,31 +76,36 @@ public class CacheDataRowAdapter implements CacheDataRow {
         boolean first = true;
 
         do {
-            long buf = cctx.shared().database().pageMemory().pageAddr(cctx.cacheId(), pageId(nextLink));
+            long buf = cctx.shared().database().pageMemory().readLockPageAddr(cctx.cacheId(), pageId(nextLink));
 
-            DataPageIO io = DataPageIO.VERSION1;
+            try {
+                DataPageIO io = DataPageIO.VERSION1;
 
-            long addr = io.getPositionOnPayload(buf, itemId(nextLink));
+                long addr = io.getPositionOnPayload(buf, itemId(nextLink));
 
-            addr = addr + buf;
+                addr = addr + buf;
 
-            int len = GridUnsafe.UNSAFE.getInt(addr);
+                int len = GridUnsafe.UNSAFE.getInt(addr);
 
-            //byte type = buf.get();
+                //byte type = buf.get();
 
-            int size = Math.min(bytes.length, len);
+                int size = Math.min(bytes.length, len);
 
-            addr += 5;
+                addr += 5;
 
-            for (int i = 0; i < size; i++) {
-                byte b1 = GridUnsafe.UNSAFE.getByte(addr++);
-                byte b2 = bytes[i];
+                for (int i = 0; i < size; i++) {
+                    byte b1 = GridUnsafe.UNSAFE.getByte(addr++);
+                    byte b2 = bytes[i];
 
-                if (b1 != b2)
-                    return b1 > b2 ? 1 : -1;
-            }
+                    if (b1 != b2)
+                        return b1 > b2 ? 1 : -1;
+                }
 
-            return Integer.compare(len, bytes.length);
+                return Integer.compare(len, bytes.length);
+            }
+            finally {
+                cctx.shared().database().pageMemory().releaseReadLock(buf);
+            }
         }
         while(nextLink != 0);
     }
@@ -170,15 +175,20 @@ public class CacheDataRowAdapter implements CacheDataRow {
         IncompleteObject<?> incomplete = null;
         boolean first = true;
 
-        long buf = cctx.shared().database().pageMemory().pageAddr(cctx.cacheId(), pageId(nextLink));
+        long buf = cctx.shared().database().pageMemory().readLockPageAddr(cctx.cacheId(), pageId(nextLink));
 
-        DataPageIO io = DataPageIO.VERSION1;
+        try {
+            DataPageIO io = DataPageIO.VERSION1;
 
-        long addr = io.getPositionOnPayload(buf, itemId(nextLink));
+            long addr = io.getPositionOnPayload(buf, itemId(nextLink));
 
-        addr = addr + buf;
+            addr = addr + buf;
 
-        readFullRow(coctx, addr, keyOnly);
+            readFullRow(coctx, addr, keyOnly);
+        }
+        finally {
+            cctx.shared().database().pageMemory().releaseReadLock(buf);
+        }
     }
 
     /**