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);
+ }
}
/**