You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2018/10/08 08:29:57 UTC
ignite git commit: Optimizing snapshot create
Repository: ignite
Updated Branches:
refs/heads/ignite-gg-14288 [created] d806c8b0f
Optimizing snapshot create
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d806c8b0
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d806c8b0
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d806c8b0
Branch: refs/heads/ignite-gg-14288
Commit: d806c8b0fb911fb30e37529d8b0033a8949973b7
Parents: 81533dd
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Mon Oct 8 11:29:36 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Mon Oct 8 11:29:36 2018 +0300
----------------------------------------------------------------------
.../ignite/internal/pagemem/PageSupport.java | 12 +++++++
.../pagemem/impl/PageMemoryNoStoreImpl.java | 7 ++++
.../persistence/pagemem/PageMemoryImpl.java | 36 ++++++++++++++++++++
3 files changed, 55 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/d806c8b0/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java
index ed2311f..4044f74 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageSupport.java
@@ -36,6 +36,18 @@ public interface PageSupport {
public long acquirePage(int grpId, long pageId) throws IgniteCheckedException;
/**
+ * Tries to get the page absolute pointer associated with the given page ID. Each page obtained with this method
+ * must be released by calling {@link #releasePage(int, long, long)}. This method will return -1 if a page with
+ * the given ID was not allocated yet or is not loaded to memory.
+ *
+ * @param grpId Cache group ID.
+ * @param pageId Page ID.
+ * @return Page pointer.
+ * @throws IgniteCheckedException If failed.
+ */
+ public long tryAcquirePage(int grpId, long pageId) throws IgniteCheckedException;
+
+ /**
*
* @param grpId Cache group ID.
* @param pageId Page ID to release.
http://git-wip-us.apache.org/repos/asf/ignite/blob/d806c8b0/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 66d713c..b3078be 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
@@ -24,6 +24,8 @@ import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.IgniteSystemProperties;
@@ -332,6 +334,11 @@ public class PageMemoryNoStoreImpl implements PageMemory {
}
/** {@inheritDoc} */
+ @Override public long tryAcquirePage(int grpId, long pageId) throws IgniteCheckedException {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@inheritDoc} */
@Override public int pageSize() {
return sysPageSize - PAGE_OVERHEAD;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d806c8b0/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
index 55c5fb5..dc4547c 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
@@ -638,6 +638,42 @@ public class PageMemoryImpl implements PageMemoryEx {
}
/** {@inheritDoc} */
+ @Override public long tryAcquirePage(int grpId, long pageId) throws IgniteCheckedException {
+ int partId = PageIdUtils.partId(pageId);
+
+ if (PageIdUtils.pageIndex(pageId) >= storeMgr.pages(grpId, PageIdUtils.partId(pageId)))
+ return -1;
+
+ Segment seg = segment(grpId, pageId);
+
+ seg.readLock().lock();
+
+ try {
+ long relPtr = seg.loadedPages.get(
+ grpId,
+ PageIdUtils.effectivePageId(pageId),
+ seg.partGeneration(grpId, partId),
+ INVALID_REL_PTR,
+ INVALID_REL_PTR
+ );
+
+ // The page is loaded to the memory.
+ if (relPtr != INVALID_REL_PTR) {
+ long absPtr = seg.absolute(relPtr);
+
+ seg.acquirePage(absPtr);
+
+ return absPtr;
+ }
+
+ return -1;
+ }
+ finally {
+ seg.readLock().unlock();
+ }
+ }
+
+ /** {@inheritDoc} */
@Override public long acquirePage(int grpId, long pageId, boolean restore) throws IgniteCheckedException {
FullPageId fullId = new FullPageId(pageId, grpId);